blob: 5aba2c700110c67e3204750072694f09577f1a93 [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)
Ken'ichi Ohmichi96e72792015-09-09 04:05:41 +000040 self.stubs.Set(json_token_client.TokenClient, '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,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000049 json_iden_client.IdentityClient))
Matthew Treinishcb058062014-03-13 18:27:07 -040050 self.assertTrue(isinstance(iso_creds.network_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000051 json_network_client.NetworkClient))
Matthew Treinishcb058062014-03-13 18:27:07 -040052
Matthew Treinishcb058062014-03-13 18:27:07 -040053 def _mock_user_create(self, id, name):
54 user_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000055 json_iden_client.IdentityClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040056 'create_user',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000057 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053058 (200, {'user': {'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(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000063 json_iden_client.IdentityClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040064 'create_tenant',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000065 return_value=(service_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053066 (200, {'tenant': {'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(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000071 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040072 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053073 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050074 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053075 {'roles': [{'id': id, 'name': name},
76 {'id': '1', 'name': 'FakeRole'},
77 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040078 return roles_fix
79
Matthew Treinish976e8df2014-12-19 14:21:54 -050080 def _mock_list_2_roles(self):
81 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000082 json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -050083 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053084 return_value=(service_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -050085 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053086 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -050087 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053088 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -050089 return roles_fix
90
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040091 def _mock_assign_user_role(self):
92 tenant_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000093 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040094 'assign_user_role',
Ken'ichi Ohmichia6ac2422015-01-13 01:09:39 +000095 return_value=(service_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050096 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040097 return tenant_fix
98
99 def _mock_list_role(self):
100 roles_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000101 json_iden_client.IdentityClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400102 'list_roles',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530103 return_value=(service_client.ResponseBody
104 (200, {'roles': [{'id': '1',
105 'name': 'FakeRole'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400106 return roles_fix
107
Andrea Frittoli32d74992015-03-06 17:01:07 +0000108 def _mock_list_ec2_credentials(self, user_id, tenant_id):
109 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000110 json_iden_client.IdentityClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000111 'list_user_ec2_credentials',
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530112 return_value=(service_client.ResponseBody
113 (200, {'credentials': [{
114 'access': 'fake_access',
115 'secret': 'fake_secret',
116 'tenant_id': tenant_id,
117 'user_id': user_id,
118 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000119 return ec2_creds_fix
120
Matthew Treinishe6723262014-03-14 13:16:52 -0400121 def _mock_network_create(self, iso_creds, id, name):
122 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400123 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400124 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500125 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400126 return net_fix
127
128 def _mock_subnet_create(self, iso_creds, id, name):
129 subnet_fix = self.useFixture(mockpatch.PatchObject(
130 iso_creds.network_admin_client,
131 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500132 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400133 return subnet_fix
134
135 def _mock_router_create(self, id, name):
136 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000137 json_network_client.NetworkClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400138 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500139 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400140 return router_fix
141
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000142 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400143 def test_primary_creds(self, MockRestClient):
144 cfg.CONF.set_default('neutron', False, 'service_available')
LingxianKong9c713d22015-06-09 15:19:55 +0800145 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400146 self._mock_assign_user_role()
147 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400148 self._mock_tenant_create('1234', 'fake_prim_tenant')
149 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000150 primary_creds = iso_creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000151 self.assertEqual(primary_creds.username, 'fake_prim_user')
152 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000153 # Verify IDs
154 self.assertEqual(primary_creds.tenant_id, '1234')
155 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400156
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000157 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400158 def test_admin_creds(self, MockRestClient):
159 cfg.CONF.set_default('neutron', False, 'service_available')
LingxianKong9c713d22015-06-09 15:19:55 +0800160 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400161 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400162 self._mock_user_create('1234', 'fake_admin_user')
163 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400164
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000165 user_mock = mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400166 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400167 user_mock.start()
168 self.addCleanup(user_mock.stop)
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000169 with mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400170 'assign_user_role') as user_mock:
Andrea Frittoli422fbdf2014-03-20 10:05:18 +0000171 admin_creds = iso_creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400172 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400173 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000174 self.assertEqual(admin_creds.username, 'fake_admin_user')
175 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000176 # Verify IDs
177 self.assertEqual(admin_creds.tenant_id, '1234')
178 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400179
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000180 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500181 def test_role_creds(self, MockRestClient):
182 cfg.CONF.set_default('neutron', False, 'service_available')
LingxianKong9c713d22015-06-09 15:19:55 +0800183 iso_creds = isolated_creds.IsolatedCreds('v2', 'test class')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500184 self._mock_list_2_roles()
185 self._mock_user_create('1234', 'fake_role_user')
186 self._mock_tenant_create('1234', 'fake_role_tenant')
187
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000188 user_mock = mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500189 'assign_user_role')
190 user_mock.start()
191 self.addCleanup(user_mock.stop)
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000192 with mock.patch.object(json_iden_client.IdentityClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500193 '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')
LingxianKong9c713d22015-06-09 15:19:55 +0800211 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400212 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400213 self._mock_list_role()
214 self._mock_tenant_create('1234', 'fake_prim_tenant')
215 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000216 iso_creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400217 self._mock_tenant_create('12345', 'fake_alt_tenant')
218 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000219 iso_creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400220 self._mock_tenant_create('123456', 'fake_admin_tenant')
221 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400222 self._mock_list_roles('123456', 'admin')
223 iso_creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400224 user_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100225 'tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000226 'IdentityClient.delete_user')
Matthew Treinishcb058062014-03-13 18:27:07 -0400227 tenant_mock = self.patch(
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100228 'tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000229 'IdentityClient.delete_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400230 iso_creds.clear_isolated_creds()
231 # Verify user delete calls
232 calls = user_mock.mock_calls
233 self.assertEqual(len(calls), 3)
234 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400235 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400236 self.assertIn('1234', args)
237 self.assertIn('12345', args)
238 self.assertIn('123456', args)
239 # Verify tenant delete calls
240 calls = tenant_mock.mock_calls
241 self.assertEqual(len(calls), 3)
242 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400243 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400244 self.assertIn('1234', args)
245 self.assertIn('12345', args)
246 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400247
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000248 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400249 def test_alt_creds(self, MockRestClient):
250 cfg.CONF.set_default('neutron', False, 'service_available')
LingxianKong9c713d22015-06-09 15:19:55 +0800251 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400252 self._mock_assign_user_role()
253 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400254 self._mock_user_create('1234', 'fake_alt_user')
255 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000256 alt_creds = iso_creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000257 self.assertEqual(alt_creds.username, 'fake_alt_user')
258 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000259 # Verify IDs
260 self.assertEqual(alt_creds.tenant_id, '1234')
261 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400262
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000263 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400264 def test_no_network_creation_with_config_set(self, MockRestClient):
265 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
LingxianKong9c713d22015-06-09 15:19:55 +0800266 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Matthew Treinish2219d382015-04-24 10:33:04 -0400267 self._mock_assign_user_role()
268 self._mock_list_role()
269 self._mock_user_create('1234', 'fake_prim_user')
270 self._mock_tenant_create('1234', 'fake_prim_tenant')
John Warren94d8faf2015-09-15 12:22:24 -0400271 net = mock.patch.object(iso_creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400272 'delete_network')
273 net_mock = net.start()
274 subnet = mock.patch.object(iso_creds.network_admin_client,
275 'delete_subnet')
276 subnet_mock = subnet.start()
277 router = mock.patch.object(iso_creds.network_admin_client,
278 'delete_router')
279 router_mock = router.start()
280
281 primary_creds = iso_creds.get_primary_creds()
282 self.assertEqual(net_mock.mock_calls, [])
283 self.assertEqual(subnet_mock.mock_calls, [])
284 self.assertEqual(router_mock.mock_calls, [])
285 network = primary_creds.network
286 subnet = primary_creds.subnet
287 router = primary_creds.router
288 self.assertIsNone(network)
289 self.assertIsNone(subnet)
290 self.assertIsNone(router)
291
292 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400293 def test_network_creation(self, MockRestClient):
LingxianKong9c713d22015-06-09 15:19:55 +0800294 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400295 self._mock_assign_user_role()
296 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400297 self._mock_user_create('1234', 'fake_prim_user')
298 self._mock_tenant_create('1234', 'fake_prim_tenant')
299 self._mock_network_create(iso_creds, '1234', 'fake_net')
300 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
301 self._mock_router_create('1234', 'fake_router')
302 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000303 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400304 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400305 primary_creds = iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400306 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400307 network = primary_creds.network
308 subnet = primary_creds.subnet
309 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400310 self.assertEqual(network['id'], '1234')
311 self.assertEqual(network['name'], 'fake_net')
312 self.assertEqual(subnet['id'], '1234')
313 self.assertEqual(subnet['name'], 'fake_subnet')
314 self.assertEqual(router['id'], '1234')
315 self.assertEqual(router['name'], 'fake_router')
316
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000317 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400318 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100319 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500320 return {"security_groups": [{"tenant_id": args['tenant_id'],
321 "name": args['name'],
322 "description": args['name'],
323 "security_group_rules": [],
324 "id": "sg-%s" % args['tenant_id']}]}
LingxianKong9c713d22015-06-09 15:19:55 +0800325 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Matthew Treinishe6723262014-03-14 13:16:52 -0400326 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400327 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400328 self._mock_list_role()
329 self._mock_user_create('1234', 'fake_prim_user')
330 self._mock_tenant_create('1234', 'fake_prim_tenant')
331 self._mock_network_create(iso_creds, '1234', 'fake_net')
332 self._mock_subnet_create(iso_creds, '1234', 'fake_subnet')
333 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400334 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000335 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400336 'add_router_interface_with_subnet_id')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000337 iso_creds.get_primary_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400338 router_interface_mock.called_once_with('1234', '1234')
339 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400340 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400341 self._mock_user_create('12345', 'fake_alt_user')
342 self._mock_tenant_create('12345', 'fake_alt_tenant')
343 self._mock_network_create(iso_creds, '12345', 'fake_alt_net')
344 self._mock_subnet_create(iso_creds, '12345',
345 'fake_alt_subnet')
346 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000347 iso_creds.get_alt_creds()
Matthew Treinishe6723262014-03-14 13:16:52 -0400348 router_interface_mock.called_once_with('12345', '12345')
349 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400350 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400351 self._mock_user_create('123456', 'fake_admin_user')
352 self._mock_tenant_create('123456', 'fake_admin_tenant')
353 self._mock_network_create(iso_creds, '123456',
354 'fake_admin_net')
355 self._mock_subnet_create(iso_creds, '123456',
356 'fake_admin_subnet')
357 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400358 self._mock_list_roles('123456', 'admin')
359 iso_creds.get_admin_creds()
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100360 self.patch('tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000361 'IdentityClient.delete_user')
Jamie Lennoxc429e6a2015-02-24 10:42:42 +1100362 self.patch('tempest.services.identity.v2.json.identity_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000363 'IdentityClient.delete_tenant')
John Warren94d8faf2015-09-15 12:22:24 -0400364 net = mock.patch.object(iso_creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400365 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400366 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400367 subnet = mock.patch.object(iso_creds.network_admin_client,
368 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400369 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400370 router = mock.patch.object(iso_creds.network_admin_client,
371 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400372 router_mock = router.start()
373 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000374 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinishe6723262014-03-14 13:16:52 -0400375 'remove_router_interface_with_subnet_id')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400376 return_values = ({'status': 200}, {'ports': []})
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400377 port_list_mock = mock.patch.object(iso_creds.network_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400378 'list_ports',
379 return_value=return_values)
380
Matthew Treinishe6723262014-03-14 13:16:52 -0400381 port_list_mock.start()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100382 secgroup_list_mock = mock.patch.object(iso_creds.network_admin_client,
383 'list_security_groups',
384 side_effect=side_effect)
385 secgroup_list_mock.start()
386
387 return_values = (fake_http.fake_httplib({}, status=204), {})
388 remove_secgroup_mock = self.patch(
Ken'ichi Ohmichi88f12c12014-12-24 01:02:58 +0000389 'tempest.services.network.json.network_client.'
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000390 'NetworkClient.delete', return_value=return_values)
Matthew Treinishe6723262014-03-14 13:16:52 -0400391 iso_creds.clear_isolated_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100392 # Verify default security group delete
393 calls = remove_secgroup_mock.mock_calls
394 self.assertEqual(len(calls), 3)
395 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400396 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100397 self.assertIn('v2.0/security-groups/sg-1234', args)
398 self.assertIn('v2.0/security-groups/sg-12345', args)
399 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400400 # Verify remove router interface calls
401 calls = remove_router_interface_mock.mock_calls
402 self.assertEqual(len(calls), 3)
403 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400404 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400405 self.assertIn(('1234', '1234'), args)
406 self.assertIn(('12345', '12345'), args)
407 self.assertIn(('123456', '123456'), args)
408 # Verify network delete calls
409 calls = net_mock.mock_calls
410 self.assertEqual(len(calls), 3)
411 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400412 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400413 self.assertIn('1234', args)
414 self.assertIn('12345', args)
415 self.assertIn('123456', args)
416 # Verify subnet delete calls
417 calls = subnet_mock.mock_calls
418 self.assertEqual(len(calls), 3)
419 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400420 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400421 self.assertIn('1234', args)
422 self.assertIn('12345', args)
423 self.assertIn('123456', args)
424 # Verify router delete calls
425 calls = router_mock.mock_calls
426 self.assertEqual(len(calls), 3)
427 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400428 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400429 self.assertIn('1234', args)
430 self.assertIn('12345', args)
431 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400432
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000433 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400434 def test_network_alt_creation(self, MockRestClient):
LingxianKong9c713d22015-06-09 15:19:55 +0800435 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400436 self._mock_assign_user_role()
437 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400438 self._mock_user_create('1234', 'fake_alt_user')
439 self._mock_tenant_create('1234', 'fake_alt_tenant')
440 self._mock_network_create(iso_creds, '1234', 'fake_alt_net')
441 self._mock_subnet_create(iso_creds, '1234', 'fake_alt_subnet')
442 self._mock_router_create('1234', 'fake_alt_router')
443 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000444 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinish23433a02014-03-17 16:43:50 -0400445 'add_router_interface_with_subnet_id')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400446 alt_creds = iso_creds.get_alt_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400447 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400448 network = alt_creds.network
449 subnet = alt_creds.subnet
450 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400451 self.assertEqual(network['id'], '1234')
452 self.assertEqual(network['name'], 'fake_alt_net')
453 self.assertEqual(subnet['id'], '1234')
454 self.assertEqual(subnet['name'], 'fake_alt_subnet')
455 self.assertEqual(router['id'], '1234')
456 self.assertEqual(router['name'], 'fake_alt_router')
457
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000458 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400459 def test_network_admin_creation(self, MockRestClient):
LingxianKong9c713d22015-06-09 15:19:55 +0800460 iso_creds = isolated_creds.IsolatedCreds(name='test class')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400461 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400462 self._mock_user_create('1234', 'fake_admin_user')
463 self._mock_tenant_create('1234', 'fake_admin_tenant')
464 self._mock_network_create(iso_creds, '1234', 'fake_admin_net')
465 self._mock_subnet_create(iso_creds, '1234', 'fake_admin_subnet')
466 self._mock_router_create('1234', 'fake_admin_router')
467 router_interface_mock = self.patch(
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +0000468 'tempest.services.network.json.network_client.NetworkClient.'
Matthew Treinish23433a02014-03-17 16:43:50 -0400469 'add_router_interface_with_subnet_id')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400470 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400471 admin_creds = iso_creds.get_admin_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400472 router_interface_mock.called_once_with('1234', '1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400473 network = admin_creds.network
474 subnet = admin_creds.subnet
475 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400476 self.assertEqual(network['id'], '1234')
477 self.assertEqual(network['name'], 'fake_admin_net')
478 self.assertEqual(subnet['id'], '1234')
479 self.assertEqual(subnet['name'], 'fake_admin_subnet')
480 self.assertEqual(router['id'], '1234')
481 self.assertEqual(router['name'], 'fake_admin_router')
482
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000483 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400484 def test_no_network_resources(self, MockRestClient):
485 net_dict = {
486 'network': False,
487 'router': False,
488 'subnet': False,
489 'dhcp': False,
490 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000491 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400492 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400493 self._mock_assign_user_role()
494 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400495 self._mock_user_create('1234', 'fake_prim_user')
496 self._mock_tenant_create('1234', 'fake_prim_tenant')
John Warren94d8faf2015-09-15 12:22:24 -0400497 net = mock.patch.object(iso_creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400498 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400499 net_mock = net.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400500 subnet = mock.patch.object(iso_creds.network_admin_client,
501 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400502 subnet_mock = subnet.start()
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400503 router = mock.patch.object(iso_creds.network_admin_client,
504 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400505 router_mock = router.start()
506
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400507 primary_creds = iso_creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400508 self.assertEqual(net_mock.mock_calls, [])
509 self.assertEqual(subnet_mock.mock_calls, [])
510 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400511 network = primary_creds.network
512 subnet = primary_creds.subnet
513 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400514 self.assertIsNone(network)
515 self.assertIsNone(subnet)
516 self.assertIsNone(router)
517
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000518 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400519 def test_router_without_network(self, MockRestClient):
520 net_dict = {
521 'network': False,
522 'router': True,
523 'subnet': False,
524 'dhcp': False,
525 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000526 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400527 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400528 self._mock_assign_user_role()
529 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400530 self._mock_user_create('1234', 'fake_prim_user')
531 self._mock_tenant_create('1234', 'fake_prim_tenant')
532 self.assertRaises(exceptions.InvalidConfiguration,
533 iso_creds.get_primary_creds)
534
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000535 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400536 def test_subnet_without_network(self, MockRestClient):
537 net_dict = {
538 'network': False,
539 'router': False,
540 'subnet': True,
541 'dhcp': False,
542 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000543 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400544 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400545 self._mock_assign_user_role()
546 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400547 self._mock_user_create('1234', 'fake_prim_user')
548 self._mock_tenant_create('1234', 'fake_prim_tenant')
549 self.assertRaises(exceptions.InvalidConfiguration,
550 iso_creds.get_primary_creds)
551
Ken'ichi Ohmichi79aede12015-01-17 08:19:47 +0000552 @mock.patch('tempest_lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400553 def test_dhcp_without_subnet(self, MockRestClient):
554 net_dict = {
555 'network': False,
556 'router': False,
557 'subnet': False,
558 'dhcp': True,
559 }
Andrea Frittolic3280152015-02-26 12:42:34 +0000560 iso_creds = isolated_creds.IsolatedCreds(name='test class',
Matthew Treinish23433a02014-03-17 16:43:50 -0400561 network_resources=net_dict)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400562 self._mock_assign_user_role()
563 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400564 self._mock_user_create('1234', 'fake_prim_user')
565 self._mock_tenant_create('1234', 'fake_prim_tenant')
566 self.assertRaises(exceptions.InvalidConfiguration,
567 iso_creds.get_primary_creds)