require 'spec_helper'

describe 'neutron::plugins::linuxbridge' do

  let :pre_condition do
    "class { 'neutron': rabbit_password => 'passw0rd' }"
  end

  let :params do
    { :sql_connection      => false,
      :network_vlan_ranges => 'physnet0:100:109',
      :tenant_network_type => 'vlan',
      :package_ensure      => 'installed'
    }
  end

  shared_examples_for 'neutron linuxbridge plugin' do

    it { is_expected.to contain_class('neutron::params') }

    it 'installs neutron linuxbridge plugin package' do
      is_expected.to contain_package('neutron-plugin-linuxbridge').with(
        :ensure => params[:package_ensure],
        :name   => platform_params[:linuxbridge_plugin_package],
        :tag    => 'openstack'
      )
    end

    it 'configures linuxbridge_conf.ini' do
      is_expected.to contain_neutron_plugin_linuxbridge('VLANS/tenant_network_type').with(
        :value => params[:tenant_network_type]
      )
      is_expected.to contain_neutron_plugin_linuxbridge('VLANS/network_vlan_ranges').with(
        :value => params[:network_vlan_ranges]
      )
    end

    it 'should create plugin symbolic link' do
      is_expected.to contain_file('/etc/neutron/plugin.ini').with(
        :ensure  => 'link',
        :target  => '/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini',
        :require => 'Package[neutron-plugin-linuxbridge]'
      )
    end
  end

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

    let :platform_params do
      { :linuxbridge_plugin_package => 'neutron-plugin-linuxbridge' }
    end

    context 'on Ubuntu operating systems' do
      before do
        facts.merge!({:operatingsystem => 'Ubuntu'})
      end

      it 'configures /etc/default/neutron-server' do
        is_expected.to contain_file_line('/etc/default/neutron-server:NEUTRON_PLUGIN_CONFIG').with(
          :path    => '/etc/default/neutron-server',
          :match   => '^NEUTRON_PLUGIN_CONFIG=(.*)$',
          :line    => 'NEUTRON_PLUGIN_CONFIG=/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini',
          :require => ['Package[neutron-plugin-linuxbridge]', 'Package[neutron-server]'],
          :notify  => 'Service[neutron-server]'
        )
      end
      it_configures 'neutron linuxbridge plugin'
    end

    context 'on Debian operating systems' do
      before do
        facts.merge!({:operatingsystem => 'Debian'})
      end

      it_configures 'neutron linuxbridge plugin'
    end
  end

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

    let :platform_params do
      { :linuxbridge_plugin_package => 'openstack-neutron-linuxbridge' }
    end

    it_configures 'neutron linuxbridge plugin'
  end
end
