30
33
def tearDown(self):
31
34
super(OVSPluginContextTest, self).tearDown()
36
@patch('charmhelpers.contrib.openstack.context.config')
33
37
@patch('charmhelpers.contrib.openstack.context.NeutronPortContext.'
35
def test_data_port_name(self, mock_resolve_ports):
39
def test_data_port_name(self, mock_resolve_ports, config):
36
40
self.test_config.set('data-port', 'br-data:em1')
41
config.side_effect = self.test_config.get
37
42
mock_resolve_ports.side_effect = lambda ports: ports
38
self.assertEquals(context.DataPortContext()(),
44
charmhelpers.contrib.openstack.context.DataPortContext()(),
41
@patch.object(context, 'get_nic_hwaddr')
48
@patch('charmhelpers.contrib.openstack.context.config')
42
49
@patch('charmhelpers.contrib.openstack.context.get_nic_hwaddr')
43
50
@patch('charmhelpers.contrib.openstack.context.list_nics')
44
def test_data_port_mac(self, list_nics, get_nic_hwaddr, get_nic_hwaddr2):
51
def test_data_port_mac(self, list_nics, get_nic_hwaddr, config):
46
53
'em1': 'aa:aa:aa:aa:aa:aa',
47
54
'eth0': 'bb:bb:bb:bb:bb:bb',
49
get_nic_hwaddr2.side_effect = lambda nic: machine_machs[nic]
50
56
absent_mac = "cc:cc:cc:cc:cc:cc"
51
57
config_macs = ("br-d1:%s br-d2:%s" %
52
58
(absent_mac, machine_machs['em1']))
53
59
self.test_config.set('data-port', config_macs)
60
config.side_effect = self.test_config.get
54
61
list_nics.return_value = machine_machs.keys()
55
62
get_nic_hwaddr.side_effect = lambda nic: machine_machs[nic]
56
self.assertEquals(context.DataPortContext()(),
59
@patch('charmhelpers.contrib.openstack.context.NeutronPortContext.'
61
def test_ensure_bridge_data_port_present(self, mock_resolve_ports):
62
self.test_config.set('data-port', 'br-data:em1')
63
self.test_config.set('bridge-mappings', 'phybr1:br-data')
65
def add_port(bridge, port, promisc):
66
if bridge == 'br-data' and port == 'em1' and promisc is True:
67
self.bridge_added = True
69
self.bridge_added = False
71
mock_resolve_ports.side_effect = lambda ports: ports
72
self.add_bridge_port.side_effect = add_port
73
context.OVSPluginContext()._ensure_bridge()
74
self.assertEquals(self.bridge_added, True)
64
charmhelpers.contrib.openstack.context.DataPortContext()(),
68
@patch.object(charmhelpers.contrib.openstack.context, 'relation_get')
69
@patch.object(charmhelpers.contrib.openstack.context, 'relation_ids')
70
@patch.object(charmhelpers.contrib.openstack.context, 'related_units')
76
71
@patch.object(charmhelpers.contrib.openstack.context, 'config')
77
72
@patch.object(charmhelpers.contrib.openstack.context, 'unit_get')
78
73
@patch.object(charmhelpers.contrib.openstack.context, 'is_clustered')
95
90
_unit_get.return_value = '127.0.0.13'
96
91
_unit_priv_ip.return_value = '127.0.0.14'
97
92
_is_clus.return_value = False
98
self.related_units.return_value = ['unit1']
99
self.relation_ids.return_value = ['rid2']
100
self.test_relation.set({'neutron-security-groups': 'True',
101
'l2-population': 'True',
102
'network-device-mtu': 1500,
103
'overlay-network-type': 'gre',
93
_runits.return_value = ['unit1']
94
_rids.return_value = ['rid2']
96
'neutron-security-groups': 'True',
97
'l2-population': 'True',
98
'network-device-mtu': 1500,
99
'overlay-network-type': 'gre',
100
'enable-dvr': 'True',
102
_rget.side_effect = lambda *args, **kwargs: rdata
105
103
self.get_host_ip.return_value = '127.0.0.15'
106
self.service_running.return_value = False
107
104
napi_ctxt = context.OVSPluginContext()
109
106
'neutron_alchemy_flags': {},
110
107
'neutron_security_groups': True,
108
'distributed_routing': True,
112
110
'local_ip': '127.0.0.15',
113
111
'network_device_mtu': 1500,
155
156
_unit_priv_ip.return_value = '127.0.0.14'
156
157
_is_clus.return_value = False
157
158
self.test_config.set('disable-security-groups', True)
158
self.related_units.return_value = ['unit1']
159
self.relation_ids.return_value = ['rid2']
160
self.test_relation.set({'neutron-security-groups': 'True',
161
'l2-population': 'True',
162
'network-device-mtu': 1500,
163
'overlay-network-type': 'gre',
159
_runits.return_value = ['unit1']
160
_rids.return_value = ['rid2']
162
'neutron-security-groups': 'True',
163
'l2-population': 'True',
164
'network-device-mtu': 1500,
165
'overlay-network-type': 'gre',
167
_rget.side_effect = lambda *args, **kwargs: rdata
165
168
self.get_host_ip.return_value = '127.0.0.15'
166
self.service_running.return_value = False
167
169
napi_ctxt = context.OVSPluginContext()
171
'distributed_routing': False,
169
172
'neutron_alchemy_flags': {},
170
173
'neutron_security_groups': False,
186
189
'vlan_ranges': 'physnet1:1000:2000',
188
191
self.assertEquals(expect, napi_ctxt())
189
self.service_start.assertCalled()
194
class L3AgentContextTest(CharmTestCase):
197
super(L3AgentContextTest, self).setUp(context, TO_PATCH)
198
self.config.side_effect = self.test_config.get
201
super(L3AgentContextTest, self).tearDown()
203
@patch.object(charmhelpers.contrib.openstack.context, 'relation_get')
204
@patch.object(charmhelpers.contrib.openstack.context, 'relation_ids')
205
@patch.object(charmhelpers.contrib.openstack.context, 'related_units')
206
def test_dvr_enabled(self, _runits, _rids, _rget):
207
_runits.return_value = ['unit1']
208
_rids.return_value = ['rid2']
210
'neutron-security-groups': 'True',
211
'enable-dvr': 'True',
212
'l2-population': 'True',
213
'overlay-network-type': 'vxlan',
214
'network-device-mtu': 1500,
216
_rget.side_effect = lambda *args, **kwargs: rdata
217
self.assertEquals(context.L3AgentContext()(), {'agent_mode': 'dvr'})
219
@patch.object(charmhelpers.contrib.openstack.context, 'relation_get')
220
@patch.object(charmhelpers.contrib.openstack.context, 'relation_ids')
221
@patch.object(charmhelpers.contrib.openstack.context, 'related_units')
222
def test_dvr_disabled(self, _runits, _rids, _rget):
223
_runits.return_value = ['unit1']
224
_rids.return_value = ['rid2']
226
'neutron-security-groups': 'True',
227
'enable-dvr': 'False',
228
'l2-population': 'True',
229
'overlay-network-type': 'vxlan',
230
'network-device-mtu': 1500,
232
_rget.side_effect = lambda *args, **kwargs: rdata
233
self.assertEquals(context.L3AgentContext()(), {'agent_mode': 'legacy'})
236
class DVRSharedSecretContext(CharmTestCase):
239
super(DVRSharedSecretContext, self).setUp(context,
241
self.config.side_effect = self.test_config.get
245
def test_secret_created_stored(self, _uuid4, _path):
246
_path.exists.return_value = False
247
_uuid4.return_value = 'secret_thing'
248
with patch_open() as (_open, _file):
249
self.assertEquals(context.get_shared_secret(),
251
_open.assert_called_with(
252
context.SHARED_SECRET.format('quantum'), 'w')
253
_file.write.assert_called_with('secret_thing')
256
def test_secret_retrieved(self, _path):
257
_path.exists.return_value = True
258
with patch_open() as (_open, _file):
259
_file.read.return_value = 'secret_thing\n'
260
self.assertEquals(context.get_shared_secret(),
262
_open.assert_called_with(
263
context.SHARED_SECRET.format('quantum'), 'r')
265
@patch.object(context, 'NeutronAPIContext')
266
@patch.object(context, 'get_shared_secret')
267
def test_shared_secretcontext_dvr(self, _shared_secret,
269
_NeutronAPIContext.side_effect = fake_context({'enable_dvr': True})
270
_shared_secret.return_value = 'secret_thing'
271
self.resolve_address.return_value = '10.0.0.10'
272
self.assertEquals(context.DVRSharedSecretContext()(),
273
{'shared_secret': 'secret_thing',
274
'local_ip': '10.0.0.10'})
276
@patch.object(context, 'NeutronAPIContext')
277
@patch.object(context, 'get_shared_secret')
278
def test_shared_secretcontext_nodvr(self, _shared_secret,
280
_NeutronAPIContext.side_effect = fake_context({'enable_dvr': False})
281
_shared_secret.return_value = 'secret_thing'
282
self.resolve_address.return_value = '10.0.0.10'
283
self.assertEquals(context.DVRSharedSecretContext()(), {})