blob: 82cbde9048af81ea14db8784f2581d1b6aec65b1 [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
Matthew Treinishcb058062014-03-13 18:27:07 -040018
19from tempest.common import isolated_creds
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000020from tempest.common import service_client
Matthew Treinishcb058062014-03-13 18:27:07 -040021from tempest import config
Matthew Treinish23433a02014-03-17 16:43:50 -040022from tempest import exceptions
Jamie Lennoxc429e6a2015-02-24 10:42:42 +110023from tempest.services.identity.v2.json import identity_client as \
24 json_iden_client
25from tempest.services.identity.v2.json import token_client as json_token_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 Treinish976e8df2014-12-19 14:21:54 -0500199 self.assertIn(('1234', '1234', '1234'), args)
200 self.assertIn(('1234', '1234', '12345'), args)
201 self.assertEqual(role_creds.username, 'fake_role_user')
202 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
203 # Verify IDs
204 self.assertEqual(role_creds.tenant_id, '1234')
205 self.assertEqual(role_creds.user_id, '1234')
206
207 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400208 def test_all_cred_cleanup(self, MockRestClient):
209 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000210 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishcb058062014-03-13 18:27:07 -0400211 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400212 self._mock_assign_user_role()
213 roles_fix = self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400214 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
215 user_fix = self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000216 iso_creds.get_primary_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400217 tenant_fix.cleanUp()
218 user_fix.cleanUp()
219 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
220 user_fix = self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000221 iso_creds.get_alt_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400222 tenant_fix.cleanUp()
223 user_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400224 roles_fix.cleanUp()
Matthew Treinishcb058062014-03-13 18:27:07 -0400225 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
226 user_fix = self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400227 self._mock_list_roles('123456', 'admin')
228 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400229 user_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100230 'tempest.services.identity.v2.json.identity_client.'
Matthew Treinishcb058062014-03-13 18:27:07 -0400231 'IdentityClientJSON.delete_user')
232 tenant_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100233 'tempest.services.identity.v2.json.identity_client.'
Matthew Treinishcb058062014-03-13 18:27:07 -0400234 'IdentityClientJSON.delete_tenant')
235 iso_creds.clear_isolated_creds()
236 # Verify user delete calls
237 calls = user_mock.mock_calls
238 self.assertEqual(len(calls), 3)
239 args = map(lambda x: x[1][0], calls)
240 self.assertIn('1234', args)
241 self.assertIn('12345', args)
242 self.assertIn('123456', args)
243 # Verify tenant delete calls
244 calls = tenant_mock.mock_calls
245 self.assertEqual(len(calls), 3)
246 args = map(lambda x: x[1][0], calls)
247 self.assertIn('1234', args)
248 self.assertIn('12345', args)
249 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400250
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000251 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400252 def test_alt_creds(self, MockRestClient):
253 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittolic3280152015-02-26 12:42:34 +0000254 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishe6723262014-03-14 13:16:52 -0400255 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400256 self._mock_assign_user_role()
257 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400258 self._mock_user_create('1234', 'fake_alt_user')
259 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000260 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000261 self.assertEqual(alt_creds.username, 'fake_alt_user')
262 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000263 # Verify IDs
264 self.assertEqual(alt_creds.tenant_id, '1234')
265 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400266
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000267 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400268 def test_network_creation(self, MockRestClient):
Andrea Frittolic3280152015-02-26 12:42:34 +0000269 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishe6723262014-03-14 13:16:52 -0400270 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400271 self._mock_assign_user_role()
272 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400273 self._mock_user_create('1234', 'fake_prim_user')
274 self._mock_tenant_create('1234', 'fake_prim_tenant')
275 self._mock_network_create(iso_creds, '1234', 'fake_net')
276 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
277 self._mock_router_create('1234', 'fake_router')
278 router_interface_mock = self.patch(
279 'tempest.services.network.json.network_client.NetworkClientJSON.'
280 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000281 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400282 router_interface_mock.called_once_with('1234', '1234')
283 network = iso_creds.get_primary_network()
284 subnet = iso_creds.get_primary_subnet()
285 router = iso_creds.get_primary_router()
286 self.assertEqual(network['id'], '1234')
287 self.assertEqual(network['name'], 'fake_net')
288 self.assertEqual(subnet['id'], '1234')
289 self.assertEqual(subnet['name'], 'fake_subnet')
290 self.assertEqual(router['id'], '1234')
291 self.assertEqual(router['name'], 'fake_router')
292
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000293 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400294 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100295 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500296 return {"security_groups": [{"tenant_id": args['tenant_id'],
297 "name": args['name'],
298 "description": args['name'],
299 "security_group_rules": [],
300 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittolic3280152015-02-26 12:42:34 +0000301 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinishe6723262014-03-14 13:16:52 -0400302 password='fake_password')
303 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400304 self._mock_assign_user_role()
305 roles_fix = self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400306 user_fix = self._mock_user_create('1234', 'fake_prim_user')
307 tenant_fix = self._mock_tenant_create('1234', 'fake_prim_tenant')
308 net_fix = self._mock_network_create(iso_creds, '1234', 'fake_net')
309 subnet_fix = self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
310 router_fix = 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 Frittoli9612e812014-03-13 10:57:26 +0000314 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400315 router_interface_mock.called_once_with('1234', '1234')
316 router_interface_mock.reset_mock()
317 tenant_fix.cleanUp()
318 user_fix.cleanUp()
319 net_fix.cleanUp()
320 subnet_fix.cleanUp()
321 router_fix.cleanUp()
322 # Create alternate tenant and network
323 user_fix = self._mock_user_create('12345', 'fake_alt_user')
324 tenant_fix = self._mock_tenant_create('12345', 'fake_alt_tenant')
325 net_fix = self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
326 subnet_fix = self._mock_subnet_create(iso_creds, '12345',
327 'fake_alt_subnet')
328 router_fix = self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000329 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400330 router_interface_mock.called_once_with('12345', '12345')
331 router_interface_mock.reset_mock()
332 tenant_fix.cleanUp()
333 user_fix.cleanUp()
334 net_fix.cleanUp()
335 subnet_fix.cleanUp()
336 router_fix.cleanUp()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400337 roles_fix.cleanUp()
Matthew Treinishe6723262014-03-14 13:16:52 -0400338 # Create admin tenant and networks
339 user_fix = self._mock_user_create('123456', 'fake_admin_user')
340 tenant_fix = self._mock_tenant_create('123456', 'fake_admin_tenant')
341 net_fix = self._mock_network_create(iso_creds, '123456',
342 'fake_admin_net')
343 subnet_fix = self._mock_subnet_create(iso_creds, '123456',
344 'fake_admin_subnet')
345 router_fix = self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400346 self._mock_list_roles('123456', 'admin')
347 iso_creds.get_admin_creds()
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100348 self.patch('tempest.services.identity.v2.json.identity_client.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400349 'IdentityClientJSON.delete_user')
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100350 self.patch('tempest.services.identity.v2.json.identity_client.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400351 'IdentityClientJSON.delete_tenant')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400352 net = mock.patch.object(iso_creds.network_admin_client,
353 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400354 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400355 subnet = mock.patch.object(iso_creds.network_admin_client,
356 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400357 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400358 router = mock.patch.object(iso_creds.network_admin_client,
359 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400360 router_mock = router.start()
361 remove_router_interface_mock = self.patch(
362 'tempest.services.network.json.network_client.NetworkClientJSON.'
363 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400364 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400365 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400366 'list_ports',
367 return_value=return_values)
368
Matthew Treinishe6723262014-03-14 13:16:52 -0400369 port_list_mock.start()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100370 secgroup_list_mock = mock.patch.object(iso_creds.network_admin_client,
371 'list_security_groups',
372 side_effect=side_effect)
373 secgroup_list_mock.start()
374
375 return_values = (fake_http.fake_httplib({}, status=204), {})
376 remove_secgroup_mock = self.patch(
Ken'ichi Ohmichi88f12c12014-12-24 01:02:58 +0000377 'tempest.services.network.json.network_client.'
378 'NetworkClientJSON.delete', return_value=return_values)
Matthew Treinishe6723262014-03-14 13:16:52 -0400379 iso_creds.clear_isolated_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100380 # Verify default security group delete
381 calls = remove_secgroup_mock.mock_calls
382 self.assertEqual(len(calls), 3)
383 args = map(lambda x: x[1][0], calls)
384 self.assertIn('v2.0/security-groups/sg-1234', args)
385 self.assertIn('v2.0/security-groups/sg-12345', args)
386 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400387 # Verify remove router interface calls
388 calls = remove_router_interface_mock.mock_calls
389 self.assertEqual(len(calls), 3)
390 args = map(lambda x: x[1], calls)
391 self.assertIn(('1234', '1234'), args)
392 self.assertIn(('12345', '12345'), args)
393 self.assertIn(('123456', '123456'), args)
394 # Verify network delete calls
395 calls = net_mock.mock_calls
396 self.assertEqual(len(calls), 3)
397 args = map(lambda x: x[1][0], calls)
398 self.assertIn('1234', args)
399 self.assertIn('12345', args)
400 self.assertIn('123456', args)
401 # Verify subnet delete calls
402 calls = subnet_mock.mock_calls
403 self.assertEqual(len(calls), 3)
404 args = map(lambda x: x[1][0], calls)
405 self.assertIn('1234', args)
406 self.assertIn('12345', args)
407 self.assertIn('123456', args)
408 # Verify router delete calls
409 calls = router_mock.mock_calls
410 self.assertEqual(len(calls), 3)
411 args = map(lambda x: x[1][0], calls)
412 self.assertIn('1234', args)
413 self.assertIn('12345', args)
414 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400415
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000416 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400417 def test_network_alt_creation(self, MockRestClient):
Andrea Frittolic3280152015-02-26 12:42:34 +0000418 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400419 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400420 self._mock_assign_user_role()
421 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400422 self._mock_user_create('1234', 'fake_alt_user')
423 self._mock_tenant_create('1234', 'fake_alt_tenant')
424 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
425 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
426 self._mock_router_create('1234', 'fake_alt_router')
427 router_interface_mock = self.patch(
428 'tempest.services.network.json.network_client.NetworkClientJSON.'
429 'add_router_interface_with_subnet_id')
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000430 iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400431 router_interface_mock.called_once_with('1234', '1234')
432 network = iso_creds.get_alt_network()
433 subnet = iso_creds.get_alt_subnet()
434 router = iso_creds.get_alt_router()
435 self.assertEqual(network['id'], '1234')
436 self.assertEqual(network['name'], 'fake_alt_net')
437 self.assertEqual(subnet['id'], '1234')
438 self.assertEqual(subnet['name'], 'fake_alt_subnet')
439 self.assertEqual(router['id'], '1234')
440 self.assertEqual(router['name'], 'fake_alt_router')
441
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000442 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400443 def test_network_admin_creation(self, MockRestClient):
Andrea Frittolic3280152015-02-26 12:42:34 +0000444 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400445 password='fake_password')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400446 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400447 self._mock_user_create('1234', 'fake_admin_user')
448 self._mock_tenant_create('1234', 'fake_admin_tenant')
449 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
450 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
451 self._mock_router_create('1234', 'fake_admin_router')
452 router_interface_mock = self.patch(
453 'tempest.services.network.json.network_client.NetworkClientJSON.'
454 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400455 self._mock_list_roles('123456', 'admin')
456 iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400457 router_interface_mock.called_once_with('1234', '1234')
458 network = iso_creds.get_admin_network()
459 subnet = iso_creds.get_admin_subnet()
460 router = iso_creds.get_admin_router()
461 self.assertEqual(network['id'], '1234')
462 self.assertEqual(network['name'], 'fake_admin_net')
463 self.assertEqual(subnet['id'], '1234')
464 self.assertEqual(subnet['name'], 'fake_admin_subnet')
465 self.assertEqual(router['id'], '1234')
466 self.assertEqual(router['name'], 'fake_admin_router')
467
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000468 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400469 def test_no_network_resources(self, MockRestClient):
470 net_dict = {
471 'network': False,
472 'router': False,
473 'subnet': False,
474 'dhcp': False,
475 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000476 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400477 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')
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400483 net = mock.patch.object(iso_creds.network_admin_client,
484 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400485 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400486 subnet = mock.patch.object(iso_creds.network_admin_client,
487 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400488 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400489 router = mock.patch.object(iso_creds.network_admin_client,
490 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400491 router_mock = router.start()
492
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000493 iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400494 self.assertEqual(net_mock.mock_calls, [])
495 self.assertEqual(subnet_mock.mock_calls, [])
496 self.assertEqual(router_mock.mock_calls, [])
497 network = iso_creds.get_primary_network()
498 subnet = iso_creds.get_primary_subnet()
499 router = iso_creds.get_primary_router()
500 self.assertIsNone(network)
501 self.assertIsNone(subnet)
502 self.assertIsNone(router)
503
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000504 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400505 def test_router_without_network(self, MockRestClient):
506 net_dict = {
507 'network': False,
508 'router': True,
509 'subnet': False,
510 'dhcp': False,
511 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000512 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400513 password='fake_password',
514 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400515 self._mock_assign_user_role()
516 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400517 self._mock_user_create('1234', 'fake_prim_user')
518 self._mock_tenant_create('1234', 'fake_prim_tenant')
519 self.assertRaises(exceptions.InvalidConfiguration,
520 iso_creds.get_primary_creds)
521
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000522 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400523 def test_subnet_without_network(self, MockRestClient):
524 net_dict = {
525 'network': False,
526 'router': False,
527 'subnet': True,
528 'dhcp': False,
529 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000530 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400531 password='fake_password',
532 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400533 self._mock_assign_user_role()
534 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400535 self._mock_user_create('1234', 'fake_prim_user')
536 self._mock_tenant_create('1234', 'fake_prim_tenant')
537 self.assertRaises(exceptions.InvalidConfiguration,
538 iso_creds.get_primary_creds)
539
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000540 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400541 def test_dhcp_without_subnet(self, MockRestClient):
542 net_dict = {
543 'network': False,
544 'router': False,
545 'subnet': False,
546 'dhcp': True,
547 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000548 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400549 password='fake_password',
550 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400551 self._mock_assign_user_role()
552 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400553 self._mock_user_create('1234', 'fake_prim_user')
554 self._mock_tenant_create('1234', 'fake_prim_tenant')
555 self.assertRaises(exceptions.InvalidConfiguration,
556 iso_creds.get_primary_creds)