blob: f6779c6c600bf723681437574151f3a66ce674a5 [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
18from tempest.common import isolated_creds
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000019from tempest.common import service_client
Matthew Treinishcb058062014-03-13 18:27:07 -040020from 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)
Ken'ichi Ohmichi03010dc2015-01-08 08:16:25 +000038 self.stubs.Set(json_iden_client.TokenClientJSON, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000039 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',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000054 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050055 (200, {'id': id, 'name': name}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040056 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',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000062 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050063 (200, {'id': id, 'name': name}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040064 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',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000070 return_value=(service_client.ResponseBodyList
David Kranzb7afa922014-12-30 10:56:26 -050071 (200,
72 [{'id': id, 'name': name},
73 {'id': '1', 'name': 'FakeRole'}]))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040074 return roles_fix
75
76 def _mock_assign_user_role(self):
77 tenant_fix = self.useFixture(mockpatch.PatchObject(
78 json_iden_client.IdentityClientJSON,
79 'assign_user_role',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000080 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050081 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040082 return tenant_fix
83
84 def _mock_list_role(self):
85 roles_fix = self.useFixture(mockpatch.PatchObject(
86 json_iden_client.IdentityClientJSON,
87 'list_roles',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000088 return_value=(service_client.ResponseBodyList
David Kranzb7afa922014-12-30 10:56:26 -050089 (200, [{'id': '1', 'name': 'FakeRole'}]))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040090 return roles_fix
91
Matthew Treinishe6723262014-03-14 13:16:52 -040092 def _mock_network_create(self, iso_creds, id, name):
93 net_fix = self.useFixture(mockpatch.PatchObject(
94 iso_creds.network_admin_client,
95 'create_network',
David Kranz34e88122014-12-11 15:24:05 -050096 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -040097 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',
David Kranz34e88122014-12-11 15:24:05 -0500103 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400104 return subnet_fix
105
106 def _mock_router_create(self, id, name):
107 router_fix = self.useFixture(mockpatch.PatchObject(
108 json_network_client.NetworkClientJSON,
109 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500110 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400111 return router_fix
112
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400113 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400114 def test_primary_creds(self, MockRestClient):
115 cfg.CONF.set_default('neutron', False, 'service_available')
116 iso_creds = isolated_creds.IsolatedCreds('test class',
117 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400118 self._mock_assign_user_role()
119 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400120 self._mock_tenant_create('1234', 'fake_prim_tenant')
121 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000122 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000123 self.assertEqual(primary_creds.username, 'fake_prim_user')
124 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000125 # Verify IDs
126 self.assertEqual(primary_creds.tenant_id, '1234')
127 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400128
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400129 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400130 def test_admin_creds(self, MockRestClient):
131 cfg.CONF.set_default('neutron', False, 'service_available')
132 iso_creds = isolated_creds.IsolatedCreds('test class',
133 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400134 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400135 self._mock_user_create('1234', 'fake_admin_user')
136 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400137
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400138 user_mock = mock.patch.object(json_iden_client.IdentityClientJSON,
139 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400140 user_mock.start()
141 self.addCleanup(user_mock.stop)
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400142 with mock.patch.object(json_iden_client.IdentityClientJSON,
143 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000144 admin_creds = iso_creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400145 user_mock.assert_has_calls([
146 mock.call('1234', '1234', '1'),
147 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000148 self.assertEqual(admin_creds.username, 'fake_admin_user')
149 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000150 # Verify IDs
151 self.assertEqual(admin_creds.tenant_id, '1234')
152 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400153
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400154 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400155 def test_all_cred_cleanup(self, MockRestClient):
156 cfg.CONF.set_default('neutron', False, 'service_available')
157 iso_creds = isolated_creds.IsolatedCreds('test class',
158 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400159 self._mock_assign_user_role()
160 roles_fix = self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400161 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
162 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000163 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400164 tenant_fix.cleanUp()
165 user_fix.cleanUp()
166 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
167 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000168 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400169 tenant_fix.cleanUp()
170 user_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400171 roles_fix.cleanUp()
Matthew Treinishcb058062014-03-13 18:27:07 -0400172 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
173 user_fix = self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400174 self._mock_list_roles('123456', 'admin')
175 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400176 user_mock = self.patch(
177 'tempest.services.identity.json.identity_client.'
178 'IdentityClientJSON.delete_user')
179 tenant_mock = self.patch(
180 'tempest.services.identity.json.identity_client.'
181 'IdentityClientJSON.delete_tenant')
182 iso_creds.clear_isolated_creds()
183 # Verify user delete calls
184 calls = user_mock.mock_calls
185 self.assertEqual(len(calls), 3)
186 args = map(lambda x: x[1][0], calls)
187 self.assertIn('1234', args)
188 self.assertIn('12345', args)
189 self.assertIn('123456', args)
190 # Verify tenant delete calls
191 calls = tenant_mock.mock_calls
192 self.assertEqual(len(calls), 3)
193 args = map(lambda x: x[1][0], calls)
194 self.assertIn('1234', args)
195 self.assertIn('12345', args)
196 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400197
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400198 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400199 def test_alt_creds(self, MockRestClient):
200 cfg.CONF.set_default('neutron', False, 'service_available')
201 iso_creds = isolated_creds.IsolatedCreds('test class',
202 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400203 self._mock_assign_user_role()
204 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400205 self._mock_user_create('1234', 'fake_alt_user')
206 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000207 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000208 self.assertEqual(alt_creds.username, 'fake_alt_user')
209 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000210 # Verify IDs
211 self.assertEqual(alt_creds.tenant_id, '1234')
212 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400213
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400214 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400215 def test_network_creation(self, MockRestClient):
216 iso_creds = isolated_creds.IsolatedCreds('test class',
217 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400218 self._mock_assign_user_role()
219 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400220 self._mock_user_create('1234', 'fake_prim_user')
221 self._mock_tenant_create('1234', 'fake_prim_tenant')
222 self._mock_network_create(iso_creds, '1234', 'fake_net')
223 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
224 self._mock_router_create('1234', 'fake_router')
225 router_interface_mock = self.patch(
226 'tempest.services.network.json.network_client.NetworkClientJSON.'
227 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000228 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400229 router_interface_mock.called_once_with('1234', '1234')
230 network = iso_creds.get_primary_network()
231 subnet = iso_creds.get_primary_subnet()
232 router = iso_creds.get_primary_router()
233 self.assertEqual(network['id'], '1234')
234 self.assertEqual(network['name'], 'fake_net')
235 self.assertEqual(subnet['id'], '1234')
236 self.assertEqual(subnet['name'], 'fake_subnet')
237 self.assertEqual(router['id'], '1234')
238 self.assertEqual(router['name'], 'fake_router')
239
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400240 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400241 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100242 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500243 return {"security_groups": [{"tenant_id": args['tenant_id'],
244 "name": args['name'],
245 "description": args['name'],
246 "security_group_rules": [],
247 "id": "sg-%s" % args['tenant_id']}]}
Matthew Treinishe6723262014-03-14 13:16:52 -0400248 iso_creds = isolated_creds.IsolatedCreds('test class',
249 password='fake_password')
250 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400251 self._mock_assign_user_role()
252 roles_fix = self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400253 user_fix = self._mock_user_create('1234', 'fake_prim_user')
254 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
255 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
256 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
257 router_fix = 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 router_interface_mock.reset_mock()
264 tenant_fix.cleanUp()
265 user_fix.cleanUp()
266 net_fix.cleanUp()
267 subnet_fix.cleanUp()
268 router_fix.cleanUp()
269 # Create alternate tenant and network
270 user_fix = self._mock_user_create('12345', 'fake_alt_user')
271 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
272 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
273 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
274 'fake_alt_subnet')
275 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000276 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400277 router_interface_mock.called_once_with('12345', '12345')
278 router_interface_mock.reset_mock()
279 tenant_fix.cleanUp()
280 user_fix.cleanUp()
281 net_fix.cleanUp()
282 subnet_fix.cleanUp()
283 router_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400284 roles_fix.cleanUp()
Matthew Treinishe6723262014-03-14 13:16:52 -0400285 # Create admin tenant and networks
286 user_fix = self._mock_user_create('123456', 'fake_admin_user')
287 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
288 net_fix = self._mock_network_create(iso_creds, '123456',
289 'fake_admin_net')
290 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
291 'fake_admin_subnet')
292 router_fix = self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400293 self._mock_list_roles('123456', 'admin')
294 iso_creds.get_admin_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400295 self.patch('tempest.services.identity.json.identity_client.'
296 'IdentityClientJSON.delete_user')
297 self.patch('tempest.services.identity.json.identity_client.'
298 'IdentityClientJSON.delete_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400299 net = mock.patch.object(iso_creds.network_admin_client,
300 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400301 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400302 subnet = mock.patch.object(iso_creds.network_admin_client,
303 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400304 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400305 router = mock.patch.object(iso_creds.network_admin_client,
306 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400307 router_mock = router.start()
308 remove_router_interface_mock = self.patch(
309 'tempest.services.network.json.network_client.NetworkClientJSON.'
310 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400311 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400312 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400313 'list_ports',
314 return_value=return_values)
315
Matthew Treinishe6723262014-03-14 13:16:52 -0400316 port_list_mock.start()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100317 secgroup_list_mock = mock.patch.object(iso_creds.network_admin_client,
318 'list_security_groups',
319 side_effect=side_effect)
320 secgroup_list_mock.start()
321
322 return_values = (fake_http.fake_httplib({}, status=204), {})
323 remove_secgroup_mock = self.patch(
Ken'ichi Ohmichi88f12c12014-12-24 01:02:58 +0000324 'tempest.services.network.json.network_client.'
325 'NetworkClientJSON.delete', return_value=return_values)
Matthew Treinishe6723262014-03-14 13:16:52 -0400326 iso_creds.clear_isolated_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100327 # Verify default security group delete
328 calls = remove_secgroup_mock.mock_calls
329 self.assertEqual(len(calls), 3)
330 args = map(lambda x: x[1][0], calls)
331 self.assertIn('v2.0/security-groups/sg-1234', args)
332 self.assertIn('v2.0/security-groups/sg-12345', args)
333 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400334 # Verify remove router interface calls
335 calls = remove_router_interface_mock.mock_calls
336 self.assertEqual(len(calls), 3)
337 args = map(lambda x: x[1], calls)
338 self.assertIn(('1234', '1234'), args)
339 self.assertIn(('12345', '12345'), args)
340 self.assertIn(('123456', '123456'), args)
341 # Verify network delete calls
342 calls = net_mock.mock_calls
343 self.assertEqual(len(calls), 3)
344 args = map(lambda x: x[1][0], calls)
345 self.assertIn('1234', args)
346 self.assertIn('12345', args)
347 self.assertIn('123456', args)
348 # Verify subnet delete calls
349 calls = subnet_mock.mock_calls
350 self.assertEqual(len(calls), 3)
351 args = map(lambda x: x[1][0], calls)
352 self.assertIn('1234', args)
353 self.assertIn('12345', args)
354 self.assertIn('123456', args)
355 # Verify router delete calls
356 calls = router_mock.mock_calls
357 self.assertEqual(len(calls), 3)
358 args = map(lambda x: x[1][0], calls)
359 self.assertIn('1234', args)
360 self.assertIn('12345', args)
361 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400362
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400363 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400364 def test_network_alt_creation(self, MockRestClient):
365 iso_creds = isolated_creds.IsolatedCreds('test class',
366 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400367 self._mock_assign_user_role()
368 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400369 self._mock_user_create('1234', 'fake_alt_user')
370 self._mock_tenant_create('1234', 'fake_alt_tenant')
371 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
372 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
373 self._mock_router_create('1234', 'fake_alt_router')
374 router_interface_mock = self.patch(
375 'tempest.services.network.json.network_client.NetworkClientJSON.'
376 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000377 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400378 router_interface_mock.called_once_with('1234', '1234')
379 network = iso_creds.get_alt_network()
380 subnet = iso_creds.get_alt_subnet()
381 router = iso_creds.get_alt_router()
382 self.assertEqual(network['id'], '1234')
383 self.assertEqual(network['name'], 'fake_alt_net')
384 self.assertEqual(subnet['id'], '1234')
385 self.assertEqual(subnet['name'], 'fake_alt_subnet')
386 self.assertEqual(router['id'], '1234')
387 self.assertEqual(router['name'], 'fake_alt_router')
388
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400389 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400390 def test_network_admin_creation(self, MockRestClient):
391 iso_creds = isolated_creds.IsolatedCreds('test class',
392 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400393 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400394 self._mock_user_create('1234', 'fake_admin_user')
395 self._mock_tenant_create('1234', 'fake_admin_tenant')
396 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
397 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
398 self._mock_router_create('1234', 'fake_admin_router')
399 router_interface_mock = self.patch(
400 'tempest.services.network.json.network_client.NetworkClientJSON.'
401 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400402 self._mock_list_roles('123456', 'admin')
403 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400404 router_interface_mock.called_once_with('1234', '1234')
405 network = iso_creds.get_admin_network()
406 subnet = iso_creds.get_admin_subnet()
407 router = iso_creds.get_admin_router()
408 self.assertEqual(network['id'], '1234')
409 self.assertEqual(network['name'], 'fake_admin_net')
410 self.assertEqual(subnet['id'], '1234')
411 self.assertEqual(subnet['name'], 'fake_admin_subnet')
412 self.assertEqual(router['id'], '1234')
413 self.assertEqual(router['name'], 'fake_admin_router')
414
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400415 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400416 def test_no_network_resources(self, MockRestClient):
417 net_dict = {
418 'network': False,
419 'router': False,
420 'subnet': False,
421 'dhcp': False,
422 }
423 iso_creds = isolated_creds.IsolatedCreds('test class',
424 password='fake_password',
425 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400426 self._mock_assign_user_role()
427 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400428 self._mock_user_create('1234', 'fake_prim_user')
429 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400430 net = mock.patch.object(iso_creds.network_admin_client,
431 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400432 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400433 subnet = mock.patch.object(iso_creds.network_admin_client,
434 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400435 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400436 router = mock.patch.object(iso_creds.network_admin_client,
437 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400438 router_mock = router.start()
439
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000440 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400441 self.assertEqual(net_mock.mock_calls, [])
442 self.assertEqual(subnet_mock.mock_calls, [])
443 self.assertEqual(router_mock.mock_calls, [])
444 network = iso_creds.get_primary_network()
445 subnet = iso_creds.get_primary_subnet()
446 router = iso_creds.get_primary_router()
447 self.assertIsNone(network)
448 self.assertIsNone(subnet)
449 self.assertIsNone(router)
450
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400451 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400452 def test_router_without_network(self, MockRestClient):
453 net_dict = {
454 'network': False,
455 'router': True,
456 'subnet': False,
457 'dhcp': False,
458 }
459 iso_creds = isolated_creds.IsolatedCreds('test class',
460 password='fake_password',
461 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400462 self._mock_assign_user_role()
463 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400464 self._mock_user_create('1234', 'fake_prim_user')
465 self._mock_tenant_create('1234', 'fake_prim_tenant')
466 self.assertRaises(exceptions.InvalidConfiguration,
467 iso_creds.get_primary_creds)
468
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400469 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400470 def test_subnet_without_network(self, MockRestClient):
471 net_dict = {
472 'network': False,
473 'router': False,
474 'subnet': True,
475 'dhcp': False,
476 }
477 iso_creds = isolated_creds.IsolatedCreds('test class',
478 password='fake_password',
479 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400480 self._mock_assign_user_role()
481 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400482 self._mock_user_create('1234', 'fake_prim_user')
483 self._mock_tenant_create('1234', 'fake_prim_tenant')
484 self.assertRaises(exceptions.InvalidConfiguration,
485 iso_creds.get_primary_creds)
486
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400487 @mock.patch('tempest.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400488 def test_dhcp_without_subnet(self, MockRestClient):
489 net_dict = {
490 'network': False,
491 'router': False,
492 'subnet': False,
493 'dhcp': True,
494 }
495 iso_creds = isolated_creds.IsolatedCreds('test class',
496 password='fake_password',
497 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400498 self._mock_assign_user_role()
499 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400500 self._mock_user_create('1234', 'fake_prim_user')
501 self._mock_tenant_create('1234', 'fake_prim_tenant')
502 self.assertRaises(exceptions.InvalidConfiguration,
503 iso_creds.get_primary_creds)