--- /dev/null
+require 'spec_helper'
+
+describe 'neutron::agents::n1kv_vem' do
+
+ let :facts do
+ { :osfamily => 'RedHat' }
+ end
+
+ it 'should have a n1kv-vem config file' do
+ should contain_file('/etc/n1kv/n1kv.conf').with(
+ :ensure => 'present',
+ :owner => 'root',
+ :group => 'root',
+ :mode => '0664'
+ )
+ end
+
+ it 'install n1kv-vem' do
+ should contain_package('libnl').with_before('Package[nexus1000v]')
+ should contain_service('openvswitch').with_notify('Package[nexus1000v]')
+ should contain_package('nexus1000v').with_notify('Service[nexus1000v]')
+ should contain_service('nexus1000v').with_ensure('running')
+ end
+
+ context 'with local file vem rpm' do
+ let :params do
+ {
+ :n1kv_source => 'vem.rpm'
+ }
+ end
+
+ it 'verify dependency' do
+ should contain_package('nexus1000v').with_source('/var/n1kv/vem.rpm')
+ should contain_file('/var/n1kv/vem.rpm').that_requires('File[/var/n1kv]')
+ should contain_file('/var/n1kv/vem.rpm').with(
+ :owner => 'root',
+ :group => 'root',
+ :mode => '0664'
+ )
+ end
+ end
+
+ context 'remote vem rpm' do
+ let :params do
+ {
+ :n1kv_source => 'http://www.cisco.com/repo'
+ }
+ end
+
+ it 'verify dependency' do
+ should contain_package('nexus1000v').without_source
+ should contain_yumrepo('cisco-vem-repo').with(
+ :baseurl => 'http://www.cisco.com/repo',
+ :enabled => 1
+ )
+ end
+ end
+
+ it 'execute reread config upon config change' do
+ should contain_exec('vemcmd reread config') \
+ .that_subscribes_to('File[/etc/n1kv/n1kv.conf]')
+ end
+
+ context 'verify n1kv.conf default' do
+ let :params do
+ {
+ :n1kv_vsm_ip => '9.0.0.1',
+ :n1kv_vsm_domain_id => 900,
+ :host_mgmt_intf => 'eth9',
+ :portdb => 'ovs',
+ :fastpath_flood => 'disable'
+ }
+ end
+ it do
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^l3control-ipaddr 9.0.0.1/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^switch-domain 900/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^host-mgmt-intf eth9/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^portdb ovs/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .without_content(/^phys/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .without_content(/^virt/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^node-type compute/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^fastpath-flood disable/)
+ end
+ end
+
+ context 'verify node_type' do
+ let :params do
+ {
+ :node_type => 'network',
+ }
+ end
+ it do
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^node-type network/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .without_content(/^node-type compute/)
+ end
+ end
+
+ context 'verify portdb' do
+ let :params do
+ {
+ :portdb => 'vem',
+ }
+ end
+ it do
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^portdb vem/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .without_content(/^portdb ovs/)
+ end
+ end
+
+ context 'verify fastpath_flood' do
+ let :params do
+ {
+ :fastpath_flood => 'enable',
+ }
+ end
+ it do
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^fastpath-flood enable/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .without_content(/^fastpath-flood disable/)
+ end
+ end
+
+ context 'verify n1kv.conf with uplinks' do
+ let :params do
+ {
+ :uplink_profile => { 'eth1' => 'prof1',
+ 'eth2' => 'prof2'
+ }
+ }
+ end
+ it do
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^phys eth1 profile prof1/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^phys eth2 profile prof2/)
+ end
+
+ end
+
+ context 'verify n1kv.conf with vtep info' do
+ let :params do
+ {
+ :vtep_config => { 'vtep1' => { 'profile' => 'profint',
+ 'ipmode' => 'dhcp'
+ },
+ 'vtep2' => { 'profile' => 'profint',
+ 'ipmode' => 'static',
+ 'ipaddress' => '192.168.1.1',
+ 'netmask' => '255.255.255.0'
+ }
+ }
+ }
+ end
+ it do
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^virt vtep1 profile profint mode dhcp/)
+ should contain_file('/etc/n1kv/n1kv.conf') \
+ .with_content(/^virt vtep2 profile profint mode static/)
+ end
+
+ end
+
+ context 'with manage_service as false' do
+ let :params do
+ {
+ :manage_service => false
+ }
+ end
+ it 'should not start/stop service' do
+ should contain_service('nexus1000v').without_ensure
+ end
+ end
+
+ context 'with manage_service true and enable_service false' do
+ let :params do
+ {
+ :manage_service => true,
+ :enable => false
+ }
+ end
+ it 'should stop service' do
+ should contain_service('nexus1000v').with_ensure('stopped')
+ end
+ end
+
+ context 'verify sysctl setting with vteps_in_same_subnet true' do
+ let :params do
+ {
+ :vteps_in_same_subnet => true
+ }
+ end
+ it do
+ should contain_sysctl__value('net.ipv4.conf.default.rp_filter').with_value('2')
+ should contain_sysctl__value('net.ipv4.conf.all.rp_filter').with_value('2')
+ should contain_sysctl__value('net.ipv4.conf.default.arp_ignore').with_value('1')
+ should contain_sysctl__value('net.ipv4.conf.all.arp_ignore').with_value('1')
+ should contain_sysctl__value('net.ipv4.conf.all.arp_announce').with_value('2')
+ should contain_sysctl__value('net.ipv4.conf.default.arp_announce').with_value('2')
+ end
+ end
+
+end