require 'spec_helper'

describe 'quantum::plugins::cisco' do

  let :pre_condition do
    "class { 'quantum::server': auth_password => 'password'}"
  end

  let :params do
    { :keystone_username => 'quantum',
      :keystone_password => 'quantum_pass',
      :keystone_auth_url => 'http://127.0.0.1:35357/v2.0/',
      :keystone_tenant   => 'tenant',

      :database_name     => 'quantum',
      :database_pass     => 'dbpass',
      :database_host     => 'localhost',
      :database_user     => 'quantum'}
  end

  let :params_default do
    {
      :vswitch_plugin    => 'quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2',
      :vlan_start        => '100',
      :vlan_end          => '3000',
      :vlan_name_prefix  => 'q-',
      :model_class       => 'quantum.plugins.cisco.models.virt_phy_sw_v2.VirtualPhysicalSwitchModelV2',
      :max_ports         => '100',
      :max_port_profiles => '65568',
      :max_networks      => '65568',
      :manager_class     => 'quantum.plugins.cisco.segmentation.l2network_vlan_mgr_v2.L2NetworkVLANMgr'
    }
  end

  shared_examples_for 'default cisco plugin' do

    before do
      params.merge!(params_default)
    end

    it 'should have a plugin config folder' do
      should contain_file('/etc/quantum/plugins').with(
        :ensure => 'directory',
        :owner  => 'root',
        :group  => 'quantum',
        :mode   => '0640'
      )
    end

    it 'should have a cisco plugin config folder' do
      should contain_file('/etc/quantum/plugins/cisco').with(
        :ensure => 'directory',
        :owner  => 'root',
        :group  => 'quantum',
        :mode   => '0640'
      )
    end

    it 'should perform default l2 configuration' do
      should contain_quantum_plugin_cisco_l2network('VLANS/vlan_start').\
        with_value(params[:vlan_start])
      should contain_quantum_plugin_cisco_l2network('VLANS/vlan_end').\
        with_value(params[:vlan_end])
      should contain_quantum_plugin_cisco_l2network('VLANS/vlan_name_prefix').\
        with_value(params[:vlan_name_prefix])
      should contain_quantum_plugin_cisco_l2network('MODEL/model_class').\
        with_value(params[:model_class])
      should contain_quantum_plugin_cisco_l2network('PORTS/max_ports').\
        with_value(params[:max_ports])
      should contain_quantum_plugin_cisco_l2network('PORTPROFILES/max_port_profiles').\
        with_value(params[:max_port_profiles])
      should contain_quantum_plugin_cisco_l2network('NETWORKS/max_networks').\
        with_value(params[:max_networks])
      should contain_quantum_plugin_cisco_l2network('SEGMENTATION/manager_class').\
        with_value(params[:manager_class])
    end

    it 'should create a dummy inventory item' do
      should contain_quantum_plugin_cisco('INVENTORY/dummy').\
        with_value('dummy')
    end

    it 'should configure the db connection' do
      should contain_quantum_plugin_cisco_db_conn('DATABASE/name').\
        with_value(params[:database_name])
      should contain_quantum_plugin_cisco_db_conn('DATABASE/user').\
        with_value(params[:database_user])
      should contain_quantum_plugin_cisco_db_conn('DATABASE/pass').\
        with_value(params[:database_pass])
      should contain_quantum_plugin_cisco_db_conn('DATABASE/host').\
        with_value(params[:database_host])
    end

    it 'should configure the admin credentials' do
      should contain_quantum_plugin_cisco_credentials('keystone/username').\
        with_value(params[:keystone_username])
      should contain_quantum_plugin_cisco_credentials('keystone/password').\
        with_value(params[:keystone_password])
      should contain_quantum_plugin_cisco_credentials('keystone/auth_url').\
        with_value(params[:keystone_auth_url])
      should contain_quantum_plugin_cisco_credentials('keystone/tenant').\
        with_value(params[:keystone_tenant])
    end

    it 'should perform vswitch plugin configuration' do
      should contain_quantum_plugin_cisco('PLUGINS/vswitch_plugin').\
          with_value('quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2')
    end

    describe 'with nexus plugin' do
      before do
        params.merge!(:nexus_plugin => 'quantum.plugins.cisco.nexus.cisco_nexus_plugin_v2.NexusPlugin')
      end

      it 'should perform nexus plugin configuration' do
        should contain_quantum_plugin_cisco('PLUGINS/nexus_plugin').\
          with_value('quantum.plugins.cisco.nexus.cisco_nexus_plugin_v2.NexusPlugin')
      end
    end

  end
  context 'on Debian platforms' do
    let :facts do
      { :osfamily => 'Debian' }
     end
     it_configures 'default cisco plugin'
  end
end