blob: b4fbd50193f25e82d2603ad3b92be44aa44fc205 [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
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010019from tempest.common import credentials_factory as credentials
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070020from tempest.common import dynamic_creds
Matthew Treinishcb058062014-03-13 18:27:07 -040021from tempest import config
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
Matthew Treinishcb058062014-03-13 18:27:07 -040043
44
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070045class TestDynamicCredentialProvider(base.TestCase):
Matthew Treinishcb058062014-03-13 18:27:07 -040046
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010047 fixed_params = {'name': 'test class',
Andrea Frittoli (andreaf)29491a72015-10-13 11:24:17 +010048 'identity_version': 'v2',
49 'admin_role': 'admin'}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010050
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010051 token_client = v2_token_client
52 iden_client = v2_iden_client
53 roles_client = v2_roles_client
54 tenants_client = v2_tenants_client
55 users_client = v2_users_client
56 token_client_class = token_client.TokenClient
57 fake_response = fake_identity._fake_v2_response
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010058 tenants_client_class = tenants_client.TenantsClient
59 delete_tenant = 'delete_tenant'
60
Matthew Treinishcb058062014-03-13 18:27:07 -040061 def setUp(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070062 super(TestDynamicCredentialProvider, self).setUp()
Matthew Treinishcb058062014-03-13 18:27:07 -040063 self.useFixture(fake_config.ConfigFixture())
Jordan Pittier0021c292016-03-29 21:33:34 +020064 self.patchobject(config, 'TempestConfigPrivate',
65 fake_config.FakePrivate)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010066 self.patchobject(self.token_client_class, 'raw_request',
67 self.fake_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040068 cfg.CONF.set_default('operator_role', 'FakeRole',
69 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000070 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010071 self.fixed_params.update(
72 admin_creds=self._get_fake_admin_creds())
Matthew Treinishcb058062014-03-13 18:27:07 -040073
74 def test_tempest_client(self):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010075 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Shuquan Huang29e9cab2015-12-30 22:43:49 +080076 self.assertIsInstance(creds.identity_admin_client,
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010077 self.iden_client.IdentityClient)
Matthew Treinishcb058062014-03-13 18:27:07 -040078
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010079 def _get_fake_admin_creds(self):
80 return credentials.get_credentials(
81 fill_in=False,
82 identity_version=self.fixed_params['identity_version'],
83 username='fake_username', password='fake_password',
84 tenant_name='fake_tenant')
85
Matthew Treinishcb058062014-03-13 18:27:07 -040086 def _mock_user_create(self, id, name):
87 user_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010088 self.users_client.UsersClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040089 'create_user',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080090 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053091 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040092 return user_fix
93
94 def _mock_tenant_create(self, id, name):
95 tenant_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +010096 self.tenants_client.TenantsClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040097 'create_tenant',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080098 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053099 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -0400100 return tenant_fix
101
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400102 def _mock_list_roles(self, id, name):
103 roles_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100104 self.roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400105 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800106 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500107 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530108 {'roles': [{'id': id, 'name': name},
109 {'id': '1', 'name': 'FakeRole'},
110 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400111 return roles_fix
112
Matthew Treinish976e8df2014-12-19 14:21:54 -0500113 def _mock_list_2_roles(self):
114 roles_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100115 self.roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500116 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800117 return_value=(rest_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -0500118 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530119 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -0500120 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530121 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -0500122 return roles_fix
123
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400124 def _mock_assign_user_role(self):
125 tenant_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100126 self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900127 'create_user_role_on_project',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800128 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500129 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400130 return tenant_fix
131
132 def _mock_list_role(self):
133 roles_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100134 self.roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400135 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800136 return_value=(rest_client.ResponseBody
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100137 (200, {'roles': [
138 {'id': '1', 'name': 'FakeRole'},
139 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400140 return roles_fix
141
Andrea Frittoli32d74992015-03-06 17:01:07 +0000142 def _mock_list_ec2_credentials(self, user_id, tenant_id):
143 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100144 self.users_client.UsersClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000145 'list_user_ec2_credentials',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800146 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530147 (200, {'credentials': [{
148 'access': 'fake_access',
149 'secret': 'fake_secret',
150 'tenant_id': tenant_id,
151 'user_id': user_id,
152 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000153 return ec2_creds_fix
154
Matthew Treinishe6723262014-03-14 13:16:52 -0400155 def _mock_network_create(self, iso_creds, id, name):
156 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400157 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400158 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500159 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400160 return net_fix
161
162 def _mock_subnet_create(self, iso_creds, id, name):
163 subnet_fix = self.useFixture(mockpatch.PatchObject(
John Warren3961acd2015-10-02 14:38:53 -0400164 iso_creds.subnets_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400165 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500166 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400167 return subnet_fix
168
169 def _mock_router_create(self, id, name):
170 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000171 routers_client.RoutersClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400172 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500173 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400174 return router_fix
175
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500176 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400177 def test_primary_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100178 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400179 self._mock_assign_user_role()
180 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400181 self._mock_tenant_create('1234', 'fake_prim_tenant')
182 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700183 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000184 self.assertEqual(primary_creds.username, 'fake_prim_user')
185 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000186 # Verify IDs
187 self.assertEqual(primary_creds.tenant_id, '1234')
188 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400189
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500190 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400191 def test_admin_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100192 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400193 self._mock_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400194 self._mock_user_create('1234', 'fake_admin_user')
195 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400196
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100197 user_mock = mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900198 'create_user_role_on_project')
Matthew Treinishcb058062014-03-13 18:27:07 -0400199 user_mock.start()
200 self.addCleanup(user_mock.stop)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100201 with mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900202 'create_user_role_on_project') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700203 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400204 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400205 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000206 self.assertEqual(admin_creds.username, 'fake_admin_user')
207 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000208 # Verify IDs
209 self.assertEqual(admin_creds.tenant_id, '1234')
210 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400211
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500212 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500213 def test_role_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100214 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500215 self._mock_list_2_roles()
216 self._mock_user_create('1234', 'fake_role_user')
217 self._mock_tenant_create('1234', 'fake_role_tenant')
218
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100219 user_mock = mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900220 'create_user_role_on_project')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500221 user_mock.start()
222 self.addCleanup(user_mock.stop)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100223 with mock.patch.object(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900224 'create_user_role_on_project') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700225 role_creds = creds.get_creds_by_roles(
226 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500227 calls = user_mock.mock_calls
228 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500229 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500230 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400231 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500232 self.assertIn(('1234', '1234', '1234'), args)
233 self.assertIn(('1234', '1234', '12345'), args)
234 self.assertEqual(role_creds.username, 'fake_role_user')
235 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
236 # Verify IDs
237 self.assertEqual(role_creds.tenant_id, '1234')
238 self.assertEqual(role_creds.user_id, '1234')
239
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500240 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400241 def test_all_cred_cleanup(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100242 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400243 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400244 self._mock_list_role()
245 self._mock_tenant_create('1234', 'fake_prim_tenant')
246 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700247 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400248 self._mock_tenant_create('12345', 'fake_alt_tenant')
249 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700250 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400251 self._mock_tenant_create('123456', 'fake_admin_tenant')
252 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400253 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700254 creds.get_admin_creds()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100255 user_mock = self.patchobject(self.users_client.UsersClient,
256 'delete_user')
257 tenant_mock = self.patchobject(self.tenants_client_class,
258 self.delete_tenant)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700259 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400260 # Verify user delete calls
261 calls = user_mock.mock_calls
262 self.assertEqual(len(calls), 3)
263 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400264 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400265 self.assertIn('1234', args)
266 self.assertIn('12345', args)
267 self.assertIn('123456', args)
268 # Verify tenant delete calls
269 calls = tenant_mock.mock_calls
270 self.assertEqual(len(calls), 3)
271 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400272 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400273 self.assertIn('1234', args)
274 self.assertIn('12345', args)
275 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400276
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500277 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400278 def test_alt_creds(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100279 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400280 self._mock_assign_user_role()
281 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400282 self._mock_user_create('1234', 'fake_alt_user')
283 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700284 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000285 self.assertEqual(alt_creds.username, 'fake_alt_user')
286 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000287 # Verify IDs
288 self.assertEqual(alt_creds.tenant_id, '1234')
289 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400290
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500291 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400292 def test_no_network_creation_with_config_set(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400293 creds = dynamic_creds.DynamicCredentialProvider(
294 neutron_available=True, create_networks=False,
295 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
296 **self.fixed_params)
Matthew Treinish2219d382015-04-24 10:33:04 -0400297 self._mock_assign_user_role()
298 self._mock_list_role()
299 self._mock_user_create('1234', 'fake_prim_user')
300 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700301 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400302 'delete_network')
303 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400304 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400305 'delete_subnet')
306 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000307 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400308 'delete_router')
309 router_mock = router.start()
310
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700311 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400312 self.assertEqual(net_mock.mock_calls, [])
313 self.assertEqual(subnet_mock.mock_calls, [])
314 self.assertEqual(router_mock.mock_calls, [])
315 network = primary_creds.network
316 subnet = primary_creds.subnet
317 router = primary_creds.router
318 self.assertIsNone(network)
319 self.assertIsNone(subnet)
320 self.assertIsNone(router)
321
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500322 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400323 def test_network_creation(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400324 creds = dynamic_creds.DynamicCredentialProvider(
325 neutron_available=True,
326 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
327 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400328 self._mock_assign_user_role()
329 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400330 self._mock_user_create('1234', 'fake_prim_user')
331 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700332 self._mock_network_create(creds, '1234', 'fake_net')
333 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400334 self._mock_router_create('1234', 'fake_router')
335 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700336 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530337 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700338 primary_creds = creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530339 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400340 network = primary_creds.network
341 subnet = primary_creds.subnet
342 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400343 self.assertEqual(network['id'], '1234')
344 self.assertEqual(network['name'], 'fake_net')
345 self.assertEqual(subnet['id'], '1234')
346 self.assertEqual(subnet['name'], 'fake_subnet')
347 self.assertEqual(router['id'], '1234')
348 self.assertEqual(router['name'], 'fake_router')
349
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500350 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400351 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100352 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500353 return {"security_groups": [{"tenant_id": args['tenant_id'],
354 "name": args['name'],
355 "description": args['name'],
356 "security_group_rules": [],
357 "id": "sg-%s" % args['tenant_id']}]}
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400358 creds = dynamic_creds.DynamicCredentialProvider(
359 neutron_available=True,
360 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
361 **self.fixed_params)
Matthew Treinishe6723262014-03-14 13:16:52 -0400362 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400363 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400364 self._mock_list_role()
365 self._mock_user_create('1234', 'fake_prim_user')
366 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700367 self._mock_network_create(creds, '1234', 'fake_net')
368 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400369 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400370 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700371 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530372 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700373 creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530374 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400375 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400376 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400377 self._mock_user_create('12345', 'fake_alt_user')
378 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700379 self._mock_network_create(creds, '12345', 'fake_alt_net')
380 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400381 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700382 creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530383 router_interface_mock.assert_called_once_with('12345',
384 subnet_id='12345')
Matthew Treinishe6723262014-03-14 13:16:52 -0400385 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400386 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400387 self._mock_user_create('123456', 'fake_admin_user')
388 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700389 self._mock_network_create(creds, '123456', 'fake_admin_net')
390 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400391 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400392 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700393 creds.get_admin_creds()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100394 self.patchobject(self.users_client.UsersClient, 'delete_user')
395 self.patchobject(self.tenants_client_class, self.delete_tenant)
396 net = mock.patch.object(creds.networks_admin_client, 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400397 net_mock = net.start()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100398 subnet = mock.patch.object(creds.subnets_admin_client, 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400399 subnet_mock = subnet.start()
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100400 router = mock.patch.object(creds.routers_admin_client, 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400401 router_mock = router.start()
402 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700403 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530404 'remove_router_interface')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400405 return_values = ({'status': 200}, {'ports': []})
John Warren49c0fe52015-10-22 12:35:54 -0400406 port_list_mock = mock.patch.object(creds.ports_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400407 'list_ports',
408 return_value=return_values)
409
Matthew Treinishe6723262014-03-14 13:16:52 -0400410 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700411 secgroup_list_mock = mock.patch.object(
John Warrenf9606e92015-12-10 12:12:42 -0500412 creds.security_groups_admin_client,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700413 'list_security_groups',
414 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100415 secgroup_list_mock.start()
416
Jordan Pittier00f25962016-03-18 17:10:07 +0100417 return_values = fake_http.fake_http_response({}, status=204), ''
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100418 remove_secgroup_mock = self.patch(
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500419 'tempest.lib.services.network.security_groups_client.'
John Warrenf9606e92015-12-10 12:12:42 -0500420 'SecurityGroupsClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700421 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100422 # Verify default security group delete
423 calls = remove_secgroup_mock.mock_calls
424 self.assertEqual(len(calls), 3)
425 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400426 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100427 self.assertIn('v2.0/security-groups/sg-1234', args)
428 self.assertIn('v2.0/security-groups/sg-12345', args)
429 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400430 # Verify remove router interface calls
431 calls = remove_router_interface_mock.mock_calls
432 self.assertEqual(len(calls), 3)
piyush11078694aca952015-12-17 12:54:44 +0530433 args = map(lambda x: (x[1][0], x[2]), calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400434 args = list(args)
piyush11078694aca952015-12-17 12:54:44 +0530435 self.assertIn(('1234', {'subnet_id': '1234'}), args)
436 self.assertIn(('12345', {'subnet_id': '12345'}), args)
437 self.assertIn(('123456', {'subnet_id': '123456'}), args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400438 # Verify network delete calls
439 calls = net_mock.mock_calls
440 self.assertEqual(len(calls), 3)
441 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400442 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400443 self.assertIn('1234', args)
444 self.assertIn('12345', args)
445 self.assertIn('123456', args)
446 # Verify subnet delete calls
447 calls = subnet_mock.mock_calls
448 self.assertEqual(len(calls), 3)
449 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400450 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400451 self.assertIn('1234', args)
452 self.assertIn('12345', args)
453 self.assertIn('123456', args)
454 # Verify router delete calls
455 calls = router_mock.mock_calls
456 self.assertEqual(len(calls), 3)
457 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400458 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400459 self.assertIn('1234', args)
460 self.assertIn('12345', args)
461 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400462
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500463 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400464 def test_network_alt_creation(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400465 creds = dynamic_creds.DynamicCredentialProvider(
466 neutron_available=True,
467 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
468 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400469 self._mock_assign_user_role()
470 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400471 self._mock_user_create('1234', 'fake_alt_user')
472 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700473 self._mock_network_create(creds, '1234', 'fake_alt_net')
474 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400475 self._mock_router_create('1234', 'fake_alt_router')
476 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700477 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530478 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700479 alt_creds = creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530480 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400481 network = alt_creds.network
482 subnet = alt_creds.subnet
483 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400484 self.assertEqual(network['id'], '1234')
485 self.assertEqual(network['name'], 'fake_alt_net')
486 self.assertEqual(subnet['id'], '1234')
487 self.assertEqual(subnet['name'], 'fake_alt_subnet')
488 self.assertEqual(router['id'], '1234')
489 self.assertEqual(router['name'], 'fake_alt_router')
490
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500491 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400492 def test_network_admin_creation(self, MockRestClient):
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400493 creds = dynamic_creds.DynamicCredentialProvider(
494 neutron_available=True,
495 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
496 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400497 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400498 self._mock_user_create('1234', 'fake_admin_user')
499 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700500 self._mock_network_create(creds, '1234', 'fake_admin_net')
501 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400502 self._mock_router_create('1234', 'fake_admin_router')
503 router_interface_mock = self.patch(
Ken'ichi Ohmichi131799e2016-06-06 12:06:41 -0700504 'tempest.lib.services.network.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530505 'add_router_interface')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400506 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700507 admin_creds = creds.get_admin_creds()
piyush11078694aca952015-12-17 12:54:44 +0530508 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400509 network = admin_creds.network
510 subnet = admin_creds.subnet
511 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400512 self.assertEqual(network['id'], '1234')
513 self.assertEqual(network['name'], 'fake_admin_net')
514 self.assertEqual(subnet['id'], '1234')
515 self.assertEqual(subnet['name'], 'fake_admin_subnet')
516 self.assertEqual(router['id'], '1234')
517 self.assertEqual(router['name'], 'fake_admin_router')
518
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500519 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400520 def test_no_network_resources(self, MockRestClient):
521 net_dict = {
522 'network': False,
523 'router': False,
524 'subnet': False,
525 'dhcp': False,
526 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700527 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400528 neutron_available=True,
529 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100530 network_resources=net_dict,
531 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400532 self._mock_assign_user_role()
533 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400534 self._mock_user_create('1234', 'fake_prim_user')
535 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700536 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400537 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400538 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400539 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400540 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400541 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000542 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400543 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400544 router_mock = router.start()
545
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700546 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400547 self.assertEqual(net_mock.mock_calls, [])
548 self.assertEqual(subnet_mock.mock_calls, [])
549 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400550 network = primary_creds.network
551 subnet = primary_creds.subnet
552 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400553 self.assertIsNone(network)
554 self.assertIsNone(subnet)
555 self.assertIsNone(router)
556
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500557 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400558 def test_router_without_network(self, MockRestClient):
559 net_dict = {
560 'network': False,
561 'router': True,
562 'subnet': False,
563 'dhcp': False,
564 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700565 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400566 neutron_available=True,
567 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100568 network_resources=net_dict,
569 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400570 self._mock_assign_user_role()
571 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400572 self._mock_user_create('1234', 'fake_prim_user')
573 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish4217a702016-10-07 17:27:11 -0400574 self.assertRaises(lib_exc.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700575 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400576
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500577 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400578 def test_subnet_without_network(self, MockRestClient):
579 net_dict = {
580 'network': False,
581 'router': False,
582 'subnet': True,
583 'dhcp': False,
584 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700585 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400586 neutron_available=True,
587 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100588 network_resources=net_dict,
589 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400590 self._mock_assign_user_role()
591 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400592 self._mock_user_create('1234', 'fake_prim_user')
593 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish4217a702016-10-07 17:27:11 -0400594 self.assertRaises(lib_exc.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700595 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400596
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500597 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400598 def test_dhcp_without_subnet(self, MockRestClient):
599 net_dict = {
600 'network': False,
601 'router': False,
602 'subnet': False,
603 'dhcp': True,
604 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700605 creds = dynamic_creds.DynamicCredentialProvider(
Matthew Treinish75abbcf2016-10-07 16:19:12 -0400606 neutron_available=True,
607 project_network_cidr='10.100.0.0/16', project_network_mask_bits=28,
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100608 network_resources=net_dict,
609 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400610 self._mock_assign_user_role()
611 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400612 self._mock_user_create('1234', 'fake_prim_user')
613 self._mock_tenant_create('1234', 'fake_prim_tenant')
Matthew Treinish4217a702016-10-07 17:27:11 -0400614 self.assertRaises(lib_exc.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700615 creds.get_primary_creds)
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100616
617
618class TestDynamicCredentialProviderV3(TestDynamicCredentialProvider):
619
620 fixed_params = {'name': 'test class',
621 'identity_version': 'v3',
622 'admin_role': 'admin'}
623
624 token_client = v3_token_client
625 iden_client = v3_iden_client
626 roles_client = v3_roles_client
627 tenants_client = v3_projects_client
628 users_client = v3_users_client
629 token_client_class = token_client.V3TokenClient
630 fake_response = fake_identity._fake_v3_response
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100631 tenants_client_class = tenants_client.ProjectsClient
632 delete_tenant = 'delete_project'
633
634 def setUp(self):
635 super(TestDynamicCredentialProviderV3, self).setUp()
636 self.useFixture(fake_config.ConfigFixture())
637 self.useFixture(mockpatch.PatchObject(
638 domains_client.DomainsClient, 'list_domains',
639 return_value=dict(domains=[dict(id='default',
640 name='Default')])))
641 self.patchobject(self.roles_client.RolesClient,
ghanshyam2e6fb562016-09-06 11:14:31 +0900642 'create_user_role_on_domain')
Andrea Frittoli (andreaf)4bee2e72015-09-22 13:06:18 +0100643
644 def _mock_list_ec2_credentials(self, user_id, tenant_id):
645 pass
646
647 def _mock_tenant_create(self, id, name):
648 project_fix = self.useFixture(mockpatch.PatchObject(
649 self.tenants_client.ProjectsClient,
650 'create_project',
651 return_value=(rest_client.ResponseBody
652 (200, {'project': {'id': id, 'name': name}}))))
653 return project_fix
Adam Youngb226f8e2016-06-25 21:41:36 -0400654
655 @mock.patch('tempest.lib.common.rest_client.RestClient')
656 def test_member_role_creation_with_duplicate(self, rest_client_mock):
657 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
658 creds.creds_client = mock.MagicMock()
659 creds.creds_client.create_user_role.side_effect = lib_exc.Conflict
660 with mock.patch('tempest.common.dynamic_creds.LOG') as log_mock:
661 creds._create_creds()
662 log_mock.warning.assert_called_once_with(
663 "Member role already exists, ignoring conflict.")
664 creds.creds_client.assign_user_role.assert_called_once_with(
665 mock.ANY, mock.ANY, 'Member')