require 'spec_helper'

describe 'tripleo::haproxy::endpoint' do

  let(:title) { 'neutron' }

  let :pre_condition do
    'include ::haproxy'
  end

  let :params do {
    :public_virtual_ip         => '192.168.0.1',
    :internal_ip               => '10.0.0.1',
    :service_port              => 9696,
    :ip_addresses              => ['10.0.0.2', '10.0.0.3', '10.0.0.4'],
    :server_names              => ['controller1', 'controller2', 'controller3'],
    :public_ssl_port           => 19696,
    :member_options            => [ 'check', 'inter 2000', 'rise 2', 'fall 5' ],
    :haproxy_listen_bind_param => ['transparent'],
  }
  end

  shared_examples_for 'tripleo haproxy endpoint' do
    context 'with basic parameters to configure neutron binding' do
      it 'should configure haproxy' do
        is_expected.to contain_haproxy__listen('neutron').with(
          :collect_exported => false,
          :bind             => [
            ['10.0.0.1:9696', ['transparent']],
            ['192.168.0.1:9696', ['transparent']]
          ]
        )
      end
    end

    context 'with dual-stack' do
      before :each do
        params.merge!({
          :public_virtual_ip => ['fd00:fd00:fd00:2000::14', '192.168.0.1'],
        })
      end
      it 'should configure haproxy' do
        is_expected.to contain_haproxy__listen('neutron').with(
          :collect_exported => false,
          :bind             => [
            ['10.0.0.1:9696', ['transparent']],
            ['fd00:fd00:fd00:2000::14:9696', ['transparent']],
            ['192.168.0.1:9696', ['transparent']]
          ]
        )
      end
   end
  end

  context 'on Debian platforms' do
    let :facts do
      { :osfamily => 'Debian',
        :hostname => 'myhost' }
    end

    it_configures 'tripleo haproxy endpoint'
  end

  context 'on RedHat platforms' do
    let :facts do
      { :osfamily => 'RedHat',
        :hostname => 'myhost' }
    end

    it_configures 'tripleo haproxy endpoint'
  end
end