78d533dc40acbe4649c0ed4d584fcb6b60ad5134
[mirror/dsa-puppet.git] / 3rdparty / modules / neutron / spec / classes / neutron_agents_ml2_linuxbridge_spec.rb
1 require 'spec_helper'
2
3 describe 'neutron::agents::ml2::linuxbridge' do
4
5   let :pre_condition do
6     "class { 'neutron': rabbit_password => 'passw0rd' }"
7   end
8
9   let :default_params do
10     { :package_ensure   => 'present',
11       :enabled          => true,
12       :tunnel_types     => [],
13       :local_ip         => false,
14       :vxlan_group      => '224.0.0.1',
15       :vxlan_ttl        => false,
16       :vxlan_tos        => false,
17       :polling_interval => 2,
18       :l2_population    => false,
19       :physical_interface_mappings => [],
20       :firewall_driver  => 'neutron.agent.linux.iptables_firewall.IptablesFirewallDriver' }
21   end
22
23   let :params do
24     {}
25   end
26
27   shared_examples_for 'neutron plugin linuxbridge agent with ml2 plugin' do
28
29     context 'with default parameters' do
30       it { should contain_class('neutron::params') }
31
32       it 'configures ml2_conf.ini' do
33         should contain_neutron_plugin_linuxbridge('agent/polling_interval').with_value(default_params[:polling_interval])
34         should contain_neutron_plugin_linuxbridge('linux_bridge/physical_interface_mappings').with_value(default_params[:physical_interface_mappings].join(','))
35         should contain_neutron_plugin_linuxbridge('securitygroup/firewall_driver').with_value(default_params[:firewall_driver])
36       end
37
38       it 'installs neutron linuxbridge agent package' do
39         if platform_params.has_key?(:linuxbridge_agent_package)
40           linuxbridge_agent_package = platform_params[:linuxbridge_agent_package]
41         else
42           linuxbridge_agent_package = platform_params[:linuxbridge_server_package]
43         end
44
45         should contain_package('neutron-plugin-linuxbridge-agent').with(
46           :name   => linuxbridge_agent_package,
47           :ensure => default_params[:package_ensure]
48         )
49
50         should contain_package('neutron-plugin-linuxbridge-agent').with_before(/Neutron_plugin_linuxbridge\[.+\]/)
51       end
52
53       it 'configures neutron linuxbridge agent service' do
54         should contain_service('neutron-plugin-linuxbridge-agent').with(
55           :name    => platform_params[:linuxbridge_agent_service],
56           :enable  => true,
57           :ensure  => 'running',
58           :require => 'Class[Neutron]'
59         )
60       end
61
62       it 'does not configre VXLAN tunneling' do
63         should contain_neutron_plugin_linuxbridge('vxlan/enable_vxlan').with_value(false)
64         should contain_neutron_plugin_linuxbridge('vxlan/local_ip').with_ensure('absent')
65         should contain_neutron_plugin_linuxbridge('vxlan/vxlan_group').with_ensure('absent')
66         should contain_neutron_plugin_linuxbridge('vxlan/l2_population').with_ensure('absent')
67       end
68     end
69
70     context 'with VXLAN tunneling enabled' do
71       before do
72         params.merge!({
73           :tunnel_types  => ['vxlan'],
74           :local_ip      => '192.168.0.10'
75         })
76       end
77
78       context 'when providing all parameters' do
79         it 'configures ml2_conf.ini' do
80           should contain_neutron_plugin_linuxbridge('vxlan/enable_vxlan').with_value(true)
81           should contain_neutron_plugin_linuxbridge('vxlan/local_ip').with_value(params[:local_ip])
82           should contain_neutron_plugin_linuxbridge('vxlan/vxlan_group').with_value(default_params[:vxlan_group])
83           should contain_neutron_plugin_linuxbridge('vxlan/vxlan_ttl').with_ensure('absent')
84           should contain_neutron_plugin_linuxbridge('vxlan/vxlan_tos').with_ensure('absent')
85           should contain_neutron_plugin_linuxbridge('vxlan/l2_population').with_value(default_params[:l2_population])
86         end
87       end
88
89       context 'when not providing or overriding some parameters' do
90         before do
91           params.merge!({
92             :vxlan_group   => '224.0.0.2',
93             :vxlan_ttl     => 10,
94             :vxlan_tos     => 2,
95             :l2_population => true,
96           })
97         end
98
99         it 'configures ml2_conf.ini' do
100           should contain_neutron_plugin_linuxbridge('vxlan/enable_vxlan').with_value(true)
101           should contain_neutron_plugin_linuxbridge('vxlan/local_ip').with_value(params[:local_ip])
102           should contain_neutron_plugin_linuxbridge('vxlan/vxlan_group').with_value(params[:vxlan_group])
103           should contain_neutron_plugin_linuxbridge('vxlan/vxlan_ttl').with_value(params[:vxlan_ttl])
104           should contain_neutron_plugin_linuxbridge('vxlan/vxlan_tos').with_value(params[:vxlan_tos])
105           should contain_neutron_plugin_linuxbridge('vxlan/l2_population').with_value(params[:l2_population])
106         end
107       end
108     end
109
110     context 'when providing the physical_interface_mappings parameter' do
111       before do
112         params.merge!(:physical_interface_mappings => ['physnet0:eth0', 'physnet1:eth1'])
113       end
114
115       it 'configures physical interface mappings' do
116         should contain_neutron_plugin_linuxbridge('linux_bridge/physical_interface_mappings').with_value(
117           params[:physical_interface_mappings].join(',')
118         )
119       end
120     end
121
122     context 'with firewall_driver parameter set to false' do
123       before :each do
124         params.merge!(:firewall_driver => false)
125       end
126       it 'removes firewall driver configuration' do
127         should contain_neutron_plugin_linuxbridge('securitygroup/firewall_driver').with_ensure('absent')
128       end
129     end
130   end
131
132   context 'on Debian platforms' do
133     let :facts do
134       { :osfamily => 'Debian' }
135     end
136
137     let :platform_params do
138       { :linuxbridge_agent_package => 'neutron-plugin-linuxbridge-agent',
139         :linuxbridge_agent_service => 'neutron-plugin-linuxbridge-agent' }
140     end
141
142     it_configures 'neutron plugin linuxbridge agent with ml2 plugin'
143   end
144
145   context 'on RedHat platforms' do
146     let :facts do
147       { :osfamily => 'RedHat' }
148     end
149
150     let :platform_params do
151       { :linuxbridge_server_package => 'openstack-neutron-linuxbridge',
152         :linuxbridge_agent_service  => 'neutron-linuxbridge-agent' }
153     end
154
155     it_configures 'neutron plugin linuxbridge agent with ml2 plugin'
156   end
157 end