blob: df9719bfa1847f5886ca6e37bed0b4c9ad4d6d16 [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',
95 return_value=({'status': 200},
96 {'network': {'id': id, 'name': name}})))
97 return net_fix
98
99 def _mock_subnet_create(self, iso_creds, id, name):
100 subnet_fix = self.useFixture(mockpatch.PatchObject(
101 iso_creds.network_admin_client,
102 'create_subnet',
103 return_value=({'status': 200},
104 {'subnet': {'id': id, 'name': name}})))
105 return subnet_fix
106
107 def _mock_router_create(self, id, name):
108 router_fix = self.useFixture(mockpatch.PatchObject(
109 json_network_client.NetworkClientJSON,
110 'create_router',
111 return_value=({'status': 200},
112 {'router': {'id': id, 'name': name}})))
113 return router_fix
114
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400115 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400116 def test_primary_creds(self, MockRestClient):
117 cfg.CONF.set_default('neutron', False, 'service_available')
118 iso_creds = isolated_creds.IsolatedCreds('test class',
119 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400120 self._mock_assign_user_role()
121 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400122 self._mock_tenant_create('1234', 'fake_prim_tenant')
123 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000124 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000125 self.assertEqual(primary_creds.username, 'fake_prim_user')
126 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000127 # Verify IDs
128 self.assertEqual(primary_creds.tenant_id, '1234')
129 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400130
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400131 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400132 def test_admin_creds(self, MockRestClient):
133 cfg.CONF.set_default('neutron', False, 'service_available')
134 iso_creds = isolated_creds.IsolatedCreds('test class',
135 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400136 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400137 self._mock_user_create('1234', 'fake_admin_user')
138 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400139
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400140 user_mock = mock.patch.object(json_iden_client.IdentityClientJSON,
141 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400142 user_mock.start()
143 self.addCleanup(user_mock.stop)
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400144 with mock.patch.object(json_iden_client.IdentityClientJSON,
145 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000146 admin_creds = iso_creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400147 user_mock.assert_has_calls([
148 mock.call('1234', '1234', '1'),
149 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000150 self.assertEqual(admin_creds.username, 'fake_admin_user')
151 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000152 # Verify IDs
153 self.assertEqual(admin_creds.tenant_id, '1234')
154 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400155
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400156 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400157 def test_all_cred_cleanup(self, MockRestClient):
158 cfg.CONF.set_default('neutron', False, 'service_available')
159 iso_creds = isolated_creds.IsolatedCreds('test class',
160 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400161 self._mock_assign_user_role()
162 roles_fix = self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400163 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
164 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000165 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400166 tenant_fix.cleanUp()
167 user_fix.cleanUp()
168 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
169 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000170 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400171 tenant_fix.cleanUp()
172 user_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400173 roles_fix.cleanUp()
Matthew Treinishcb058062014-03-13 18:27:07 -0400174 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
175 user_fix = self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400176 self._mock_list_roles('123456', 'admin')
177 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400178 user_mock = self.patch(
179 'tempest.services.identity.json.identity_client.'
180 'IdentityClientJSON.delete_user')
181 tenant_mock = self.patch(
182 'tempest.services.identity.json.identity_client.'
183 'IdentityClientJSON.delete_tenant')
184 iso_creds.clear_isolated_creds()
185 # Verify user delete calls
186 calls = user_mock.mock_calls
187 self.assertEqual(len(calls), 3)
188 args = map(lambda x: x[1][0], calls)
189 self.assertIn('1234', args)
190 self.assertIn('12345', args)
191 self.assertIn('123456', args)
192 # Verify tenant delete calls
193 calls = tenant_mock.mock_calls
194 self.assertEqual(len(calls), 3)
195 args = map(lambda x: x[1][0], calls)
196 self.assertIn('1234', args)
197 self.assertIn('12345', args)
198 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400199
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400200 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400201 def test_alt_creds(self, MockRestClient):
202 cfg.CONF.set_default('neutron', False, 'service_available')
203 iso_creds = isolated_creds.IsolatedCreds('test class',
204 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400205 self._mock_assign_user_role()
206 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400207 self._mock_user_create('1234', 'fake_alt_user')
208 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000209 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000210 self.assertEqual(alt_creds.username, 'fake_alt_user')
211 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000212 # Verify IDs
213 self.assertEqual(alt_creds.tenant_id, '1234')
214 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400215
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400216 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400217 def test_network_creation(self, MockRestClient):
218 iso_creds = isolated_creds.IsolatedCreds('test class',
219 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400220 self._mock_assign_user_role()
221 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400222 self._mock_user_create('1234', 'fake_prim_user')
223 self._mock_tenant_create('1234', 'fake_prim_tenant')
224 self._mock_network_create(iso_creds, '1234', 'fake_net')
225 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
226 self._mock_router_create('1234', 'fake_router')
227 router_interface_mock = self.patch(
228 'tempest.services.network.json.network_client.NetworkClientJSON.'
229 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000230 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400231 router_interface_mock.called_once_with('1234', '1234')
232 network = iso_creds.get_primary_network()
233 subnet = iso_creds.get_primary_subnet()
234 router = iso_creds.get_primary_router()
235 self.assertEqual(network['id'], '1234')
236 self.assertEqual(network['name'], 'fake_net')
237 self.assertEqual(subnet['id'], '1234')
238 self.assertEqual(subnet['name'], 'fake_subnet')
239 self.assertEqual(router['id'], '1234')
240 self.assertEqual(router['name'], 'fake_router')
241
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400242 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400243 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100244 def side_effect(**args):
245 return ({'status': 200},
246 {"security_groups": [{"tenant_id": args['tenant_id'],
247 "name": args['name'],
248 "description": args['name'],
249 "security_group_rules": [],
250 "id": "sg-%s" % args['tenant_id']}]})
Matthew Treinishe6723262014-03-14 13:16:52 -0400251 iso_creds = isolated_creds.IsolatedCreds('test class',
252 password='fake_password')
253 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400254 self._mock_assign_user_role()
255 roles_fix = self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400256 user_fix = self._mock_user_create('1234', 'fake_prim_user')
257 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
258 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
259 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
260 router_fix = self._mock_router_create('1234', 'fake_router')
261 router_interface_mock = self.patch(
262 'tempest.services.network.json.network_client.NetworkClientJSON.'
263 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000264 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400265 router_interface_mock.called_once_with('1234', '1234')
266 router_interface_mock.reset_mock()
267 tenant_fix.cleanUp()
268 user_fix.cleanUp()
269 net_fix.cleanUp()
270 subnet_fix.cleanUp()
271 router_fix.cleanUp()
272 # Create alternate tenant and network
273 user_fix = self._mock_user_create('12345', 'fake_alt_user')
274 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
275 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
276 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
277 'fake_alt_subnet')
278 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000279 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400280 router_interface_mock.called_once_with('12345', '12345')
281 router_interface_mock.reset_mock()
282 tenant_fix.cleanUp()
283 user_fix.cleanUp()
284 net_fix.cleanUp()
285 subnet_fix.cleanUp()
286 router_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400287 roles_fix.cleanUp()
Matthew Treinishe6723262014-03-14 13:16:52 -0400288 # Create admin tenant and networks
289 user_fix = self._mock_user_create('123456', 'fake_admin_user')
290 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
291 net_fix = self._mock_network_create(iso_creds, '123456',
292 'fake_admin_net')
293 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
294 'fake_admin_subnet')
295 router_fix = self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400296 self._mock_list_roles('123456', 'admin')
297 iso_creds.get_admin_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400298 self.patch('tempest.services.identity.json.identity_client.'
299 'IdentityClientJSON.delete_user')
300 self.patch('tempest.services.identity.json.identity_client.'
301 'IdentityClientJSON.delete_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400302 net = mock.patch.object(iso_creds.network_admin_client,
303 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400304 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400305 subnet = mock.patch.object(iso_creds.network_admin_client,
306 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400307 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400308 router = mock.patch.object(iso_creds.network_admin_client,
309 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400310 router_mock = router.start()
311 remove_router_interface_mock = self.patch(
312 'tempest.services.network.json.network_client.NetworkClientJSON.'
313 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400314 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400315 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400316 'list_ports',
317 return_value=return_values)
318
Matthew Treinishe6723262014-03-14 13:16:52 -0400319 port_list_mock.start()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100320 secgroup_list_mock = mock.patch.object(iso_creds.network_admin_client,
321 'list_security_groups',
322 side_effect=side_effect)
323 secgroup_list_mock.start()
324
325 return_values = (fake_http.fake_httplib({}, status=204), {})
326 remove_secgroup_mock = self.patch(
327 'tempest.services.network.network_client_base.'
328 'NetworkClientBase.delete', return_value=return_values)
Matthew Treinishe6723262014-03-14 13:16:52 -0400329 iso_creds.clear_isolated_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100330 # Verify default security group delete
331 calls = remove_secgroup_mock.mock_calls
332 self.assertEqual(len(calls), 3)
333 args = map(lambda x: x[1][0], calls)
334 self.assertIn('v2.0/security-groups/sg-1234', args)
335 self.assertIn('v2.0/security-groups/sg-12345', args)
336 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400337 # Verify remove router interface calls
338 calls = remove_router_interface_mock.mock_calls
339 self.assertEqual(len(calls), 3)
340 args = map(lambda x: x[1], calls)
341 self.assertIn(('1234', '1234'), args)
342 self.assertIn(('12345', '12345'), args)
343 self.assertIn(('123456', '123456'), args)
344 # Verify network delete calls
345 calls = net_mock.mock_calls
346 self.assertEqual(len(calls), 3)
347 args = map(lambda x: x[1][0], calls)
348 self.assertIn('1234', args)
349 self.assertIn('12345', args)
350 self.assertIn('123456', args)
351 # Verify subnet delete calls
352 calls = subnet_mock.mock_calls
353 self.assertEqual(len(calls), 3)
354 args = map(lambda x: x[1][0], calls)
355 self.assertIn('1234', args)
356 self.assertIn('12345', args)
357 self.assertIn('123456', args)
358 # Verify router delete calls
359 calls = router_mock.mock_calls
360 self.assertEqual(len(calls), 3)
361 args = map(lambda x: x[1][0], calls)
362 self.assertIn('1234', args)
363 self.assertIn('12345', args)
364 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400365
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400366 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400367 def test_network_alt_creation(self, MockRestClient):
368 iso_creds = isolated_creds.IsolatedCreds('test class',
369 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400370 self._mock_assign_user_role()
371 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400372 self._mock_user_create('1234', 'fake_alt_user')
373 self._mock_tenant_create('1234', 'fake_alt_tenant')
374 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
375 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
376 self._mock_router_create('1234', 'fake_alt_router')
377 router_interface_mock = self.patch(
378 'tempest.services.network.json.network_client.NetworkClientJSON.'
379 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000380 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400381 router_interface_mock.called_once_with('1234', '1234')
382 network = iso_creds.get_alt_network()
383 subnet = iso_creds.get_alt_subnet()
384 router = iso_creds.get_alt_router()
385 self.assertEqual(network['id'], '1234')
386 self.assertEqual(network['name'], 'fake_alt_net')
387 self.assertEqual(subnet['id'], '1234')
388 self.assertEqual(subnet['name'], 'fake_alt_subnet')
389 self.assertEqual(router['id'], '1234')
390 self.assertEqual(router['name'], 'fake_alt_router')
391
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400392 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400393 def test_network_admin_creation(self, MockRestClient):
394 iso_creds = isolated_creds.IsolatedCreds('test class',
395 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400396 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400397 self._mock_user_create('1234', 'fake_admin_user')
398 self._mock_tenant_create('1234', 'fake_admin_tenant')
399 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
400 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
401 self._mock_router_create('1234', 'fake_admin_router')
402 router_interface_mock = self.patch(
403 'tempest.services.network.json.network_client.NetworkClientJSON.'
404 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400405 self._mock_list_roles('123456', 'admin')
406 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400407 router_interface_mock.called_once_with('1234', '1234')
408 network = iso_creds.get_admin_network()
409 subnet = iso_creds.get_admin_subnet()
410 router = iso_creds.get_admin_router()
411 self.assertEqual(network['id'], '1234')
412 self.assertEqual(network['name'], 'fake_admin_net')
413 self.assertEqual(subnet['id'], '1234')
414 self.assertEqual(subnet['name'], 'fake_admin_subnet')
415 self.assertEqual(router['id'], '1234')
416 self.assertEqual(router['name'], 'fake_admin_router')
417
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400418 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400419 def test_no_network_resources(self, MockRestClient):
420 net_dict = {
421 'network': False,
422 'router': False,
423 'subnet': False,
424 'dhcp': False,
425 }
426 iso_creds = isolated_creds.IsolatedCreds('test class',
427 password='fake_password',
428 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400429 self._mock_assign_user_role()
430 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400431 self._mock_user_create('1234', 'fake_prim_user')
432 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400433 net = mock.patch.object(iso_creds.network_admin_client,
434 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400435 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400436 subnet = mock.patch.object(iso_creds.network_admin_client,
437 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400438 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400439 router = mock.patch.object(iso_creds.network_admin_client,
440 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400441 router_mock = router.start()
442
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000443 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400444 self.assertEqual(net_mock.mock_calls, [])
445 self.assertEqual(subnet_mock.mock_calls, [])
446 self.assertEqual(router_mock.mock_calls, [])
447 network = iso_creds.get_primary_network()
448 subnet = iso_creds.get_primary_subnet()
449 router = iso_creds.get_primary_router()
450 self.assertIsNone(network)
451 self.assertIsNone(subnet)
452 self.assertIsNone(router)
453
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400454 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400455 def test_router_without_network(self, MockRestClient):
456 net_dict = {
457 'network': False,
458 'router': True,
459 'subnet': False,
460 'dhcp': False,
461 }
462 iso_creds = isolated_creds.IsolatedCreds('test class',
463 password='fake_password',
464 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400465 self._mock_assign_user_role()
466 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400467 self._mock_user_create('1234', 'fake_prim_user')
468 self._mock_tenant_create('1234', 'fake_prim_tenant')
469 self.assertRaises(exceptions.InvalidConfiguration,
470 iso_creds.get_primary_creds)
471
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400472 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400473 def test_subnet_without_network(self, MockRestClient):
474 net_dict = {
475 'network': False,
476 'router': False,
477 'subnet': True,
478 'dhcp': False,
479 }
480 iso_creds = isolated_creds.IsolatedCreds('test class',
481 password='fake_password',
482 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400483 self._mock_assign_user_role()
484 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400485 self._mock_user_create('1234', 'fake_prim_user')
486 self._mock_tenant_create('1234', 'fake_prim_tenant')
487 self.assertRaises(exceptions.InvalidConfiguration,
488 iso_creds.get_primary_creds)
489
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400490 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400491 def test_dhcp_without_subnet(self, MockRestClient):
492 net_dict = {
493 'network': False,
494 'router': False,
495 'subnet': False,
496 'dhcp': True,
497 }
498 iso_creds = isolated_creds.IsolatedCreds('test class',
499 password='fake_password',
500 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400501 self._mock_assign_user_role()
502 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400503 self._mock_user_create('1234', 'fake_prim_user')
504 self._mock_tenant_create('1234', 'fake_prim_tenant')
505 self.assertRaises(exceptions.InvalidConfiguration,
506 iso_creds.get_primary_creds)