blob: eddbb1d1b6423bfb08a4ea8c0c195a91df03412c [file] [log] [blame]
Matthew Treinishcb058062014-03-13 18:27:07 -04001# Copyright 2014 IBM Corp.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15import keystoneclient.v2_0.client as keystoneclient
Matthew Treinish5c660ab2014-05-18 21:14:36 -040016import mock
Matthew Treinishcb058062014-03-13 18:27:07 -040017import neutronclient.v2_0.client as neutronclient
18from oslo.config import cfg
19
Andrea Frittoli422fbdf2014-03-20 10:05:18 +000020from tempest import clients
Andrea Frittoli2095d242014-03-20 08:36:23 +000021from tempest.common import http
Matthew Treinishcb058062014-03-13 18:27:07 -040022from tempest.common import isolated_creds
23from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040024from tempest import exceptions
Matthew Treinishcb058062014-03-13 18:27:07 -040025from tempest.openstack.common.fixture import mockpatch
26from tempest.services.identity.json import identity_client as json_iden_client
27from tempest.services.identity.xml import identity_client as xml_iden_client
28from tempest.services.network.json import network_client as json_network_client
29from tempest.services.network.xml import network_client as xml_network_client
30from tempest.tests import base
31from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000032from tempest.tests import fake_http
33from tempest.tests import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040034
35
36class TestTenantIsolation(base.TestCase):
37
38 def setUp(self):
39 super(TestTenantIsolation, self).setUp()
40 self.useFixture(fake_config.ConfigFixture())
41 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000042 self.fake_http = fake_http.fake_httplib2(return_type=200)
43 self.stubs.Set(http.ClosingHttp, 'request',
44 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040045 cfg.CONF.set_default('operator_role', 'FakeRole',
46 group='object-storage')
Matthew Treinishcb058062014-03-13 18:27:07 -040047
48 def test_tempest_client(self):
49 iso_creds = isolated_creds.IsolatedCreds('test class')
50 self.assertTrue(isinstance(iso_creds.identity_admin_client,
51 json_iden_client.IdentityClientJSON))
52 self.assertTrue(isinstance(iso_creds.network_admin_client,
53 json_network_client.NetworkClientJSON))
54
55 def test_official_client(self):
56 self.useFixture(mockpatch.PatchObject(keystoneclient.Client,
57 'authenticate'))
Andrea Frittoli422fbdf2014-03-20 10:05:18 +000058 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
59 '_get_image_client'))
60 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
61 '_get_object_storage_client'))
62 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
63 '_get_orchestration_client'))
Artur Svechnikovc3bf9252014-05-05 16:37:37 +040064 self.useFixture(mockpatch.PatchObject(clients.OfficialClientManager,
65 '_get_ceilometer_client'))
Matthew Treinishcb058062014-03-13 18:27:07 -040066 iso_creds = isolated_creds.IsolatedCreds('test class',
67 tempest_client=False)
68 self.assertTrue(isinstance(iso_creds.identity_admin_client,
69 keystoneclient.Client))
70 self.assertTrue(isinstance(iso_creds.network_admin_client,
71 neutronclient.Client))
72
73 def test_tempest_client_xml(self):
74 iso_creds = isolated_creds.IsolatedCreds('test class', interface='xml')
75 self.assertEqual(iso_creds.interface, 'xml')
76 self.assertTrue(isinstance(iso_creds.identity_admin_client,
77 xml_iden_client.IdentityClientXML))
78 self.assertTrue(isinstance(iso_creds.network_admin_client,
79 xml_network_client.NetworkClientXML))
80
81 def _mock_user_create(self, id, name):
82 user_fix = self.useFixture(mockpatch.PatchObject(
83 json_iden_client.IdentityClientJSON,
84 'create_user',
85 return_value=({'status': 200},
86 {'id': id, 'name': name})))
87 return user_fix
88
89 def _mock_tenant_create(self, id, name):
90 tenant_fix = self.useFixture(mockpatch.PatchObject(
91 json_iden_client.IdentityClientJSON,
92 'create_tenant',
93 return_value=({'status': 200},
94 {'id': id, 'name': name})))
95 return tenant_fix
96
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040097 def _mock_list_roles(self, id, name):
98 roles_fix = self.useFixture(mockpatch.PatchObject(
99 json_iden_client.IdentityClientJSON,
100 'list_roles',
101 return_value=({'status': 200},
102 [{'id': id, 'name': name},
103 {'id': '1', 'name': 'FakeRole'}])))
104 return roles_fix
105
106 def _mock_assign_user_role(self):
107 tenant_fix = self.useFixture(mockpatch.PatchObject(
108 json_iden_client.IdentityClientJSON,
109 'assign_user_role',
110 return_value=({'status': 200},
111 {})))
112 return tenant_fix
113
114 def _mock_list_role(self):
115 roles_fix = self.useFixture(mockpatch.PatchObject(
116 json_iden_client.IdentityClientJSON,
117 'list_roles',
118 return_value=({'status': 200},
119 [{'id': '1', 'name': 'FakeRole'}])))
120 return roles_fix
121
Matthew Treinishe6723262014-03-14 13:16:52 -0400122 def _mock_network_create(self, iso_creds, id, name):
123 net_fix = self.useFixture(mockpatch.PatchObject(
124 iso_creds.network_admin_client,
125 'create_network',
126 return_value=({'status': 200},
127 {'network': {'id': id, 'name': name}})))
128 return net_fix
129
130 def _mock_subnet_create(self, iso_creds, id, name):
131 subnet_fix = self.useFixture(mockpatch.PatchObject(
132 iso_creds.network_admin_client,
133 'create_subnet',
134 return_value=({'status': 200},
135 {'subnet': {'id': id, 'name': name}})))
136 return subnet_fix
137
138 def _mock_router_create(self, id, name):
139 router_fix = self.useFixture(mockpatch.PatchObject(
140 json_network_client.NetworkClientJSON,
141 'create_router',
142 return_value=({'status': 200},
143 {'router': {'id': id, 'name': name}})))
144 return router_fix
145
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400146 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400147 def test_primary_creds(self, MockRestClient):
148 cfg.CONF.set_default('neutron', False, 'service_available')
149 iso_creds = isolated_creds.IsolatedCreds('test class',
150 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400151 self._mock_assign_user_role()
152 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400153 self._mock_tenant_create('1234', 'fake_prim_tenant')
154 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000155 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000156 self.assertEqual(primary_creds.username, 'fake_prim_user')
157 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000158 # Verify IDs
159 self.assertEqual(primary_creds.tenant_id, '1234')
160 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400161
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400162 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400163 def test_admin_creds(self, MockRestClient):
164 cfg.CONF.set_default('neutron', False, 'service_available')
165 iso_creds = isolated_creds.IsolatedCreds('test class',
166 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400167 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400168 self._mock_user_create('1234', 'fake_admin_user')
169 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400170
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400171 user_mock = mock.patch.object(json_iden_client.IdentityClientJSON,
172 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400173 user_mock.start()
174 self.addCleanup(user_mock.stop)
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400175 with mock.patch.object(json_iden_client.IdentityClientJSON,
176 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000177 admin_creds = iso_creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400178 user_mock.assert_has_calls([
179 mock.call('1234', '1234', '1'),
180 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000181 self.assertEqual(admin_creds.username, 'fake_admin_user')
182 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000183 # Verify IDs
184 self.assertEqual(admin_creds.tenant_id, '1234')
185 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400186
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400187 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400188 def test_all_cred_cleanup(self, MockRestClient):
189 cfg.CONF.set_default('neutron', False, 'service_available')
190 iso_creds = isolated_creds.IsolatedCreds('test class',
191 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400192 self._mock_assign_user_role()
193 roles_fix = self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400194 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
195 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000196 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400197 tenant_fix.cleanUp()
198 user_fix.cleanUp()
199 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
200 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000201 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400202 tenant_fix.cleanUp()
203 user_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400204 roles_fix.cleanUp()
Matthew Treinishcb058062014-03-13 18:27:07 -0400205 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
206 user_fix = self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400207 self._mock_list_roles('123456', 'admin')
208 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400209 user_mock = self.patch(
210 'tempest.services.identity.json.identity_client.'
211 'IdentityClientJSON.delete_user')
212 tenant_mock = self.patch(
213 'tempest.services.identity.json.identity_client.'
214 'IdentityClientJSON.delete_tenant')
215 iso_creds.clear_isolated_creds()
216 # Verify user delete calls
217 calls = user_mock.mock_calls
218 self.assertEqual(len(calls), 3)
219 args = map(lambda x: x[1][0], calls)
220 self.assertIn('1234', args)
221 self.assertIn('12345', args)
222 self.assertIn('123456', args)
223 # Verify tenant delete calls
224 calls = tenant_mock.mock_calls
225 self.assertEqual(len(calls), 3)
226 args = map(lambda x: x[1][0], calls)
227 self.assertIn('1234', args)
228 self.assertIn('12345', args)
229 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400230
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400231 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400232 def test_alt_creds(self, MockRestClient):
233 cfg.CONF.set_default('neutron', False, 'service_available')
234 iso_creds = isolated_creds.IsolatedCreds('test class',
235 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400236 self._mock_assign_user_role()
237 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400238 self._mock_user_create('1234', 'fake_alt_user')
239 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000240 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000241 self.assertEqual(alt_creds.username, 'fake_alt_user')
242 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000243 # Verify IDs
244 self.assertEqual(alt_creds.tenant_id, '1234')
245 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400246
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400247 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400248 def test_network_creation(self, MockRestClient):
249 iso_creds = isolated_creds.IsolatedCreds('test class',
250 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400251 self._mock_assign_user_role()
252 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400253 self._mock_user_create('1234', 'fake_prim_user')
254 self._mock_tenant_create('1234', 'fake_prim_tenant')
255 self._mock_network_create(iso_creds, '1234', 'fake_net')
256 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
257 self._mock_router_create('1234', 'fake_router')
258 router_interface_mock = self.patch(
259 'tempest.services.network.json.network_client.NetworkClientJSON.'
260 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000261 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400262 router_interface_mock.called_once_with('1234', '1234')
263 network = iso_creds.get_primary_network()
264 subnet = iso_creds.get_primary_subnet()
265 router = iso_creds.get_primary_router()
266 self.assertEqual(network['id'], '1234')
267 self.assertEqual(network['name'], 'fake_net')
268 self.assertEqual(subnet['id'], '1234')
269 self.assertEqual(subnet['name'], 'fake_subnet')
270 self.assertEqual(router['id'], '1234')
271 self.assertEqual(router['name'], 'fake_router')
272
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400273 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400274 def test_network_cleanup(self, MockRestClient):
275 iso_creds = isolated_creds.IsolatedCreds('test class',
276 password='fake_password')
277 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400278 self._mock_assign_user_role()
279 roles_fix = self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400280 user_fix = self._mock_user_create('1234', 'fake_prim_user')
281 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
282 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
283 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
284 router_fix = self._mock_router_create('1234', 'fake_router')
285 router_interface_mock = self.patch(
286 'tempest.services.network.json.network_client.NetworkClientJSON.'
287 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000288 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400289 router_interface_mock.called_once_with('1234', '1234')
290 router_interface_mock.reset_mock()
291 tenant_fix.cleanUp()
292 user_fix.cleanUp()
293 net_fix.cleanUp()
294 subnet_fix.cleanUp()
295 router_fix.cleanUp()
296 # Create alternate tenant and network
297 user_fix = self._mock_user_create('12345', 'fake_alt_user')
298 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
299 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
300 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
301 'fake_alt_subnet')
302 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000303 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400304 router_interface_mock.called_once_with('12345', '12345')
305 router_interface_mock.reset_mock()
306 tenant_fix.cleanUp()
307 user_fix.cleanUp()
308 net_fix.cleanUp()
309 subnet_fix.cleanUp()
310 router_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400311 roles_fix.cleanUp()
Matthew Treinishe6723262014-03-14 13:16:52 -0400312 # Create admin tenant and networks
313 user_fix = self._mock_user_create('123456', 'fake_admin_user')
314 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
315 net_fix = self._mock_network_create(iso_creds, '123456',
316 'fake_admin_net')
317 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
318 'fake_admin_subnet')
319 router_fix = self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400320 self._mock_list_roles('123456', 'admin')
321 iso_creds.get_admin_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400322 self.patch('tempest.services.identity.json.identity_client.'
323 'IdentityClientJSON.delete_user')
324 self.patch('tempest.services.identity.json.identity_client.'
325 'IdentityClientJSON.delete_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400326 net = mock.patch.object(iso_creds.network_admin_client,
327 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400328 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400329 subnet = mock.patch.object(iso_creds.network_admin_client,
330 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400331 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400332 router = mock.patch.object(iso_creds.network_admin_client,
333 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400334 router_mock = router.start()
335 remove_router_interface_mock = self.patch(
336 'tempest.services.network.json.network_client.NetworkClientJSON.'
337 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400338 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400339 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400340 'list_ports',
341 return_value=return_values)
342
Matthew Treinishe6723262014-03-14 13:16:52 -0400343 port_list_mock.start()
344 iso_creds.clear_isolated_creds()
345 # Verify remove router interface calls
346 calls = remove_router_interface_mock.mock_calls
347 self.assertEqual(len(calls), 3)
348 args = map(lambda x: x[1], calls)
349 self.assertIn(('1234', '1234'), args)
350 self.assertIn(('12345', '12345'), args)
351 self.assertIn(('123456', '123456'), args)
352 # Verify network delete calls
353 calls = net_mock.mock_calls
354 self.assertEqual(len(calls), 3)
355 args = map(lambda x: x[1][0], calls)
356 self.assertIn('1234', args)
357 self.assertIn('12345', args)
358 self.assertIn('123456', args)
359 # Verify subnet delete calls
360 calls = subnet_mock.mock_calls
361 self.assertEqual(len(calls), 3)
362 args = map(lambda x: x[1][0], calls)
363 self.assertIn('1234', args)
364 self.assertIn('12345', args)
365 self.assertIn('123456', args)
366 # Verify router delete calls
367 calls = router_mock.mock_calls
368 self.assertEqual(len(calls), 3)
369 args = map(lambda x: x[1][0], calls)
370 self.assertIn('1234', args)
371 self.assertIn('12345', args)
372 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400373
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400374 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400375 def test_network_alt_creation(self, MockRestClient):
376 iso_creds = isolated_creds.IsolatedCreds('test class',
377 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400378 self._mock_assign_user_role()
379 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400380 self._mock_user_create('1234', 'fake_alt_user')
381 self._mock_tenant_create('1234', 'fake_alt_tenant')
382 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
383 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
384 self._mock_router_create('1234', 'fake_alt_router')
385 router_interface_mock = self.patch(
386 'tempest.services.network.json.network_client.NetworkClientJSON.'
387 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000388 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400389 router_interface_mock.called_once_with('1234', '1234')
390 network = iso_creds.get_alt_network()
391 subnet = iso_creds.get_alt_subnet()
392 router = iso_creds.get_alt_router()
393 self.assertEqual(network['id'], '1234')
394 self.assertEqual(network['name'], 'fake_alt_net')
395 self.assertEqual(subnet['id'], '1234')
396 self.assertEqual(subnet['name'], 'fake_alt_subnet')
397 self.assertEqual(router['id'], '1234')
398 self.assertEqual(router['name'], 'fake_alt_router')
399
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400400 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400401 def test_network_admin_creation(self, MockRestClient):
402 iso_creds = isolated_creds.IsolatedCreds('test class',
403 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400404 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400405 self._mock_user_create('1234', 'fake_admin_user')
406 self._mock_tenant_create('1234', 'fake_admin_tenant')
407 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
408 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
409 self._mock_router_create('1234', 'fake_admin_router')
410 router_interface_mock = self.patch(
411 'tempest.services.network.json.network_client.NetworkClientJSON.'
412 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400413 self._mock_list_roles('123456', 'admin')
414 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400415 router_interface_mock.called_once_with('1234', '1234')
416 network = iso_creds.get_admin_network()
417 subnet = iso_creds.get_admin_subnet()
418 router = iso_creds.get_admin_router()
419 self.assertEqual(network['id'], '1234')
420 self.assertEqual(network['name'], 'fake_admin_net')
421 self.assertEqual(subnet['id'], '1234')
422 self.assertEqual(subnet['name'], 'fake_admin_subnet')
423 self.assertEqual(router['id'], '1234')
424 self.assertEqual(router['name'], 'fake_admin_router')
425
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400426 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400427 def test_no_network_resources(self, MockRestClient):
428 net_dict = {
429 'network': False,
430 'router': False,
431 'subnet': False,
432 'dhcp': False,
433 }
434 iso_creds = isolated_creds.IsolatedCreds('test class',
435 password='fake_password',
436 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400437 self._mock_assign_user_role()
438 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400439 self._mock_user_create('1234', 'fake_prim_user')
440 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400441 net = mock.patch.object(iso_creds.network_admin_client,
442 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400443 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400444 subnet = mock.patch.object(iso_creds.network_admin_client,
445 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400446 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400447 router = mock.patch.object(iso_creds.network_admin_client,
448 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400449 router_mock = router.start()
450
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000451 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400452 self.assertEqual(net_mock.mock_calls, [])
453 self.assertEqual(subnet_mock.mock_calls, [])
454 self.assertEqual(router_mock.mock_calls, [])
455 network = iso_creds.get_primary_network()
456 subnet = iso_creds.get_primary_subnet()
457 router = iso_creds.get_primary_router()
458 self.assertIsNone(network)
459 self.assertIsNone(subnet)
460 self.assertIsNone(router)
461
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400462 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400463 def test_router_without_network(self, MockRestClient):
464 net_dict = {
465 'network': False,
466 'router': True,
467 'subnet': False,
468 'dhcp': False,
469 }
470 iso_creds = isolated_creds.IsolatedCreds('test class',
471 password='fake_password',
472 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400473 self._mock_assign_user_role()
474 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400475 self._mock_user_create('1234', 'fake_prim_user')
476 self._mock_tenant_create('1234', 'fake_prim_tenant')
477 self.assertRaises(exceptions.InvalidConfiguration,
478 iso_creds.get_primary_creds)
479
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400480 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400481 def test_subnet_without_network(self, MockRestClient):
482 net_dict = {
483 'network': False,
484 'router': False,
485 'subnet': True,
486 'dhcp': False,
487 }
488 iso_creds = isolated_creds.IsolatedCreds('test class',
489 password='fake_password',
490 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400491 self._mock_assign_user_role()
492 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400493 self._mock_user_create('1234', 'fake_prim_user')
494 self._mock_tenant_create('1234', 'fake_prim_tenant')
495 self.assertRaises(exceptions.InvalidConfiguration,
496 iso_creds.get_primary_creds)
497
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400498 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400499 def test_dhcp_without_subnet(self, MockRestClient):
500 net_dict = {
501 'network': False,
502 'router': False,
503 'subnet': False,
504 'dhcp': True,
505 }
506 iso_creds = isolated_creds.IsolatedCreds('test class',
507 password='fake_password',
508 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400509 self._mock_assign_user_role()
510 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400511 self._mock_user_create('1234', 'fake_prim_user')
512 self._mock_tenant_create('1234', 'fake_prim_tenant')
513 self.assertRaises(exceptions.InvalidConfiguration,
514 iso_creds.get_primary_creds)