blob: 72a63c3a9191c19a8135d14c6cf0f8bac130bad6 [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
Doug Hellmann583ce2c2015-03-11 14:55:46 +000016from oslo_config import cfg
17from oslotest import mockpatch
andreafb8a52282015-03-19 22:21:54 +000018from tempest_lib.services.identity.v2 import token_client as json_token_client
Matthew Treinishcb058062014-03-13 18:27:07 -040019
20from tempest.common import isolated_creds
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000021from tempest.common import service_client
Matthew Treinishcb058062014-03-13 18:27:07 -040022from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040023from tempest import exceptions
Jamie Lennoxc429e6a2015-02-24 10:42:42 +110024from tempest.services.identity.v2.json import identity_client as \
25 json_iden_client
Matthew Treinishcb058062014-03-13 18:27:07 -040026from tempest.services.network.json import network_client as json_network_client
Matthew Treinishcb058062014-03-13 18:27:07 -040027from tempest.tests import base
28from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000029from tempest.tests import fake_http
30from tempest.tests import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040031
32
33class TestTenantIsolation(base.TestCase):
34
35 def setUp(self):
36 super(TestTenantIsolation, self).setUp()
37 self.useFixture(fake_config.ConfigFixture())
38 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000039 self.fake_http = fake_http.fake_httplib2(return_type=200)
ghanshyamc0edda02015-02-06 15:51:40 +090040 self.stubs.Set(json_token_client.TokenClientJSON, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000041 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040042 cfg.CONF.set_default('operator_role', 'FakeRole',
43 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000044 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Matthew Treinishcb058062014-03-13 18:27:07 -040045
46 def test_tempest_client(self):
Andrea Frittolic3280152015-02-26 12:42:34 +000047 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Matthew Treinishcb058062014-03-13 18:27:07 -040048 self.assertTrue(isinstance(iso_creds.identity_admin_client,
49 json_iden_client.IdentityClientJSON))
50 self.assertTrue(isinstance(iso_creds.network_admin_client,
51 json_network_client.NetworkClientJSON))
52
Matthew Treinishcb058062014-03-13 18:27:07 -040053 def _mock_user_create(self, id, name):
54 user_fix = self.useFixture(mockpatch.PatchObject(
55 json_iden_client.IdentityClientJSON,
56 'create_user',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000057 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050058 (200, {'id': id, 'name': name}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040059 return user_fix
60
61 def _mock_tenant_create(self, id, name):
62 tenant_fix = self.useFixture(mockpatch.PatchObject(
63 json_iden_client.IdentityClientJSON,
64 'create_tenant',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000065 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050066 (200, {'id': id, 'name': name}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040067 return tenant_fix
68
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040069 def _mock_list_roles(self, id, name):
70 roles_fix = self.useFixture(mockpatch.PatchObject(
71 json_iden_client.IdentityClientJSON,
72 'list_roles',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000073 return_value=(service_client.ResponseBodyList
David Kranzb7afa922014-12-30 10:56:26 -050074 (200,
75 [{'id': id, 'name': name},
76 {'id': '1', 'name': 'FakeRole'}]))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040077 return roles_fix
78
Matthew Treinish976e8df2014-12-19 14:21:54 -050079 def _mock_list_2_roles(self):
80 roles_fix = self.useFixture(mockpatch.PatchObject(
81 json_iden_client.IdentityClientJSON,
82 'list_roles',
83 return_value=(service_client.ResponseBodyList
84 (200,
85 [{'id': '1234', 'name': 'role1'},
86 {'id': '1', 'name': 'FakeRole'},
87 {'id': '12345', 'name': 'role2'}]))))
88 return roles_fix
89
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040090 def _mock_assign_user_role(self):
91 tenant_fix = self.useFixture(mockpatch.PatchObject(
92 json_iden_client.IdentityClientJSON,
93 'assign_user_role',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000094 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050095 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040096 return tenant_fix
97
98 def _mock_list_role(self):
99 roles_fix = self.useFixture(mockpatch.PatchObject(
100 json_iden_client.IdentityClientJSON,
101 'list_roles',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +0000102 return_value=(service_client.ResponseBodyList
David Kranzb7afa922014-12-30 10:56:26 -0500103 (200, [{'id': '1', 'name': 'FakeRole'}]))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400104 return roles_fix
105
Andrea Frittoli32d74992015-03-06 17:01:07 +0000106 def _mock_list_ec2_credentials(self, user_id, tenant_id):
107 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
108 json_iden_client.IdentityClientJSON,
109 'list_user_ec2_credentials',
110 return_value=(service_client.ResponseBodyList
111 (200, [{'access': 'fake_access',
112 'secret': 'fake_secret',
113 'tenant_id': tenant_id,
114 'user_id': user_id,
115 'trust_id': None}]))))
116 return ec2_creds_fix
117
Matthew Treinishe6723262014-03-14 13:16:52 -0400118 def _mock_network_create(self, iso_creds, id, name):
119 net_fix = self.useFixture(mockpatch.PatchObject(
120 iso_creds.network_admin_client,
121 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500122 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400123 return net_fix
124
125 def _mock_subnet_create(self, iso_creds, id, name):
126 subnet_fix = self.useFixture(mockpatch.PatchObject(
127 iso_creds.network_admin_client,
128 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500129 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400130 return subnet_fix
131
132 def _mock_router_create(self, id, name):
133 router_fix = self.useFixture(mockpatch.PatchObject(
134 json_network_client.NetworkClientJSON,
135 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500136 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400137 return router_fix
138
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000139 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400140 def test_primary_creds(self, MockRestClient):
141 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000142 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishcb058062014-03-13 18:27:07 -0400143 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400144 self._mock_assign_user_role()
145 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400146 self._mock_tenant_create('1234', 'fake_prim_tenant')
147 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000148 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000149 self.assertEqual(primary_creds.username, 'fake_prim_user')
150 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000151 # Verify IDs
152 self.assertEqual(primary_creds.tenant_id, '1234')
153 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400154
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000155 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400156 def test_admin_creds(self, MockRestClient):
157 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000158 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishcb058062014-03-13 18:27:07 -0400159 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400160 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400161 self._mock_user_create('1234', 'fake_admin_user')
162 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400163
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400164 user_mock = mock.patch.object(json_iden_client.IdentityClientJSON,
165 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400166 user_mock.start()
167 self.addCleanup(user_mock.stop)
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400168 with mock.patch.object(json_iden_client.IdentityClientJSON,
169 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000170 admin_creds = iso_creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400171 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400172 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000173 self.assertEqual(admin_creds.username, 'fake_admin_user')
174 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000175 # Verify IDs
176 self.assertEqual(admin_creds.tenant_id, '1234')
177 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400178
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000179 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500180 def test_role_creds(self, MockRestClient):
181 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000182 iso_creds = isolated_creds.IsolatedCreds('v2', 'test class',
Matthew Treinish976e8df2014-12-19 14:21:54 -0500183 password='fake_password')
184 self._mock_list_2_roles()
185 self._mock_user_create('1234', 'fake_role_user')
186 self._mock_tenant_create('1234', 'fake_role_tenant')
187
188 user_mock = mock.patch.object(json_iden_client.IdentityClientJSON,
189 'assign_user_role')
190 user_mock.start()
191 self.addCleanup(user_mock.stop)
192 with mock.patch.object(json_iden_client.IdentityClientJSON,
193 'assign_user_role') as user_mock:
194 role_creds = iso_creds.get_creds_by_roles(roles=['role1', 'role2'])
195 calls = user_mock.mock_calls
196 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500197 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500198 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400199 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500200 self.assertIn(('1234', '1234', '1234'), args)
201 self.assertIn(('1234', '1234', '12345'), args)
202 self.assertEqual(role_creds.username, 'fake_role_user')
203 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
204 # Verify IDs
205 self.assertEqual(role_creds.tenant_id, '1234')
206 self.assertEqual(role_creds.user_id, '1234')
207
208 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400209 def test_all_cred_cleanup(self, MockRestClient):
210 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000211 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishcb058062014-03-13 18:27:07 -0400212 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400213 self._mock_assign_user_role()
214 roles_fix = self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400215 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
216 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000217 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400218 tenant_fix.cleanUp()
219 user_fix.cleanUp()
220 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
221 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000222 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400223 tenant_fix.cleanUp()
224 user_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400225 roles_fix.cleanUp()
Matthew Treinishcb058062014-03-13 18:27:07 -0400226 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
227 user_fix = self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400228 self._mock_list_roles('123456', 'admin')
229 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400230 user_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100231 'tempest.services.identity.v2.json.identity_client.'
Matthew Treinishcb058062014-03-13 18:27:07 -0400232 'IdentityClientJSON.delete_user')
233 tenant_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100234 'tempest.services.identity.v2.json.identity_client.'
Matthew Treinishcb058062014-03-13 18:27:07 -0400235 'IdentityClientJSON.delete_tenant')
236 iso_creds.clear_isolated_creds()
237 # Verify user delete calls
238 calls = user_mock.mock_calls
239 self.assertEqual(len(calls), 3)
240 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400241 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400242 self.assertIn('1234', args)
243 self.assertIn('12345', args)
244 self.assertIn('123456', args)
245 # Verify tenant delete calls
246 calls = tenant_mock.mock_calls
247 self.assertEqual(len(calls), 3)
248 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400249 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400250 self.assertIn('1234', args)
251 self.assertIn('12345', args)
252 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400253
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000254 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400255 def test_alt_creds(self, MockRestClient):
256 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000257 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishe6723262014-03-14 13:16:52 -0400258 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400259 self._mock_assign_user_role()
260 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400261 self._mock_user_create('1234', 'fake_alt_user')
262 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000263 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000264 self.assertEqual(alt_creds.username, 'fake_alt_user')
265 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000266 # Verify IDs
267 self.assertEqual(alt_creds.tenant_id, '1234')
268 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400269
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000270 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400271 def test_no_network_creation_with_config_set(self, MockRestClient):
272 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
273 iso_creds = isolated_creds.IsolatedCreds(name='test class',
274 password='fake_password')
275 self._mock_assign_user_role()
276 self._mock_list_role()
277 self._mock_user_create('1234', 'fake_prim_user')
278 self._mock_tenant_create('1234', 'fake_prim_tenant')
279 net = mock.patch.object(iso_creds.network_admin_client,
280 'delete_network')
281 net_mock = net.start()
282 subnet = mock.patch.object(iso_creds.network_admin_client,
283 'delete_subnet')
284 subnet_mock = subnet.start()
285 router = mock.patch.object(iso_creds.network_admin_client,
286 'delete_router')
287 router_mock = router.start()
288
289 primary_creds = iso_creds.get_primary_creds()
290 self.assertEqual(net_mock.mock_calls, [])
291 self.assertEqual(subnet_mock.mock_calls, [])
292 self.assertEqual(router_mock.mock_calls, [])
293 network = primary_creds.network
294 subnet = primary_creds.subnet
295 router = primary_creds.router
296 self.assertIsNone(network)
297 self.assertIsNone(subnet)
298 self.assertIsNone(router)
299
300 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400301 def test_network_creation(self, MockRestClient):
Andrea Frittolic3280152015-02-26 12:42:34 +0000302 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishe6723262014-03-14 13:16:52 -0400303 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400304 self._mock_assign_user_role()
305 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400306 self._mock_user_create('1234', 'fake_prim_user')
307 self._mock_tenant_create('1234', 'fake_prim_tenant')
308 self._mock_network_create(iso_creds, '1234', 'fake_net')
309 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
310 self._mock_router_create('1234', 'fake_router')
311 router_interface_mock = self.patch(
312 'tempest.services.network.json.network_client.NetworkClientJSON.'
313 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400314 primary_creds = iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400315 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400316 network = primary_creds.network
317 subnet = primary_creds.subnet
318 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400319 self.assertEqual(network['id'], '1234')
320 self.assertEqual(network['name'], 'fake_net')
321 self.assertEqual(subnet['id'], '1234')
322 self.assertEqual(subnet['name'], 'fake_subnet')
323 self.assertEqual(router['id'], '1234')
324 self.assertEqual(router['name'], 'fake_router')
325
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000326 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400327 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100328 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500329 return {"security_groups": [{"tenant_id": args['tenant_id'],
330 "name": args['name'],
331 "description": args['name'],
332 "security_group_rules": [],
333 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittolic3280152015-02-26 12:42:34 +0000334 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishe6723262014-03-14 13:16:52 -0400335 password='fake_password')
336 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400337 self._mock_assign_user_role()
338 roles_fix = self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400339 user_fix = self._mock_user_create('1234', 'fake_prim_user')
340 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
341 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
342 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
343 router_fix = self._mock_router_create('1234', 'fake_router')
344 router_interface_mock = self.patch(
345 'tempest.services.network.json.network_client.NetworkClientJSON.'
346 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000347 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400348 router_interface_mock.called_once_with('1234', '1234')
349 router_interface_mock.reset_mock()
350 tenant_fix.cleanUp()
351 user_fix.cleanUp()
352 net_fix.cleanUp()
353 subnet_fix.cleanUp()
354 router_fix.cleanUp()
355 # Create alternate tenant and network
356 user_fix = self._mock_user_create('12345', 'fake_alt_user')
357 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
358 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
359 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
360 'fake_alt_subnet')
361 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000362 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400363 router_interface_mock.called_once_with('12345', '12345')
364 router_interface_mock.reset_mock()
365 tenant_fix.cleanUp()
366 user_fix.cleanUp()
367 net_fix.cleanUp()
368 subnet_fix.cleanUp()
369 router_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400370 roles_fix.cleanUp()
Matthew Treinishe6723262014-03-14 13:16:52 -0400371 # Create admin tenant and networks
372 user_fix = self._mock_user_create('123456', 'fake_admin_user')
373 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
374 net_fix = self._mock_network_create(iso_creds, '123456',
375 'fake_admin_net')
376 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
377 'fake_admin_subnet')
378 router_fix = self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400379 self._mock_list_roles('123456', 'admin')
380 iso_creds.get_admin_creds()
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100381 self.patch('tempest.services.identity.v2.json.identity_client.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400382 'IdentityClientJSON.delete_user')
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100383 self.patch('tempest.services.identity.v2.json.identity_client.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400384 'IdentityClientJSON.delete_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400385 net = mock.patch.object(iso_creds.network_admin_client,
386 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400387 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400388 subnet = mock.patch.object(iso_creds.network_admin_client,
389 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400390 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400391 router = mock.patch.object(iso_creds.network_admin_client,
392 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400393 router_mock = router.start()
394 remove_router_interface_mock = self.patch(
395 'tempest.services.network.json.network_client.NetworkClientJSON.'
396 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400397 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400398 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400399 'list_ports',
400 return_value=return_values)
401
Matthew Treinishe6723262014-03-14 13:16:52 -0400402 port_list_mock.start()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100403 secgroup_list_mock = mock.patch.object(iso_creds.network_admin_client,
404 'list_security_groups',
405 side_effect=side_effect)
406 secgroup_list_mock.start()
407
408 return_values = (fake_http.fake_httplib({}, status=204), {})
409 remove_secgroup_mock = self.patch(
Ken'ichi Ohmichi88f12c12014-12-24 01:02:58 +0000410 'tempest.services.network.json.network_client.'
411 'NetworkClientJSON.delete', return_value=return_values)
Matthew Treinishe6723262014-03-14 13:16:52 -0400412 iso_creds.clear_isolated_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100413 # Verify default security group delete
414 calls = remove_secgroup_mock.mock_calls
415 self.assertEqual(len(calls), 3)
416 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400417 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100418 self.assertIn('v2.0/security-groups/sg-1234', args)
419 self.assertIn('v2.0/security-groups/sg-12345', args)
420 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400421 # Verify remove router interface calls
422 calls = remove_router_interface_mock.mock_calls
423 self.assertEqual(len(calls), 3)
424 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400425 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400426 self.assertIn(('1234', '1234'), args)
427 self.assertIn(('12345', '12345'), args)
428 self.assertIn(('123456', '123456'), args)
429 # Verify network delete calls
430 calls = net_mock.mock_calls
431 self.assertEqual(len(calls), 3)
432 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400433 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400434 self.assertIn('1234', args)
435 self.assertIn('12345', args)
436 self.assertIn('123456', args)
437 # Verify subnet delete calls
438 calls = subnet_mock.mock_calls
439 self.assertEqual(len(calls), 3)
440 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400441 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400442 self.assertIn('1234', args)
443 self.assertIn('12345', args)
444 self.assertIn('123456', args)
445 # Verify router delete calls
446 calls = router_mock.mock_calls
447 self.assertEqual(len(calls), 3)
448 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400449 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400450 self.assertIn('1234', args)
451 self.assertIn('12345', args)
452 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400453
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000454 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400455 def test_network_alt_creation(self, MockRestClient):
Andrea Frittolic3280152015-02-26 12:42:34 +0000456 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400457 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400458 self._mock_assign_user_role()
459 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400460 self._mock_user_create('1234', 'fake_alt_user')
461 self._mock_tenant_create('1234', 'fake_alt_tenant')
462 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
463 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
464 self._mock_router_create('1234', 'fake_alt_router')
465 router_interface_mock = self.patch(
466 'tempest.services.network.json.network_client.NetworkClientJSON.'
467 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400468 alt_creds = iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400469 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400470 network = alt_creds.network
471 subnet = alt_creds.subnet
472 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400473 self.assertEqual(network['id'], '1234')
474 self.assertEqual(network['name'], 'fake_alt_net')
475 self.assertEqual(subnet['id'], '1234')
476 self.assertEqual(subnet['name'], 'fake_alt_subnet')
477 self.assertEqual(router['id'], '1234')
478 self.assertEqual(router['name'], 'fake_alt_router')
479
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000480 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400481 def test_network_admin_creation(self, MockRestClient):
Andrea Frittolic3280152015-02-26 12:42:34 +0000482 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400483 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400484 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400485 self._mock_user_create('1234', 'fake_admin_user')
486 self._mock_tenant_create('1234', 'fake_admin_tenant')
487 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
488 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
489 self._mock_router_create('1234', 'fake_admin_router')
490 router_interface_mock = self.patch(
491 'tempest.services.network.json.network_client.NetworkClientJSON.'
492 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400493 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400494 admin_creds = iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400495 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400496 network = admin_creds.network
497 subnet = admin_creds.subnet
498 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400499 self.assertEqual(network['id'], '1234')
500 self.assertEqual(network['name'], 'fake_admin_net')
501 self.assertEqual(subnet['id'], '1234')
502 self.assertEqual(subnet['name'], 'fake_admin_subnet')
503 self.assertEqual(router['id'], '1234')
504 self.assertEqual(router['name'], 'fake_admin_router')
505
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000506 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400507 def test_no_network_resources(self, MockRestClient):
508 net_dict = {
509 'network': False,
510 'router': False,
511 'subnet': False,
512 'dhcp': False,
513 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000514 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400515 password='fake_password',
516 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400517 self._mock_assign_user_role()
518 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400519 self._mock_user_create('1234', 'fake_prim_user')
520 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400521 net = mock.patch.object(iso_creds.network_admin_client,
522 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400523 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400524 subnet = mock.patch.object(iso_creds.network_admin_client,
525 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400526 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400527 router = mock.patch.object(iso_creds.network_admin_client,
528 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400529 router_mock = router.start()
530
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400531 primary_creds = iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400532 self.assertEqual(net_mock.mock_calls, [])
533 self.assertEqual(subnet_mock.mock_calls, [])
534 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400535 network = primary_creds.network
536 subnet = primary_creds.subnet
537 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400538 self.assertIsNone(network)
539 self.assertIsNone(subnet)
540 self.assertIsNone(router)
541
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000542 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400543 def test_router_without_network(self, MockRestClient):
544 net_dict = {
545 'network': False,
546 'router': True,
547 'subnet': False,
548 'dhcp': False,
549 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000550 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400551 password='fake_password',
552 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400553 self._mock_assign_user_role()
554 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400555 self._mock_user_create('1234', 'fake_prim_user')
556 self._mock_tenant_create('1234', 'fake_prim_tenant')
557 self.assertRaises(exceptions.InvalidConfiguration,
558 iso_creds.get_primary_creds)
559
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000560 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400561 def test_subnet_without_network(self, MockRestClient):
562 net_dict = {
563 'network': False,
564 'router': False,
565 'subnet': True,
566 'dhcp': False,
567 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000568 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400569 password='fake_password',
570 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400571 self._mock_assign_user_role()
572 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400573 self._mock_user_create('1234', 'fake_prim_user')
574 self._mock_tenant_create('1234', 'fake_prim_tenant')
575 self.assertRaises(exceptions.InvalidConfiguration,
576 iso_creds.get_primary_creds)
577
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000578 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400579 def test_dhcp_without_subnet(self, MockRestClient):
580 net_dict = {
581 'network': False,
582 'router': False,
583 'subnet': False,
584 'dhcp': True,
585 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000586 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400587 password='fake_password',
588 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400589 self._mock_assign_user_role()
590 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400591 self._mock_user_create('1234', 'fake_prim_user')
592 self._mock_tenant_create('1234', 'fake_prim_tenant')
593 self.assertRaises(exceptions.InvalidConfiguration,
594 iso_creds.get_primary_creds)