46
42
yield mock_open, mock_file
49
class _TestQuantumContext(CharmTestCase):
45
class TestNetworkServiceContext(CharmTestCase):
52
super(_TestQuantumContext, self).setUp(quantum_contexts, TO_PATCH)
48
super(TestNetworkServiceContext, self).setUp(quantum_contexts,
53
50
self.config.side_effect = self.test_config.get
55
def test_not_related(self):
56
self.relation_ids.return_value = []
57
self.assertEquals(self.context(), {})
59
def test_no_units(self):
60
self.relation_ids.return_value = []
61
self.relation_ids.return_value = ['foo']
62
self.related_units.return_value = []
63
self.assertEquals(self.context(), {})
65
def test_no_data(self):
66
self.relation_ids.return_value = ['foo']
67
self.related_units.return_value = ['bar']
68
self.relation_get.side_effect = self.test_relation.get
69
self.context_complete.return_value = False
70
self.assertEquals(self.context(), {})
72
def test_data_multi_unit(self):
73
self.relation_ids.return_value = ['foo']
74
self.related_units.return_value = ['bar', 'baz']
75
self.context_complete.return_value = True
76
self.relation_get.side_effect = self.test_relation.get
77
self.assertEquals(self.context(), self.data_result)
79
def test_data_single_unit(self):
80
self.relation_ids.return_value = ['foo']
81
self.related_units.return_value = ['bar']
82
self.context_complete.return_value = True
83
self.relation_get.side_effect = self.test_relation.get
84
self.assertEquals(self.context(), self.data_result)
87
class TestNetworkServiceContext(_TestQuantumContext):
90
super(TestNetworkServiceContext, self).setUp()
91
51
self.context = quantum_contexts.NetworkServiceContext()
92
52
self.test_relation.set(
93
53
{'keystone_host': '10.5.0.1',
116
76
'auth_protocol': 'http',
79
def test_not_related(self):
80
self.relation_ids.return_value = []
81
self.assertEquals(self.context(), {})
83
def test_no_units(self):
84
self.relation_ids.return_value = []
85
self.relation_ids.return_value = ['foo']
86
self.related_units.return_value = []
87
self.assertEquals(self.context(), {})
89
def test_no_data(self):
90
self.relation_ids.return_value = ['foo']
91
self.related_units.return_value = ['bar']
92
self.relation_get.side_effect = self.test_relation.get
93
self.context_complete.return_value = False
94
self.assertEquals(self.context(), {})
96
def test_data_multi_unit(self):
97
self.relation_ids.return_value = ['foo']
98
self.related_units.return_value = ['bar', 'baz']
99
self.context_complete.return_value = True
100
self.relation_get.side_effect = self.test_relation.get
101
self.assertEquals(self.context(), self.data_result)
103
def test_data_single_unit(self):
104
self.relation_ids.return_value = ['foo']
105
self.related_units.return_value = ['bar']
106
self.context_complete.return_value = True
107
self.relation_get.side_effect = self.test_relation.get
108
self.assertEquals(self.context(), self.data_result)
120
111
class TestNeutronPortContext(CharmTestCase):
151
140
def _fake_get_ipv4(self, arg, fatal=False):
152
141
return self.machine_nics[arg]
154
def test_ext_port_mac(self):
143
@patch('charmhelpers.contrib.openstack.context.config')
144
def test_no_ext_port(self, mock_config):
145
self.config.side_effect = config = self.fake_config({})
146
mock_config.side_effect = config
147
self.assertEquals(quantum_contexts.ExternalPortContext()(), {})
149
@patch('charmhelpers.contrib.openstack.context.config')
150
def test_ext_port_eth(self, mock_config):
151
config = self.fake_config({'ext-port': 'eth1010'})
152
self.config.side_effect = config
153
mock_config.side_effect = config
154
self.assertEquals(quantum_contexts.ExternalPortContext()(),
155
{'ext_port': 'eth1010'})
157
@patch('charmhelpers.contrib.openstack.context.get_nic_hwaddr')
158
@patch('charmhelpers.contrib.openstack.context.list_nics')
159
@patch('charmhelpers.contrib.openstack.context.get_ipv6_addr')
160
@patch('charmhelpers.contrib.openstack.context.get_ipv4_addr')
161
@patch('charmhelpers.contrib.openstack.context.config')
162
def test_ext_port_mac(self, mock_config, mock_get_ipv4_addr,
163
mock_get_ipv6_addr, mock_list_nics,
164
mock_get_nic_hwaddr):
155
165
config_macs = self.absent_macs + " " + self.machine_macs['eth2']
156
self.get_ipv4_addr.side_effect = self._fake_get_ipv4
157
self.get_ipv6_addr.return_value = []
158
self.config.return_value = config_macs
159
self.list_nics.return_value = self.machine_macs.keys()
160
self.get_nic_hwaddr.side_effect = self._fake_get_hwaddr
161
self.assertEquals(quantum_contexts.ExternalPortContext()(),
162
{'ext_port': 'eth2'})
163
self.config.return_value = self.absent_macs
164
self.assertIsNone(quantum_contexts.ExternalPortContext()())
166
def test_ext_port_mac_one_used_nic(self):
167
config_macs = self.machine_macs['eth1'] + " " + \
168
self.machine_macs['eth2']
169
self.get_ipv4_addr.side_effect = self._fake_get_ipv4
170
self.get_ipv6_addr.return_value = []
171
self.config.return_value = config_macs
172
self.list_nics.return_value = self.machine_macs.keys()
173
self.get_nic_hwaddr.side_effect = self._fake_get_hwaddr
174
self.assertEquals(quantum_contexts.ExternalPortContext()(),
175
{'ext_port': 'eth2'})
177
def test_data_port_eth(self):
178
self.config.return_value = 'eth1010'
166
config = self.fake_config({'ext-port': config_macs})
167
self.config.side_effect = config
168
mock_config.side_effect = config
170
mock_get_ipv4_addr.side_effect = self._fake_get_ipv4
171
mock_get_ipv6_addr.return_value = []
172
mock_list_nics.return_value = self.machine_macs.keys()
173
mock_get_nic_hwaddr.side_effect = self._fake_get_hwaddr
175
self.assertEquals(quantum_contexts.ExternalPortContext()(),
176
{'ext_port': 'eth2'})
178
config = self.fake_config({'ext-port': self.absent_macs})
179
self.config.side_effect = config
180
mock_config.side_effect = config
182
self.assertEquals(quantum_contexts.ExternalPortContext()(), {})
184
@patch.object(quantum_contexts, '_neutron_api_settings')
185
@patch('charmhelpers.contrib.openstack.context.get_nic_hwaddr')
186
@patch('charmhelpers.contrib.openstack.context.list_nics')
187
@patch('charmhelpers.contrib.openstack.context.get_ipv6_addr')
188
@patch('charmhelpers.contrib.openstack.context.get_ipv4_addr')
189
@patch('charmhelpers.contrib.openstack.context.config')
190
def test_ext_port_mac_one_used_nic(self, mock_config,
192
mock_get_ipv6_addr, mock_list_nics,
194
mock_neutron_api_settings):
196
mock_neutron_api_settings.return_value = {'network_device_mtu': 1234}
197
config_macs = "%s %s" % (self.machine_macs['eth1'],
198
self.machine_macs['eth2'])
200
mock_get_ipv4_addr.side_effect = self._fake_get_ipv4
201
mock_get_ipv6_addr.return_value = []
202
mock_list_nics.return_value = self.machine_macs.keys()
203
mock_get_nic_hwaddr.side_effect = self._fake_get_hwaddr
205
config = self.fake_config({'ext-port': config_macs})
206
self.config.side_effect = config
207
mock_config.side_effect = config
208
self.assertEquals(quantum_contexts.ExternalPortContext()(),
209
{'ext_port': 'eth2', 'ext_port_mtu': 1234})
211
@patch('charmhelpers.contrib.openstack.context.NeutronPortContext.'
213
def test_data_port_eth(self, mock_resolve):
214
self.config.side_effect = self.fake_config({'data-port':
216
mock_resolve.side_effect = lambda ports: ports
179
217
self.assertEquals(quantum_contexts.DataPortContext()(),
180
{'data_port': 'eth1010'})
218
{'phybr1': 'eth1010'})
183
221
class TestL3AgentContext(CharmTestCase):
228
266
self.test_config.set('debug', False)
229
267
self.test_config.set('verbose', True)
230
268
self.test_config.set('instance-mtu', 1420)
269
self.test_config.set('vlan-ranges',
270
'physnet1:1000:2000 physnet2:2001:3000')
271
# Provided by neutron-api relation
272
self.relation_ids.return_value = ['neutron-plugin-api:0']
273
self.related_units.return_value = ['neutron-api/0']
274
rdata = {'network-device-mtu': 9000}
275
self.relation_get.side_effect = lambda *args, **kwargs: rdata
231
276
self.get_os_codename_install_source.return_value = 'folsom'
232
277
_host_ip.return_value = '10.5.0.1'
233
278
_secret.return_value = 'testsecret'
234
self.assertEquals(quantum_contexts.QuantumGatewayContext()(), {
279
ctxt = quantum_contexts.QuantumGatewayContext()()
280
self.relation_ids.assert_called_with('neutron-plugin-api')
281
self.assertEquals(ctxt, {
235
282
'shared_secret': 'testsecret',
236
283
'local_ip': '10.5.0.1',
237
284
'instance_mtu': 1420,