blob: f29ae5abc0d9bef17d25db9c189b9941d83c0f0f [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
Matthew Treinish5c660ab2014-05-18 21:14:36 -040015import mock
Matthew Treinishcb058062014-03-13 18:27:07 -040016from oslo.config import cfg
17
Andrea Frittoli2095d242014-03-20 08:36:23 +000018from tempest.common import http
Matthew Treinishcb058062014-03-13 18:27:07 -040019from tempest.common import isolated_creds
20from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040021from tempest import exceptions
Matthew Treinishcb058062014-03-13 18:27:07 -040022from tempest.openstack.common.fixture import mockpatch
23from tempest.services.identity.json import identity_client as json_iden_client
Matthew Treinishcb058062014-03-13 18:27:07 -040024from tempest.services.network.json import network_client as json_network_client
Matthew Treinishcb058062014-03-13 18:27:07 -040025from tempest.tests import base
26from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000027from tempest.tests import fake_http
28from tempest.tests import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040029
30
31class TestTenantIsolation(base.TestCase):
32
33 def setUp(self):
34 super(TestTenantIsolation, self).setUp()
35 self.useFixture(fake_config.ConfigFixture())
36 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000037 self.fake_http = fake_http.fake_httplib2(return_type=200)
38 self.stubs.Set(http.ClosingHttp, 'request',
39 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040040 cfg.CONF.set_default('operator_role', 'FakeRole',
41 group='object-storage')
Matthew Treinishcb058062014-03-13 18:27:07 -040042
43 def test_tempest_client(self):
44 iso_creds = isolated_creds.IsolatedCreds('test class')
45 self.assertTrue(isinstance(iso_creds.identity_admin_client,
46 json_iden_client.IdentityClientJSON))
47 self.assertTrue(isinstance(iso_creds.network_admin_client,
48 json_network_client.NetworkClientJSON))
49
Matthew Treinishcb058062014-03-13 18:27:07 -040050 def _mock_user_create(self, id, name):
51 user_fix = self.useFixture(mockpatch.PatchObject(
52 json_iden_client.IdentityClientJSON,
53 'create_user',
54 return_value=({'status': 200},
55 {'id': id, 'name': name})))
56 return user_fix
57
58 def _mock_tenant_create(self, id, name):
59 tenant_fix = self.useFixture(mockpatch.PatchObject(
60 json_iden_client.IdentityClientJSON,
61 'create_tenant',
62 return_value=({'status': 200},
63 {'id': id, 'name': name})))
64 return tenant_fix
65
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040066 def _mock_list_roles(self, id, name):
67 roles_fix = self.useFixture(mockpatch.PatchObject(
68 json_iden_client.IdentityClientJSON,
69 'list_roles',
70 return_value=({'status': 200},
71 [{'id': id, 'name': name},
72 {'id': '1', 'name': 'FakeRole'}])))
73 return roles_fix
74
75 def _mock_assign_user_role(self):
76 tenant_fix = self.useFixture(mockpatch.PatchObject(
77 json_iden_client.IdentityClientJSON,
78 'assign_user_role',
79 return_value=({'status': 200},
80 {})))
81 return tenant_fix
82
83 def _mock_list_role(self):
84 roles_fix = self.useFixture(mockpatch.PatchObject(
85 json_iden_client.IdentityClientJSON,
86 'list_roles',
87 return_value=({'status': 200},
88 [{'id': '1', 'name': 'FakeRole'}])))
89 return roles_fix
90
Matthew Treinishe6723262014-03-14 13:16:52 -040091 def _mock_network_create(self, iso_creds, id, name):
92 net_fix = self.useFixture(mockpatch.PatchObject(
93 iso_creds.network_admin_client,
94 'create_network',
David Kranz34e88122014-12-11 15:24:05 -050095 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -040096 return net_fix
97
98 def _mock_subnet_create(self, iso_creds, id, name):
99 subnet_fix = self.useFixture(mockpatch.PatchObject(
100 iso_creds.network_admin_client,
101 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500102 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400103 return subnet_fix
104
105 def _mock_router_create(self, id, name):
106 router_fix = self.useFixture(mockpatch.PatchObject(
107 json_network_client.NetworkClientJSON,
108 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500109 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400110 return router_fix
111
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400112 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400113 def test_primary_creds(self, MockRestClient):
114 cfg.CONF.set_default('neutron', False, 'service_available')
115 iso_creds = isolated_creds.IsolatedCreds('test class',
116 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400117 self._mock_assign_user_role()
118 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400119 self._mock_tenant_create('1234', 'fake_prim_tenant')
120 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000121 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000122 self.assertEqual(primary_creds.username, 'fake_prim_user')
123 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000124 # Verify IDs
125 self.assertEqual(primary_creds.tenant_id, '1234')
126 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400127
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400128 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400129 def test_admin_creds(self, MockRestClient):
130 cfg.CONF.set_default('neutron', False, 'service_available')
131 iso_creds = isolated_creds.IsolatedCreds('test class',
132 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400133 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400134 self._mock_user_create('1234', 'fake_admin_user')
135 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400136
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400137 user_mock = mock.patch.object(json_iden_client.IdentityClientJSON,
138 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400139 user_mock.start()
140 self.addCleanup(user_mock.stop)
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400141 with mock.patch.object(json_iden_client.IdentityClientJSON,
142 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000143 admin_creds = iso_creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400144 user_mock.assert_has_calls([
145 mock.call('1234', '1234', '1'),
146 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000147 self.assertEqual(admin_creds.username, 'fake_admin_user')
148 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000149 # Verify IDs
150 self.assertEqual(admin_creds.tenant_id, '1234')
151 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400152
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400153 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400154 def test_all_cred_cleanup(self, MockRestClient):
155 cfg.CONF.set_default('neutron', False, 'service_available')
156 iso_creds = isolated_creds.IsolatedCreds('test class',
157 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400158 self._mock_assign_user_role()
159 roles_fix = self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400160 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
161 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000162 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400163 tenant_fix.cleanUp()
164 user_fix.cleanUp()
165 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
166 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000167 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400168 tenant_fix.cleanUp()
169 user_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400170 roles_fix.cleanUp()
Matthew Treinishcb058062014-03-13 18:27:07 -0400171 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
172 user_fix = self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400173 self._mock_list_roles('123456', 'admin')
174 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400175 user_mock = self.patch(
176 'tempest.services.identity.json.identity_client.'
177 'IdentityClientJSON.delete_user')
178 tenant_mock = self.patch(
179 'tempest.services.identity.json.identity_client.'
180 'IdentityClientJSON.delete_tenant')
181 iso_creds.clear_isolated_creds()
182 # Verify user delete calls
183 calls = user_mock.mock_calls
184 self.assertEqual(len(calls), 3)
185 args = map(lambda x: x[1][0], calls)
186 self.assertIn('1234', args)
187 self.assertIn('12345', args)
188 self.assertIn('123456', args)
189 # Verify tenant delete calls
190 calls = tenant_mock.mock_calls
191 self.assertEqual(len(calls), 3)
192 args = map(lambda x: x[1][0], calls)
193 self.assertIn('1234', args)
194 self.assertIn('12345', args)
195 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400196
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400197 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400198 def test_alt_creds(self, MockRestClient):
199 cfg.CONF.set_default('neutron', False, 'service_available')
200 iso_creds = isolated_creds.IsolatedCreds('test class',
201 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400202 self._mock_assign_user_role()
203 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400204 self._mock_user_create('1234', 'fake_alt_user')
205 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000206 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000207 self.assertEqual(alt_creds.username, 'fake_alt_user')
208 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000209 # Verify IDs
210 self.assertEqual(alt_creds.tenant_id, '1234')
211 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400212
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400213 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400214 def test_network_creation(self, MockRestClient):
215 iso_creds = isolated_creds.IsolatedCreds('test class',
216 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400217 self._mock_assign_user_role()
218 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400219 self._mock_user_create('1234', 'fake_prim_user')
220 self._mock_tenant_create('1234', 'fake_prim_tenant')
221 self._mock_network_create(iso_creds, '1234', 'fake_net')
222 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
223 self._mock_router_create('1234', 'fake_router')
224 router_interface_mock = self.patch(
225 'tempest.services.network.json.network_client.NetworkClientJSON.'
226 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000227 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400228 router_interface_mock.called_once_with('1234', '1234')
229 network = iso_creds.get_primary_network()
230 subnet = iso_creds.get_primary_subnet()
231 router = iso_creds.get_primary_router()
232 self.assertEqual(network['id'], '1234')
233 self.assertEqual(network['name'], 'fake_net')
234 self.assertEqual(subnet['id'], '1234')
235 self.assertEqual(subnet['name'], 'fake_subnet')
236 self.assertEqual(router['id'], '1234')
237 self.assertEqual(router['name'], 'fake_router')
238
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400239 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400240 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100241 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500242 return {"security_groups": [{"tenant_id": args['tenant_id'],
243 "name": args['name'],
244 "description": args['name'],
245 "security_group_rules": [],
246 "id": "sg-%s" % args['tenant_id']}]}
Matthew Treinishe6723262014-03-14 13:16:52 -0400247 iso_creds = isolated_creds.IsolatedCreds('test class',
248 password='fake_password')
249 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400250 self._mock_assign_user_role()
251 roles_fix = self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400252 user_fix = self._mock_user_create('1234', 'fake_prim_user')
253 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
254 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
255 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
256 router_fix = self._mock_router_create('1234', 'fake_router')
257 router_interface_mock = self.patch(
258 'tempest.services.network.json.network_client.NetworkClientJSON.'
259 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000260 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400261 router_interface_mock.called_once_with('1234', '1234')
262 router_interface_mock.reset_mock()
263 tenant_fix.cleanUp()
264 user_fix.cleanUp()
265 net_fix.cleanUp()
266 subnet_fix.cleanUp()
267 router_fix.cleanUp()
268 # Create alternate tenant and network
269 user_fix = self._mock_user_create('12345', 'fake_alt_user')
270 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
271 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
272 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
273 'fake_alt_subnet')
274 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000275 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400276 router_interface_mock.called_once_with('12345', '12345')
277 router_interface_mock.reset_mock()
278 tenant_fix.cleanUp()
279 user_fix.cleanUp()
280 net_fix.cleanUp()
281 subnet_fix.cleanUp()
282 router_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400283 roles_fix.cleanUp()
Matthew Treinishe6723262014-03-14 13:16:52 -0400284 # Create admin tenant and networks
285 user_fix = self._mock_user_create('123456', 'fake_admin_user')
286 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
287 net_fix = self._mock_network_create(iso_creds, '123456',
288 'fake_admin_net')
289 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
290 'fake_admin_subnet')
291 router_fix = self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400292 self._mock_list_roles('123456', 'admin')
293 iso_creds.get_admin_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400294 self.patch('tempest.services.identity.json.identity_client.'
295 'IdentityClientJSON.delete_user')
296 self.patch('tempest.services.identity.json.identity_client.'
297 'IdentityClientJSON.delete_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400298 net = mock.patch.object(iso_creds.network_admin_client,
299 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400300 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400301 subnet = mock.patch.object(iso_creds.network_admin_client,
302 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400303 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400304 router = mock.patch.object(iso_creds.network_admin_client,
305 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400306 router_mock = router.start()
307 remove_router_interface_mock = self.patch(
308 'tempest.services.network.json.network_client.NetworkClientJSON.'
309 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400310 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400311 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400312 'list_ports',
313 return_value=return_values)
314
Matthew Treinishe6723262014-03-14 13:16:52 -0400315 port_list_mock.start()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100316 secgroup_list_mock = mock.patch.object(iso_creds.network_admin_client,
317 'list_security_groups',
318 side_effect=side_effect)
319 secgroup_list_mock.start()
320
321 return_values = (fake_http.fake_httplib({}, status=204), {})
322 remove_secgroup_mock = self.patch(
323 'tempest.services.network.network_client_base.'
324 'NetworkClientBase.delete', return_value=return_values)
Matthew Treinishe6723262014-03-14 13:16:52 -0400325 iso_creds.clear_isolated_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100326 # Verify default security group delete
327 calls = remove_secgroup_mock.mock_calls
328 self.assertEqual(len(calls), 3)
329 args = map(lambda x: x[1][0], calls)
330 self.assertIn('v2.0/security-groups/sg-1234', args)
331 self.assertIn('v2.0/security-groups/sg-12345', args)
332 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400333 # Verify remove router interface calls
334 calls = remove_router_interface_mock.mock_calls
335 self.assertEqual(len(calls), 3)
336 args = map(lambda x: x[1], calls)
337 self.assertIn(('1234', '1234'), args)
338 self.assertIn(('12345', '12345'), args)
339 self.assertIn(('123456', '123456'), args)
340 # Verify network delete calls
341 calls = net_mock.mock_calls
342 self.assertEqual(len(calls), 3)
343 args = map(lambda x: x[1][0], calls)
344 self.assertIn('1234', args)
345 self.assertIn('12345', args)
346 self.assertIn('123456', args)
347 # Verify subnet delete calls
348 calls = subnet_mock.mock_calls
349 self.assertEqual(len(calls), 3)
350 args = map(lambda x: x[1][0], calls)
351 self.assertIn('1234', args)
352 self.assertIn('12345', args)
353 self.assertIn('123456', args)
354 # Verify router delete calls
355 calls = router_mock.mock_calls
356 self.assertEqual(len(calls), 3)
357 args = map(lambda x: x[1][0], calls)
358 self.assertIn('1234', args)
359 self.assertIn('12345', args)
360 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400361
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400362 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400363 def test_network_alt_creation(self, MockRestClient):
364 iso_creds = isolated_creds.IsolatedCreds('test class',
365 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400366 self._mock_assign_user_role()
367 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400368 self._mock_user_create('1234', 'fake_alt_user')
369 self._mock_tenant_create('1234', 'fake_alt_tenant')
370 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
371 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
372 self._mock_router_create('1234', 'fake_alt_router')
373 router_interface_mock = self.patch(
374 'tempest.services.network.json.network_client.NetworkClientJSON.'
375 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000376 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400377 router_interface_mock.called_once_with('1234', '1234')
378 network = iso_creds.get_alt_network()
379 subnet = iso_creds.get_alt_subnet()
380 router = iso_creds.get_alt_router()
381 self.assertEqual(network['id'], '1234')
382 self.assertEqual(network['name'], 'fake_alt_net')
383 self.assertEqual(subnet['id'], '1234')
384 self.assertEqual(subnet['name'], 'fake_alt_subnet')
385 self.assertEqual(router['id'], '1234')
386 self.assertEqual(router['name'], 'fake_alt_router')
387
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400388 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400389 def test_network_admin_creation(self, MockRestClient):
390 iso_creds = isolated_creds.IsolatedCreds('test class',
391 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400392 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400393 self._mock_user_create('1234', 'fake_admin_user')
394 self._mock_tenant_create('1234', 'fake_admin_tenant')
395 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
396 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
397 self._mock_router_create('1234', 'fake_admin_router')
398 router_interface_mock = self.patch(
399 'tempest.services.network.json.network_client.NetworkClientJSON.'
400 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400401 self._mock_list_roles('123456', 'admin')
402 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400403 router_interface_mock.called_once_with('1234', '1234')
404 network = iso_creds.get_admin_network()
405 subnet = iso_creds.get_admin_subnet()
406 router = iso_creds.get_admin_router()
407 self.assertEqual(network['id'], '1234')
408 self.assertEqual(network['name'], 'fake_admin_net')
409 self.assertEqual(subnet['id'], '1234')
410 self.assertEqual(subnet['name'], 'fake_admin_subnet')
411 self.assertEqual(router['id'], '1234')
412 self.assertEqual(router['name'], 'fake_admin_router')
413
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400414 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400415 def test_no_network_resources(self, MockRestClient):
416 net_dict = {
417 'network': False,
418 'router': False,
419 'subnet': False,
420 'dhcp': False,
421 }
422 iso_creds = isolated_creds.IsolatedCreds('test class',
423 password='fake_password',
424 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400425 self._mock_assign_user_role()
426 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400427 self._mock_user_create('1234', 'fake_prim_user')
428 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400429 net = mock.patch.object(iso_creds.network_admin_client,
430 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400431 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400432 subnet = mock.patch.object(iso_creds.network_admin_client,
433 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400434 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400435 router = mock.patch.object(iso_creds.network_admin_client,
436 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400437 router_mock = router.start()
438
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000439 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400440 self.assertEqual(net_mock.mock_calls, [])
441 self.assertEqual(subnet_mock.mock_calls, [])
442 self.assertEqual(router_mock.mock_calls, [])
443 network = iso_creds.get_primary_network()
444 subnet = iso_creds.get_primary_subnet()
445 router = iso_creds.get_primary_router()
446 self.assertIsNone(network)
447 self.assertIsNone(subnet)
448 self.assertIsNone(router)
449
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400450 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400451 def test_router_without_network(self, MockRestClient):
452 net_dict = {
453 'network': False,
454 'router': True,
455 'subnet': False,
456 'dhcp': False,
457 }
458 iso_creds = isolated_creds.IsolatedCreds('test class',
459 password='fake_password',
460 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400461 self._mock_assign_user_role()
462 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400463 self._mock_user_create('1234', 'fake_prim_user')
464 self._mock_tenant_create('1234', 'fake_prim_tenant')
465 self.assertRaises(exceptions.InvalidConfiguration,
466 iso_creds.get_primary_creds)
467
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400468 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400469 def test_subnet_without_network(self, MockRestClient):
470 net_dict = {
471 'network': False,
472 'router': False,
473 'subnet': True,
474 'dhcp': False,
475 }
476 iso_creds = isolated_creds.IsolatedCreds('test class',
477 password='fake_password',
478 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400479 self._mock_assign_user_role()
480 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400481 self._mock_user_create('1234', 'fake_prim_user')
482 self._mock_tenant_create('1234', 'fake_prim_tenant')
483 self.assertRaises(exceptions.InvalidConfiguration,
484 iso_creds.get_primary_creds)
485
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400486 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400487 def test_dhcp_without_subnet(self, MockRestClient):
488 net_dict = {
489 'network': False,
490 'router': False,
491 'subnet': False,
492 'dhcp': True,
493 }
494 iso_creds = isolated_creds.IsolatedCreds('test class',
495 password='fake_password',
496 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400497 self._mock_assign_user_role()
498 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400499 self._mock_user_create('1234', 'fake_prim_user')
500 self._mock_tenant_create('1234', 'fake_prim_tenant')
501 self.assertRaises(exceptions.InvalidConfiguration,
502 iso_creds.get_primary_creds)