blob: 1aec1dcfe884946c4269a3cc0b83ef89f643f84f [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
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070015import fixtures
Matthew Treinish5c660ab2014-05-18 21:14:36 -040016import mock
Doug Hellmann583ce2c2015-03-11 14:55:46 +000017from oslo_config import cfg
Matthew Treinishcb058062014-03-13 18:27:07 -040018
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010019from tempest.common import credentials_factory as credentials
Matthew Treinishcb058062014-03-13 18:27:07 -040020from tempest import config
Matthew Treinishc51b7122017-07-17 12:28:07 -040021from tempest.lib.common import dynamic_creds
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080022from tempest.lib.common import rest_client
Adam Youngb226f8e2016-06-25 21:41:36 -040023from tempest.lib import exceptions as lib_exc
Martin Kopec0cb35532016-09-02 08:32:41 +000024from tempest.lib.services.identity.v2 import identity_client as v2_iden_client
ghanshyam17193062016-06-24 10:36:54 +090025from tempest.lib.services.identity.v2 import roles_client as v2_roles_client
26from tempest.lib.services.identity.v2 import tenants_client as \
27 v2_tenants_client
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010028from tempest.lib.services.identity.v2 import token_client as v2_token_client
ghanshyam17193062016-06-24 10:36:54 +090029from tempest.lib.services.identity.v2 import users_client as v2_users_client
Martin Kopec7dcd7972016-12-13 11:04:03 +090030from tempest.lib.services.identity.v3 import domains_client
Martin Kopec8d2392b2016-09-02 13:41:45 +000031from tempest.lib.services.identity.v3 import identity_client as v3_iden_client
Martin Kopecabdceda2016-09-01 15:27:18 +000032from tempest.lib.services.identity.v3 import projects_client as \
33 v3_projects_client
ghanshyam53015672016-09-08 10:10:16 +090034from tempest.lib.services.identity.v3 import roles_client as v3_roles_client
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010035from tempest.lib.services.identity.v3 import token_client as v3_token_client
Dustin Schoenbrun6c742292016-09-01 16:28:42 -040036from tempest.lib.services.identity.v3 import users_client as \
37 v3_users_client
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -070038from tempest.lib.services.network import routers_client
Matthew Treinishffad78a2016-04-16 14:39:52 -040039from tempest.tests import base
Matthew Treinishcb058062014-03-13 18:27:07 -040040from tempest.tests import fake_config
Jordan Pittier00f25962016-03-18 17:10:07 +010041from tempest.tests.lib import fake_http
42from tempest.tests.lib import fake_identity
Andrea Frittoli9806f2d2017-09-01 14:50:07 +010043from tempest.tests.lib.services import registry_fixture
Matthew Treinishcb058062014-03-13 18:27:07 -040044
45
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070046class TestDynamicCredentialProvider(base.TestCase):
Matthew Treinishcb058062014-03-13 18:27:07 -040047
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010048 fixed_params = {'name': 'test class',
Andrea Frittoli (andreaf)29491a72015-10-13 11:24:17 +010049 'identity_version': 'v2',
Andrea Frittolidcd91002017-07-18 11:34:13 +010050 'admin_role': 'admin',
51 'identity_uri': 'fake_uri'}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010052
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010053 token_client = v2_token_client
54 iden_client = v2_iden_client
55 roles_client = v2_roles_client
56 tenants_client = v2_tenants_client
57 users_client = v2_users_client
58 token_client_class = token_client.TokenClient
59 fake_response = fake_identity._fake_v2_response
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010060 tenants_client_class = tenants_client.TenantsClient
61 delete_tenant = 'delete_tenant'
62
Matthew Treinishcb058062014-03-13 18:27:07 -040063 def setUp(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070064 super(TestDynamicCredentialProvider, self).setUp()
Matthew Treinishcb058062014-03-13 18:27:07 -040065 self.useFixture(fake_config.ConfigFixture())
Andrea Frittoli9806f2d2017-09-01 14:50:07 +010066 self.useFixture(registry_fixture.RegistryFixture())
Jordan Pittier0021c292016-03-29 21:33:34 +020067 self.patchobject(config, 'TempestConfigPrivate',
68 fake_config.FakePrivate)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010069 self.patchobject(self.token_client_class, 'raw_request',
70 self.fake_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040071 cfg.CONF.set_default('operator_role', 'FakeRole',
72 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000073 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010074 self.fixed_params.update(
75 admin_creds=self._get_fake_admin_creds())
Matthew Treinishcb058062014-03-13 18:27:07 -040076
77 def test_tempest_client(self):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010078 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Shuquan Huang29e9cab2015-12-30 22:43:49 +080079 self.assertIsInstance(creds.identity_admin_client,
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010080 self.iden_client.IdentityClient)
Matthew Treinishcb058062014-03-13 18:27:07 -040081
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010082 def _get_fake_admin_creds(self):
83 return credentials.get_credentials(
84 fill_in=False,
85 identity_version=self.fixed_params['identity_version'],
86 username='fake_username', password='fake_password',
87 tenant_name='fake_tenant')
88
Matthew Treinishcb058062014-03-13 18:27:07 -040089 def _mock_user_create(self, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070090 user_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010091 self.users_client.UsersClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040092 'create_user',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080093 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053094 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040095 return user_fix
96
97 def _mock_tenant_create(self, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070098 tenant_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010099 self.tenants_client.TenantsClient,
Matthew Treinishcb058062014-03-13 18:27:07 -0400100 'create_tenant',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800101 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530102 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -0400103 return tenant_fix
104
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400105 def _mock_list_roles(self, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700106 roles_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100107 self.roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400108 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800109 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500110 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530111 {'roles': [{'id': id, 'name': name},
afazekas40fcb9b2019-03-08 11:25:11 +0100112 {'id': '1', 'name': 'FakeRole'},
Martin Kopec99d4dae2020-05-27 10:33:17 +0000113 {'id': '2', 'name': 'member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400114 return roles_fix
115
Matthew Treinish976e8df2014-12-19 14:21:54 -0500116 def _mock_list_2_roles(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700117 roles_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100118 self.roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500119 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800120 return_value=(rest_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -0500121 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530122 {'roles': [{'id': '1234', 'name': 'role1'},
afazekas40fcb9b2019-03-08 11:25:11 +0100123 {'id': '1', 'name': 'FakeRole'},
124 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -0500125 return roles_fix
126
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400127 def _mock_assign_user_role(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700128 tenant_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100129 self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900130 'create_user_role_on_project',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800131 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500132 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400133 return tenant_fix
134
135 def _mock_list_role(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700136 roles_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100137 self.roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400138 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800139 return_value=(rest_client.ResponseBody
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100140 (200, {'roles': [
141 {'id': '1', 'name': 'FakeRole'},
Martin Kopec99d4dae2020-05-27 10:33:17 +0000142 {'id': '2', 'name': 'member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400143 return roles_fix
144
Andrea Frittoli32d74992015-03-06 17:01:07 +0000145 def _mock_list_ec2_credentials(self, user_id, tenant_id):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700146 ec2_creds_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100147 self.users_client.UsersClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000148 'list_user_ec2_credentials',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800149 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530150 (200, {'credentials': [{
151 'access': 'fake_access',
152 'secret': 'fake_secret',
153 'tenant_id': tenant_id,
154 'user_id': user_id,
155 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000156 return ec2_creds_fix
157
Matthew Treinishe6723262014-03-14 13:16:52 -0400158 def _mock_network_create(self, iso_creds, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700159 net_fix = self.useFixture(fixtures.MockPatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400160 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400161 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500162 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400163 return net_fix
164
165 def _mock_subnet_create(self, iso_creds, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700166 subnet_fix = self.useFixture(fixtures.MockPatchObject(
John Warren3961acd2015-10-02 14:38:53 -0400167 iso_creds.subnets_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400168 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500169 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400170 return subnet_fix
171
172 def _mock_router_create(self, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700173 router_fix = self.useFixture(fixtures.MockPatchObject(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000174 routers_client.RoutersClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400175 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500176 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400177 return router_fix
178
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500179 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400180 def test_primary_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100181 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400182 self._mock_assign_user_role()
183 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400184 self._mock_tenant_create('1234', 'fake_prim_tenant')
185 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700186 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000187 self.assertEqual(primary_creds.username, 'fake_prim_user')
188 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000189 # Verify IDs
190 self.assertEqual(primary_creds.tenant_id, '1234')
191 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400192
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500193 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400194 def test_admin_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100195 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400196 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400197 self._mock_user_create('1234', 'fake_admin_user')
198 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400199
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100200 user_mock = mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900201 'create_user_role_on_project')
Matthew Treinishcb058062014-03-13 18:27:07 -0400202 user_mock.start()
203 self.addCleanup(user_mock.stop)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100204 with mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900205 'create_user_role_on_project') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700206 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400207 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400208 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000209 self.assertEqual(admin_creds.username, 'fake_admin_user')
210 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000211 # Verify IDs
212 self.assertEqual(admin_creds.tenant_id, '1234')
213 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400214
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500215 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500216 def test_role_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100217 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500218 self._mock_list_2_roles()
219 self._mock_user_create('1234', 'fake_role_user')
220 self._mock_tenant_create('1234', 'fake_role_tenant')
221
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100222 user_mock = mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900223 'create_user_role_on_project')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500224 user_mock.start()
225 self.addCleanup(user_mock.stop)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100226 with mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900227 'create_user_role_on_project') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700228 role_creds = creds.get_creds_by_roles(
229 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500230 calls = user_mock.mock_calls
231 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500232 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500233 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400234 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500235 self.assertIn(('1234', '1234', '1234'), args)
236 self.assertIn(('1234', '1234', '12345'), args)
237 self.assertEqual(role_creds.username, 'fake_role_user')
238 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
239 # Verify IDs
240 self.assertEqual(role_creds.tenant_id, '1234')
241 self.assertEqual(role_creds.user_id, '1234')
242
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500243 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400244 def test_all_cred_cleanup(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100245 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400246 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400247 self._mock_list_role()
248 self._mock_tenant_create('1234', 'fake_prim_tenant')
249 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700250 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400251 self._mock_tenant_create('12345', 'fake_alt_tenant')
252 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700253 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400254 self._mock_tenant_create('123456', 'fake_admin_tenant')
255 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400256 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700257 creds.get_admin_creds()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100258 user_mock = self.patchobject(self.users_client.UsersClient,
259 'delete_user')
260 tenant_mock = self.patchobject(self.tenants_client_class,
261 self.delete_tenant)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700262 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400263 # Verify user delete calls
264 calls = user_mock.mock_calls
265 self.assertEqual(len(calls), 3)
266 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400267 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400268 self.assertIn('1234', args)
269 self.assertIn('12345', args)
270 self.assertIn('123456', args)
271 # Verify tenant delete calls
272 calls = tenant_mock.mock_calls
273 self.assertEqual(len(calls), 3)
274 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400275 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400276 self.assertIn('1234', args)
277 self.assertIn('12345', args)
278 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400279
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500280 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400281 def test_alt_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100282 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400283 self._mock_assign_user_role()
284 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400285 self._mock_user_create('1234', 'fake_alt_user')
286 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700287 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000288 self.assertEqual(alt_creds.username, 'fake_alt_user')
289 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000290 # Verify IDs
291 self.assertEqual(alt_creds.tenant_id, '1234')
292 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400293
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500294 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400295 def test_no_network_creation_with_config_set(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400296 creds = dynamic_creds.DynamicCredentialProvider(
297 neutron_available=True, create_networks=False,
298 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
299 **self.fixed_params)
Matthew Treinish2219d382015-04-24 10:33:04 -0400300 self._mock_assign_user_role()
301 self._mock_list_role()
302 self._mock_user_create('1234', 'fake_prim_user')
303 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700304 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400305 'delete_network')
306 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400307 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400308 'delete_subnet')
309 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000310 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400311 'delete_router')
312 router_mock = router.start()
313
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700314 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400315 self.assertEqual(net_mock.mock_calls, [])
316 self.assertEqual(subnet_mock.mock_calls, [])
317 self.assertEqual(router_mock.mock_calls, [])
318 network = primary_creds.network
319 subnet = primary_creds.subnet
320 router = primary_creds.router
321 self.assertIsNone(network)
322 self.assertIsNone(subnet)
323 self.assertIsNone(router)
324
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500325 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400326 def test_network_creation(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400327 creds = dynamic_creds.DynamicCredentialProvider(
328 neutron_available=True,
329 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
330 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400331 self._mock_assign_user_role()
332 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400333 self._mock_user_create('1234', 'fake_prim_user')
334 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700335 self._mock_network_create(creds, '1234', 'fake_net')
336 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400337 self._mock_router_create('1234', 'fake_router')
338 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700339 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530340 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700341 primary_creds = creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530342 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400343 network = primary_creds.network
344 subnet = primary_creds.subnet
345 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400346 self.assertEqual(network['id'], '1234')
347 self.assertEqual(network['name'], 'fake_net')
348 self.assertEqual(subnet['id'], '1234')
349 self.assertEqual(subnet['name'], 'fake_subnet')
350 self.assertEqual(router['id'], '1234')
351 self.assertEqual(router['name'], 'fake_router')
352
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500353 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400354 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100355 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500356 return {"security_groups": [{"tenant_id": args['tenant_id'],
357 "name": args['name'],
358 "description": args['name'],
359 "security_group_rules": [],
360 "id": "sg-%s" % args['tenant_id']}]}
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400361 creds = dynamic_creds.DynamicCredentialProvider(
362 neutron_available=True,
363 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
364 **self.fixed_params)
Matthew Treinishe6723262014-03-14 13:16:52 -0400365 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400366 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400367 self._mock_list_role()
368 self._mock_user_create('1234', 'fake_prim_user')
369 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700370 self._mock_network_create(creds, '1234', 'fake_net')
371 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400372 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400373 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700374 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530375 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700376 creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530377 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400378 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400379 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400380 self._mock_user_create('12345', 'fake_alt_user')
381 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700382 self._mock_network_create(creds, '12345', 'fake_alt_net')
383 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400384 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700385 creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530386 router_interface_mock.assert_called_once_with('12345',
387 subnet_id='12345')
Matthew Treinishe6723262014-03-14 13:16:52 -0400388 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400389 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400390 self._mock_user_create('123456', 'fake_admin_user')
391 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700392 self._mock_network_create(creds, '123456', 'fake_admin_net')
393 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400394 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400395 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700396 creds.get_admin_creds()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100397 self.patchobject(self.users_client.UsersClient, 'delete_user')
398 self.patchobject(self.tenants_client_class, self.delete_tenant)
399 net = mock.patch.object(creds.networks_admin_client, 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400400 net_mock = net.start()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100401 subnet = mock.patch.object(creds.subnets_admin_client, 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400402 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100403 router = mock.patch.object(creds.routers_admin_client, 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400404 router_mock = router.start()
405 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700406 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530407 'remove_router_interface')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400408 return_values = ({'status': 200}, {'ports': []})
John Warren49c0fe52015-10-22 12:35:54 -0400409 port_list_mock = mock.patch.object(creds.ports_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400410 'list_ports',
411 return_value=return_values)
412
Matthew Treinishe6723262014-03-14 13:16:52 -0400413 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700414 secgroup_list_mock = mock.patch.object(
John Warrenf9606e92015-12-10 12:12:42 -0500415 creds.security_groups_admin_client,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700416 'list_security_groups',
417 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100418 secgroup_list_mock.start()
419
Jordan Pittier00f25962016-03-18 17:10:07 +0100420 return_values = fake_http.fake_http_response({}, status=204), ''
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100421 remove_secgroup_mock = self.patch(
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500422 'tempest.lib.services.network.security_groups_client.'
John Warrenf9606e92015-12-10 12:12:42 -0500423 'SecurityGroupsClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700424 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100425 # Verify default security group delete
426 calls = remove_secgroup_mock.mock_calls
427 self.assertEqual(len(calls), 3)
428 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400429 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100430 self.assertIn('v2.0/security-groups/sg-1234', args)
431 self.assertIn('v2.0/security-groups/sg-12345', args)
432 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400433 # Verify remove router interface calls
434 calls = remove_router_interface_mock.mock_calls
435 self.assertEqual(len(calls), 3)
piyush11078694aca952015-12-17 12:54:44 +0530436 args = map(lambda x: (x[1][0], x[2]), calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400437 args = list(args)
piyush11078694aca952015-12-17 12:54:44 +0530438 self.assertIn(('1234', {'subnet_id': '1234'}), args)
439 self.assertIn(('12345', {'subnet_id': '12345'}), args)
440 self.assertIn(('123456', {'subnet_id': '123456'}), args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400441 # Verify network delete calls
442 calls = net_mock.mock_calls
443 self.assertEqual(len(calls), 3)
444 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400445 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400446 self.assertIn('1234', args)
447 self.assertIn('12345', args)
448 self.assertIn('123456', args)
449 # Verify subnet delete calls
450 calls = subnet_mock.mock_calls
451 self.assertEqual(len(calls), 3)
452 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400453 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400454 self.assertIn('1234', args)
455 self.assertIn('12345', args)
456 self.assertIn('123456', args)
457 # Verify router delete calls
458 calls = router_mock.mock_calls
459 self.assertEqual(len(calls), 3)
460 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400461 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400462 self.assertIn('1234', args)
463 self.assertIn('12345', args)
464 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400465
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500466 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400467 def test_network_alt_creation(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400468 creds = dynamic_creds.DynamicCredentialProvider(
469 neutron_available=True,
470 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
471 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400472 self._mock_assign_user_role()
473 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400474 self._mock_user_create('1234', 'fake_alt_user')
475 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700476 self._mock_network_create(creds, '1234', 'fake_alt_net')
477 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400478 self._mock_router_create('1234', 'fake_alt_router')
479 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700480 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530481 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700482 alt_creds = creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530483 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400484 network = alt_creds.network
485 subnet = alt_creds.subnet
486 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400487 self.assertEqual(network['id'], '1234')
488 self.assertEqual(network['name'], 'fake_alt_net')
489 self.assertEqual(subnet['id'], '1234')
490 self.assertEqual(subnet['name'], 'fake_alt_subnet')
491 self.assertEqual(router['id'], '1234')
492 self.assertEqual(router['name'], 'fake_alt_router')
493
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500494 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400495 def test_network_admin_creation(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400496 creds = dynamic_creds.DynamicCredentialProvider(
497 neutron_available=True,
498 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
499 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400500 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400501 self._mock_user_create('1234', 'fake_admin_user')
502 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700503 self._mock_network_create(creds, '1234', 'fake_admin_net')
504 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400505 self._mock_router_create('1234', 'fake_admin_router')
506 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700507 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530508 'add_router_interface')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400509 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700510 admin_creds = creds.get_admin_creds()
piyush11078694aca952015-12-17 12:54:44 +0530511 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400512 network = admin_creds.network
513 subnet = admin_creds.subnet
514 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400515 self.assertEqual(network['id'], '1234')
516 self.assertEqual(network['name'], 'fake_admin_net')
517 self.assertEqual(subnet['id'], '1234')
518 self.assertEqual(subnet['name'], 'fake_admin_subnet')
519 self.assertEqual(router['id'], '1234')
520 self.assertEqual(router['name'], 'fake_admin_router')
521
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500522 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400523 def test_no_network_resources(self, MockRestClient):
524 net_dict = {
525 'network': False,
526 'router': False,
527 'subnet': False,
528 'dhcp': False,
529 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700530 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400531 neutron_available=True,
532 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100533 network_resources=net_dict,
534 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400535 self._mock_assign_user_role()
536 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400537 self._mock_user_create('1234', 'fake_prim_user')
538 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700539 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400540 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400541 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400542 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400543 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400544 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000545 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400546 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400547 router_mock = router.start()
548
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700549 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400550 self.assertEqual(net_mock.mock_calls, [])
551 self.assertEqual(subnet_mock.mock_calls, [])
552 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400553 network = primary_creds.network
554 subnet = primary_creds.subnet
555 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400556 self.assertIsNone(network)
557 self.assertIsNone(subnet)
558 self.assertIsNone(router)
559
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500560 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400561 def test_router_without_network(self, MockRestClient):
562 net_dict = {
563 'network': False,
564 'router': True,
565 'subnet': False,
566 'dhcp': False,
567 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700568 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400569 neutron_available=True,
570 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100571 network_resources=net_dict,
572 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400573 self._mock_assign_user_role()
574 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400575 self._mock_user_create('1234', 'fake_prim_user')
576 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish4217a702016-10-07 17:27:11 -0400577 self.assertRaises(lib_exc.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700578 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400579
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500580 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400581 def test_subnet_without_network(self, MockRestClient):
582 net_dict = {
583 'network': False,
584 'router': False,
585 'subnet': True,
586 'dhcp': False,
587 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700588 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400589 neutron_available=True,
590 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100591 network_resources=net_dict,
592 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400593 self._mock_assign_user_role()
594 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400595 self._mock_user_create('1234', 'fake_prim_user')
596 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish4217a702016-10-07 17:27:11 -0400597 self.assertRaises(lib_exc.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700598 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400599
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500600 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400601 def test_dhcp_without_subnet(self, MockRestClient):
602 net_dict = {
603 'network': False,
604 'router': False,
605 'subnet': False,
606 'dhcp': True,
607 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700608 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400609 neutron_available=True,
610 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100611 network_resources=net_dict,
612 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400613 self._mock_assign_user_role()
614 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400615 self._mock_user_create('1234', 'fake_prim_user')
616 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish4217a702016-10-07 17:27:11 -0400617 self.assertRaises(lib_exc.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700618 creds.get_primary_creds)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100619
620
621class TestDynamicCredentialProviderV3(TestDynamicCredentialProvider):
622
623 fixed_params = {'name': 'test class',
624 'identity_version': 'v3',
Andrea Frittolidcd91002017-07-18 11:34:13 +0100625 'admin_role': 'admin',
626 'identity_uri': 'fake_uri'}
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100627
628 token_client = v3_token_client
629 iden_client = v3_iden_client
630 roles_client = v3_roles_client
631 tenants_client = v3_projects_client
632 users_client = v3_users_client
633 token_client_class = token_client.V3TokenClient
634 fake_response = fake_identity._fake_v3_response
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100635 tenants_client_class = tenants_client.ProjectsClient
636 delete_tenant = 'delete_project'
637
638 def setUp(self):
639 super(TestDynamicCredentialProviderV3, self).setUp()
640 self.useFixture(fake_config.ConfigFixture())
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700641 self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100642 domains_client.DomainsClient, 'list_domains',
643 return_value=dict(domains=[dict(id='default',
644 name='Default')])))
645 self.patchobject(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900646 'create_user_role_on_domain')
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100647
648 def _mock_list_ec2_credentials(self, user_id, tenant_id):
649 pass
650
651 def _mock_tenant_create(self, id, name):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700652 project_fix = self.useFixture(fixtures.MockPatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100653 self.tenants_client.ProjectsClient,
654 'create_project',
655 return_value=(rest_client.ResponseBody
656 (200, {'project': {'id': id, 'name': name}}))))
657 return project_fix
Adam Youngb226f8e2016-06-25 21:41:36 -0400658
659 @mock.patch('tempest.lib.common.rest_client.RestClient')
660 def test_member_role_creation_with_duplicate(self, rest_client_mock):
661 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
662 creds.creds_client = mock.MagicMock()
663 creds.creds_client.create_user_role.side_effect = lib_exc.Conflict
Matthew Treinishc51b7122017-07-17 12:28:07 -0400664 with mock.patch('tempest.lib.common.dynamic_creds.LOG') as log_mock:
Adam Youngb226f8e2016-06-25 21:41:36 -0400665 creds._create_creds()
666 log_mock.warning.assert_called_once_with(
Martin Kopec99d4dae2020-05-27 10:33:17 +0000667 "member role already exists, ignoring conflict.")
Adam Youngb226f8e2016-06-25 21:41:36 -0400668 creds.creds_client.assign_user_role.assert_called_once_with(
Martin Kopec99d4dae2020-05-27 10:33:17 +0000669 mock.ANY, mock.ANY, 'member')