blob: be4a6eec15329d46ff8096b8c476bebed48eafb7 [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
Matthew Treinish23433a02014-03-17 16:43:50 -040022from tempest import exceptions
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080023from tempest.lib.common import rest_client
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -050024from tempest.lib.services.identity.v2 import token_client as json_token_client
Jamie Lennoxc429e6a2015-02-24 10:42:42 +110025from tempest.services.identity.v2.json import identity_client as \
26 json_iden_client
Daniel Mellado6b16b922015-12-07 12:43:08 +000027from tempest.services.identity.v2.json import roles_client as \
28 json_roles_client
Daniel Melladob04da902015-11-20 17:43:12 +010029from tempest.services.identity.v2.json import tenants_client as \
30 json_tenants_client
Daniel Mellado82c83a52015-12-09 15:16:49 +000031from tempest.services.identity.v2.json import users_client as \
32 json_users_client
Matthew Treinishcb058062014-03-13 18:27:07 -040033from tempest.services.network.json import network_client as json_network_client
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +000034from tempest.services.network.json import routers_client
Matthew Treinishcb058062014-03-13 18:27:07 -040035from tempest.tests import base
36from tempest.tests import fake_config
Andrea Frittoli2095d242014-03-20 08:36:23 +000037from tempest.tests import fake_http
38from tempest.tests import fake_identity
Matthew Treinishcb058062014-03-13 18:27:07 -040039
40
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070041class TestDynamicCredentialProvider(base.TestCase):
Matthew Treinishcb058062014-03-13 18:27:07 -040042
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010043 fixed_params = {'name': 'test class',
Andrea Frittoli (andreaf)29491a72015-10-13 11:24:17 +010044 'identity_version': 'v2',
45 'admin_role': 'admin'}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010046
Matthew Treinishcb058062014-03-13 18:27:07 -040047 def setUp(self):
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070048 super(TestDynamicCredentialProvider, self).setUp()
Matthew Treinishcb058062014-03-13 18:27:07 -040049 self.useFixture(fake_config.ConfigFixture())
50 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
Andrea Frittoli2095d242014-03-20 08:36:23 +000051 self.fake_http = fake_http.fake_httplib2(return_type=200)
Ken'ichi Ohmichi96e72792015-09-09 04:05:41 +000052 self.stubs.Set(json_token_client.TokenClient, 'raw_request',
Andrea Frittoli2095d242014-03-20 08:36:23 +000053 fake_identity._fake_v2_response)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040054 cfg.CONF.set_default('operator_role', 'FakeRole',
55 group='object-storage')
Andrea Frittoli32d74992015-03-06 17:01:07 +000056 self._mock_list_ec2_credentials('fake_user_id', 'fake_tenant_id')
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010057 self.fixed_params.update(
58 admin_creds=self._get_fake_admin_creds())
Matthew Treinishcb058062014-03-13 18:27:07 -040059
60 def test_tempest_client(self):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +010061 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070062 self.assertTrue(isinstance(creds.identity_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000063 json_iden_client.IdentityClient))
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070064 self.assertTrue(isinstance(creds.network_admin_client,
Ken'ichi Ohmichia6287072015-07-02 02:43:15 +000065 json_network_client.NetworkClient))
Matthew Treinishcb058062014-03-13 18:27:07 -040066
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010067 def _get_fake_admin_creds(self):
68 return credentials.get_credentials(
69 fill_in=False,
70 identity_version=self.fixed_params['identity_version'],
71 username='fake_username', password='fake_password',
72 tenant_name='fake_tenant')
73
Matthew Treinishcb058062014-03-13 18:27:07 -040074 def _mock_user_create(self, id, name):
75 user_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado82c83a52015-12-09 15:16:49 +000076 json_users_client.UsersClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040077 'create_user',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080078 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053079 (200, {'user': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040080 return user_fix
81
82 def _mock_tenant_create(self, id, name):
83 tenant_fix = self.useFixture(mockpatch.PatchObject(
Daniel Melladob04da902015-11-20 17:43:12 +010084 json_tenants_client.TenantsClient,
Matthew Treinishcb058062014-03-13 18:27:07 -040085 'create_tenant',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080086 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053087 (200, {'tenant': {'id': id, 'name': name}}))))
Matthew Treinishcb058062014-03-13 18:27:07 -040088 return tenant_fix
89
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040090 def _mock_list_roles(self, id, name):
91 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +000092 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040093 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -080094 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -050095 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +053096 {'roles': [{'id': id, 'name': name},
97 {'id': '1', 'name': 'FakeRole'},
98 {'id': '2', 'name': 'Member'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +040099 return roles_fix
100
Matthew Treinish976e8df2014-12-19 14:21:54 -0500101 def _mock_list_2_roles(self):
102 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000103 json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500104 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800105 return_value=(rest_client.ResponseBody
Matthew Treinish976e8df2014-12-19 14:21:54 -0500106 (200,
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530107 {'roles': [{'id': '1234', 'name': 'role1'},
Matthew Treinish976e8df2014-12-19 14:21:54 -0500108 {'id': '1', 'name': 'FakeRole'},
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530109 {'id': '12345', 'name': 'role2'}]}))))
Matthew Treinish976e8df2014-12-19 14:21:54 -0500110 return roles_fix
111
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400112 def _mock_assign_user_role(self):
113 tenant_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000114 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400115 'assign_user_role',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800116 return_value=(rest_client.ResponseBody
David Kranzb7afa922014-12-30 10:56:26 -0500117 (200, {}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400118 return tenant_fix
119
120 def _mock_list_role(self):
121 roles_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado6b16b922015-12-07 12:43:08 +0000122 json_roles_client.RolesClient,
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400123 'list_roles',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800124 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530125 (200, {'roles': [{'id': '1',
126 'name': 'FakeRole'}]}))))
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400127 return roles_fix
128
Andrea Frittoli32d74992015-03-06 17:01:07 +0000129 def _mock_list_ec2_credentials(self, user_id, tenant_id):
130 ec2_creds_fix = self.useFixture(mockpatch.PatchObject(
Daniel Mellado82c83a52015-12-09 15:16:49 +0000131 json_users_client.UsersClient,
Andrea Frittoli32d74992015-03-06 17:01:07 +0000132 'list_user_ec2_credentials',
Ken'ichi Ohmichi54030522016-03-02 11:01:34 -0800133 return_value=(rest_client.ResponseBody
Anusha Ramineni0cfb4612015-08-24 08:49:10 +0530134 (200, {'credentials': [{
135 'access': 'fake_access',
136 'secret': 'fake_secret',
137 'tenant_id': tenant_id,
138 'user_id': user_id,
139 'trust_id': None}]}))))
Andrea Frittoli32d74992015-03-06 17:01:07 +0000140 return ec2_creds_fix
141
Matthew Treinishe6723262014-03-14 13:16:52 -0400142 def _mock_network_create(self, iso_creds, id, name):
143 net_fix = self.useFixture(mockpatch.PatchObject(
John Warren94d8faf2015-09-15 12:22:24 -0400144 iso_creds.networks_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400145 'create_network',
David Kranz34e88122014-12-11 15:24:05 -0500146 return_value={'network': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400147 return net_fix
148
149 def _mock_subnet_create(self, iso_creds, id, name):
150 subnet_fix = self.useFixture(mockpatch.PatchObject(
John Warren3961acd2015-10-02 14:38:53 -0400151 iso_creds.subnets_admin_client,
Matthew Treinishe6723262014-03-14 13:16:52 -0400152 'create_subnet',
David Kranz34e88122014-12-11 15:24:05 -0500153 return_value={'subnet': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400154 return subnet_fix
155
156 def _mock_router_create(self, id, name):
157 router_fix = self.useFixture(mockpatch.PatchObject(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000158 routers_client.RoutersClient,
Matthew Treinishe6723262014-03-14 13:16:52 -0400159 'create_router',
David Kranz34e88122014-12-11 15:24:05 -0500160 return_value={'router': {'id': id, 'name': name}}))
Matthew Treinishe6723262014-03-14 13:16:52 -0400161 return router_fix
162
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500163 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400164 def test_primary_creds(self, MockRestClient):
165 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100166 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400167 self._mock_assign_user_role()
168 self._mock_list_role()
Matthew Treinishcb058062014-03-13 18:27:07 -0400169 self._mock_tenant_create('1234', 'fake_prim_tenant')
170 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700171 primary_creds = creds.get_primary_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000172 self.assertEqual(primary_creds.username, 'fake_prim_user')
173 self.assertEqual(primary_creds.tenant_name, 'fake_prim_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000174 # Verify IDs
175 self.assertEqual(primary_creds.tenant_id, '1234')
176 self.assertEqual(primary_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400177
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500178 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400179 def test_admin_creds(self, MockRestClient):
180 cfg.CONF.set_default('neutron', False, 'service_available')
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_list_roles('1234', 'admin')
Matthew Treinishcb058062014-03-13 18:27:07 -0400183 self._mock_user_create('1234', 'fake_admin_user')
184 self._mock_tenant_create('1234', 'fake_admin_tenant')
Matthew Treinishcb058062014-03-13 18:27:07 -0400185
Daniel Mellado6b16b922015-12-07 12:43:08 +0000186 user_mock = mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400187 'assign_user_role')
Matthew Treinishcb058062014-03-13 18:27:07 -0400188 user_mock.start()
189 self.addCleanup(user_mock.stop)
Daniel Mellado6b16b922015-12-07 12:43:08 +0000190 with mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400191 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700192 admin_creds = creds.get_admin_creds()
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400193 user_mock.assert_has_calls([
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400194 mock.call('1234', '1234', '1234')])
Andrea Frittolifc315902014-03-20 09:21:44 +0000195 self.assertEqual(admin_creds.username, 'fake_admin_user')
196 self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000197 # Verify IDs
198 self.assertEqual(admin_creds.tenant_id, '1234')
199 self.assertEqual(admin_creds.user_id, '1234')
Matthew Treinishcb058062014-03-13 18:27:07 -0400200
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500201 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish976e8df2014-12-19 14:21:54 -0500202 def test_role_creds(self, MockRestClient):
203 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100204 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500205 self._mock_list_2_roles()
206 self._mock_user_create('1234', 'fake_role_user')
207 self._mock_tenant_create('1234', 'fake_role_tenant')
208
Daniel Mellado6b16b922015-12-07 12:43:08 +0000209 user_mock = mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500210 'assign_user_role')
211 user_mock.start()
212 self.addCleanup(user_mock.stop)
Daniel Mellado6b16b922015-12-07 12:43:08 +0000213 with mock.patch.object(json_roles_client.RolesClient,
Matthew Treinish976e8df2014-12-19 14:21:54 -0500214 'assign_user_role') as user_mock:
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700215 role_creds = creds.get_creds_by_roles(
216 roles=['role1', 'role2'])
Matthew Treinish976e8df2014-12-19 14:21:54 -0500217 calls = user_mock.mock_calls
218 # Assert that the role creation is called with the 2 specified roles
Matthew Treinish8f268292015-02-24 20:01:36 -0500219 self.assertEqual(len(calls), 2)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500220 args = map(lambda x: x[1], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400221 args = list(args)
Matthew Treinish976e8df2014-12-19 14:21:54 -0500222 self.assertIn(('1234', '1234', '1234'), args)
223 self.assertIn(('1234', '1234', '12345'), args)
224 self.assertEqual(role_creds.username, 'fake_role_user')
225 self.assertEqual(role_creds.tenant_name, 'fake_role_tenant')
226 # Verify IDs
227 self.assertEqual(role_creds.tenant_id, '1234')
228 self.assertEqual(role_creds.user_id, '1234')
229
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500230 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishcb058062014-03-13 18:27:07 -0400231 def test_all_cred_cleanup(self, MockRestClient):
232 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100233 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400234 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400235 self._mock_list_role()
236 self._mock_tenant_create('1234', 'fake_prim_tenant')
237 self._mock_user_create('1234', 'fake_prim_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700238 creds.get_primary_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400239 self._mock_tenant_create('12345', 'fake_alt_tenant')
240 self._mock_user_create('12345', 'fake_alt_user')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700241 creds.get_alt_creds()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400242 self._mock_tenant_create('123456', 'fake_admin_tenant')
243 self._mock_user_create('123456', 'fake_admin_user')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400244 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700245 creds.get_admin_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400246 user_mock = self.patch(
Daniel Mellado82c83a52015-12-09 15:16:49 +0000247 'tempest.services.identity.v2.json.users_client.'
248 'UsersClient.delete_user')
Matthew Treinishcb058062014-03-13 18:27:07 -0400249 tenant_mock = self.patch(
Daniel Melladob04da902015-11-20 17:43:12 +0100250 'tempest.services.identity.v2.json.tenants_client.'
251 'TenantsClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700252 creds.clear_creds()
Matthew Treinishcb058062014-03-13 18:27:07 -0400253 # Verify user delete calls
254 calls = user_mock.mock_calls
255 self.assertEqual(len(calls), 3)
256 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400257 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400258 self.assertIn('1234', args)
259 self.assertIn('12345', args)
260 self.assertIn('123456', args)
261 # Verify tenant delete calls
262 calls = tenant_mock.mock_calls
263 self.assertEqual(len(calls), 3)
264 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400265 args = list(args)
Matthew Treinishcb058062014-03-13 18:27:07 -0400266 self.assertIn('1234', args)
267 self.assertIn('12345', args)
268 self.assertIn('123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400269
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500270 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400271 def test_alt_creds(self, MockRestClient):
272 cfg.CONF.set_default('neutron', False, 'service_available')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100273 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400274 self._mock_assign_user_role()
275 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400276 self._mock_user_create('1234', 'fake_alt_user')
277 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700278 alt_creds = creds.get_alt_creds()
Andrea Frittolifc315902014-03-20 09:21:44 +0000279 self.assertEqual(alt_creds.username, 'fake_alt_user')
280 self.assertEqual(alt_creds.tenant_name, 'fake_alt_tenant')
Andrea Frittoli9612e812014-03-13 10:57:26 +0000281 # Verify IDs
282 self.assertEqual(alt_creds.tenant_id, '1234')
283 self.assertEqual(alt_creds.user_id, '1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400284
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500285 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish2219d382015-04-24 10:33:04 -0400286 def test_no_network_creation_with_config_set(self, MockRestClient):
287 cfg.CONF.set_default('create_isolated_networks', False, group='auth')
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100288 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinish2219d382015-04-24 10:33:04 -0400289 self._mock_assign_user_role()
290 self._mock_list_role()
291 self._mock_user_create('1234', 'fake_prim_user')
292 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700293 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400294 'delete_network')
295 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400296 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400297 'delete_subnet')
298 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000299 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish2219d382015-04-24 10:33:04 -0400300 'delete_router')
301 router_mock = router.start()
302
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700303 primary_creds = creds.get_primary_creds()
Matthew Treinish2219d382015-04-24 10:33:04 -0400304 self.assertEqual(net_mock.mock_calls, [])
305 self.assertEqual(subnet_mock.mock_calls, [])
306 self.assertEqual(router_mock.mock_calls, [])
307 network = primary_creds.network
308 subnet = primary_creds.subnet
309 router = primary_creds.router
310 self.assertIsNone(network)
311 self.assertIsNone(subnet)
312 self.assertIsNone(router)
313
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500314 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400315 def test_network_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100316 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400317 self._mock_assign_user_role()
318 self._mock_list_role()
Matthew Treinishe6723262014-03-14 13:16:52 -0400319 self._mock_user_create('1234', 'fake_prim_user')
320 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700321 self._mock_network_create(creds, '1234', 'fake_net')
322 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400323 self._mock_router_create('1234', 'fake_router')
324 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000325 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530326 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700327 primary_creds = creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530328 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400329 network = primary_creds.network
330 subnet = primary_creds.subnet
331 router = primary_creds.router
Matthew Treinishe6723262014-03-14 13:16:52 -0400332 self.assertEqual(network['id'], '1234')
333 self.assertEqual(network['name'], 'fake_net')
334 self.assertEqual(subnet['id'], '1234')
335 self.assertEqual(subnet['name'], 'fake_subnet')
336 self.assertEqual(router['id'], '1234')
337 self.assertEqual(router['name'], 'fake_router')
338
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500339 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinishe6723262014-03-14 13:16:52 -0400340 def test_network_cleanup(self, MockRestClient):
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100341 def side_effect(**args):
David Kranz34e88122014-12-11 15:24:05 -0500342 return {"security_groups": [{"tenant_id": args['tenant_id'],
343 "name": args['name'],
344 "description": args['name'],
345 "security_group_rules": [],
346 "id": "sg-%s" % args['tenant_id']}]}
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100347 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Matthew Treinishe6723262014-03-14 13:16:52 -0400348 # Create primary tenant and network
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400349 self._mock_assign_user_role()
Matthew Treinishbe15b872015-06-29 14:29:30 -0400350 self._mock_list_role()
351 self._mock_user_create('1234', 'fake_prim_user')
352 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700353 self._mock_network_create(creds, '1234', 'fake_net')
354 self._mock_subnet_create(creds, '1234', 'fake_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400355 self._mock_router_create('1234', 'fake_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400356 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000357 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530358 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700359 creds.get_primary_creds()
piyush11078694aca952015-12-17 12:54:44 +0530360 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Matthew Treinishe6723262014-03-14 13:16:52 -0400361 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400362 # Create alternate tenant and network
Matthew Treinishbe15b872015-06-29 14:29:30 -0400363 self._mock_user_create('12345', 'fake_alt_user')
364 self._mock_tenant_create('12345', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700365 self._mock_network_create(creds, '12345', 'fake_alt_net')
366 self._mock_subnet_create(creds, '12345', 'fake_alt_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400367 self._mock_router_create('12345', 'fake_alt_router')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700368 creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530369 router_interface_mock.assert_called_once_with('12345',
370 subnet_id='12345')
Matthew Treinishe6723262014-03-14 13:16:52 -0400371 router_interface_mock.reset_mock()
Matthew Treinishe6723262014-03-14 13:16:52 -0400372 # Create admin tenant and networks
Matthew Treinishbe15b872015-06-29 14:29:30 -0400373 self._mock_user_create('123456', 'fake_admin_user')
374 self._mock_tenant_create('123456', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700375 self._mock_network_create(creds, '123456', 'fake_admin_net')
376 self._mock_subnet_create(creds, '123456', 'fake_admin_subnet')
Matthew Treinishbe15b872015-06-29 14:29:30 -0400377 self._mock_router_create('123456', 'fake_admin_router')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400378 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700379 creds.get_admin_creds()
Daniel Mellado82c83a52015-12-09 15:16:49 +0000380 self.patch('tempest.services.identity.v2.json.users_client.'
381 'UsersClient.delete_user')
Daniel Melladob04da902015-11-20 17:43:12 +0100382 self.patch('tempest.services.identity.v2.json.tenants_client.'
383 'TenantsClient.delete_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700384 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400385 'delete_network')
Matthew Treinishe6723262014-03-14 13:16:52 -0400386 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400387 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400388 'delete_subnet')
Matthew Treinishe6723262014-03-14 13:16:52 -0400389 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000390 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400391 'delete_router')
Matthew Treinishe6723262014-03-14 13:16:52 -0400392 router_mock = router.start()
393 remove_router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000394 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530395 'remove_router_interface')
Matthew Treinish96e9e882014-06-09 18:37:19 -0400396 return_values = ({'status': 200}, {'ports': []})
John Warren49c0fe52015-10-22 12:35:54 -0400397 port_list_mock = mock.patch.object(creds.ports_admin_client,
Matthew Treinish96e9e882014-06-09 18:37:19 -0400398 'list_ports',
399 return_value=return_values)
400
Matthew Treinishe6723262014-03-14 13:16:52 -0400401 port_list_mock.start()
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700402 secgroup_list_mock = mock.patch.object(
John Warrenf9606e92015-12-10 12:12:42 -0500403 creds.security_groups_admin_client,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700404 'list_security_groups',
405 side_effect=side_effect)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100406 secgroup_list_mock.start()
407
408 return_values = (fake_http.fake_httplib({}, status=204), {})
409 remove_secgroup_mock = self.patch(
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500410 'tempest.lib.services.network.security_groups_client.'
John Warrenf9606e92015-12-10 12:12:42 -0500411 'SecurityGroupsClient.delete', return_value=return_values)
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700412 creds.clear_creds()
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100413 # Verify default security group delete
414 calls = remove_secgroup_mock.mock_calls
415 self.assertEqual(len(calls), 3)
416 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400417 args = list(args)
Ala Rezmerita846eb7c2014-03-10 09:06:03 +0100418 self.assertIn('v2.0/security-groups/sg-1234', args)
419 self.assertIn('v2.0/security-groups/sg-12345', args)
420 self.assertIn('v2.0/security-groups/sg-123456', args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400421 # Verify remove router interface calls
422 calls = remove_router_interface_mock.mock_calls
423 self.assertEqual(len(calls), 3)
piyush11078694aca952015-12-17 12:54:44 +0530424 args = map(lambda x: (x[1][0], x[2]), calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400425 args = list(args)
piyush11078694aca952015-12-17 12:54:44 +0530426 self.assertIn(('1234', {'subnet_id': '1234'}), args)
427 self.assertIn(('12345', {'subnet_id': '12345'}), args)
428 self.assertIn(('123456', {'subnet_id': '123456'}), args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400429 # Verify network delete calls
430 calls = net_mock.mock_calls
431 self.assertEqual(len(calls), 3)
432 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400433 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400434 self.assertIn('1234', args)
435 self.assertIn('12345', args)
436 self.assertIn('123456', args)
437 # Verify subnet delete calls
438 calls = subnet_mock.mock_calls
439 self.assertEqual(len(calls), 3)
440 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400441 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400442 self.assertIn('1234', args)
443 self.assertIn('12345', args)
444 self.assertIn('123456', args)
445 # Verify router delete calls
446 calls = router_mock.mock_calls
447 self.assertEqual(len(calls), 3)
448 args = map(lambda x: x[1][0], calls)
Matthew Treinishdc060d02015-04-23 14:20:26 -0400449 args = list(args)
Matthew Treinishe6723262014-03-14 13:16:52 -0400450 self.assertIn('1234', args)
451 self.assertIn('12345', args)
452 self.assertIn('123456', args)
Matthew Treinish23433a02014-03-17 16:43:50 -0400453
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500454 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400455 def test_network_alt_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100456 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400457 self._mock_assign_user_role()
458 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400459 self._mock_user_create('1234', 'fake_alt_user')
460 self._mock_tenant_create('1234', 'fake_alt_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700461 self._mock_network_create(creds, '1234', 'fake_alt_net')
462 self._mock_subnet_create(creds, '1234', 'fake_alt_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400463 self._mock_router_create('1234', 'fake_alt_router')
464 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000465 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530466 'add_router_interface')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700467 alt_creds = creds.get_alt_creds()
piyush11078694aca952015-12-17 12:54:44 +0530468 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400469 network = alt_creds.network
470 subnet = alt_creds.subnet
471 router = alt_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400472 self.assertEqual(network['id'], '1234')
473 self.assertEqual(network['name'], 'fake_alt_net')
474 self.assertEqual(subnet['id'], '1234')
475 self.assertEqual(subnet['name'], 'fake_alt_subnet')
476 self.assertEqual(router['id'], '1234')
477 self.assertEqual(router['name'], 'fake_alt_router')
478
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500479 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400480 def test_network_admin_creation(self, MockRestClient):
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100481 creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400482 self._mock_assign_user_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400483 self._mock_user_create('1234', 'fake_admin_user')
484 self._mock_tenant_create('1234', 'fake_admin_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700485 self._mock_network_create(creds, '1234', 'fake_admin_net')
486 self._mock_subnet_create(creds, '1234', 'fake_admin_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400487 self._mock_router_create('1234', 'fake_admin_router')
488 router_interface_mock = self.patch(
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000489 'tempest.services.network.json.routers_client.RoutersClient.'
piyush11078694aca952015-12-17 12:54:44 +0530490 'add_router_interface')
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400491 self._mock_list_roles('123456', 'admin')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700492 admin_creds = creds.get_admin_creds()
piyush11078694aca952015-12-17 12:54:44 +0530493 router_interface_mock.assert_called_once_with('1234', subnet_id='1234')
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400494 network = admin_creds.network
495 subnet = admin_creds.subnet
496 router = admin_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400497 self.assertEqual(network['id'], '1234')
498 self.assertEqual(network['name'], 'fake_admin_net')
499 self.assertEqual(subnet['id'], '1234')
500 self.assertEqual(subnet['name'], 'fake_admin_subnet')
501 self.assertEqual(router['id'], '1234')
502 self.assertEqual(router['name'], 'fake_admin_router')
503
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500504 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400505 def test_no_network_resources(self, MockRestClient):
506 net_dict = {
507 'network': False,
508 'router': False,
509 'subnet': False,
510 'dhcp': False,
511 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700512 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100513 network_resources=net_dict,
514 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400515 self._mock_assign_user_role()
516 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400517 self._mock_user_create('1234', 'fake_prim_user')
518 self._mock_tenant_create('1234', 'fake_prim_tenant')
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700519 net = mock.patch.object(creds.networks_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400520 'delete_network')
Matthew Treinish23433a02014-03-17 16:43:50 -0400521 net_mock = net.start()
John Warren3961acd2015-10-02 14:38:53 -0400522 subnet = mock.patch.object(creds.subnets_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400523 'delete_subnet')
Matthew Treinish23433a02014-03-17 16:43:50 -0400524 subnet_mock = subnet.start()
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000525 router = mock.patch.object(creds.routers_admin_client,
Matthew Treinish5c660ab2014-05-18 21:14:36 -0400526 'delete_router')
Matthew Treinish23433a02014-03-17 16:43:50 -0400527 router_mock = router.start()
528
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700529 primary_creds = creds.get_primary_creds()
Matthew Treinish23433a02014-03-17 16:43:50 -0400530 self.assertEqual(net_mock.mock_calls, [])
531 self.assertEqual(subnet_mock.mock_calls, [])
532 self.assertEqual(router_mock.mock_calls, [])
Andrea Frittoli (andreaf)9540dfd2015-03-25 17:06:50 -0400533 network = primary_creds.network
534 subnet = primary_creds.subnet
535 router = primary_creds.router
Matthew Treinish23433a02014-03-17 16:43:50 -0400536 self.assertIsNone(network)
537 self.assertIsNone(subnet)
538 self.assertIsNone(router)
539
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500540 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400541 def test_router_without_network(self, MockRestClient):
542 net_dict = {
543 'network': False,
544 'router': True,
545 'subnet': False,
546 'dhcp': False,
547 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700548 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100549 network_resources=net_dict,
550 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400551 self._mock_assign_user_role()
552 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400553 self._mock_user_create('1234', 'fake_prim_user')
554 self._mock_tenant_create('1234', 'fake_prim_tenant')
555 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700556 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400557
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500558 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400559 def test_subnet_without_network(self, MockRestClient):
560 net_dict = {
561 'network': False,
562 'router': False,
563 'subnet': True,
564 'dhcp': False,
565 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700566 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100567 network_resources=net_dict,
568 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400569 self._mock_assign_user_role()
570 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400571 self._mock_user_create('1234', 'fake_prim_user')
572 self._mock_tenant_create('1234', 'fake_prim_tenant')
573 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700574 creds.get_primary_creds)
Matthew Treinish23433a02014-03-17 16:43:50 -0400575
Andrea Frittoli (andreaf)db9672e2016-02-23 14:07:24 -0500576 @mock.patch('tempest.lib.common.rest_client.RestClient')
Matthew Treinish23433a02014-03-17 16:43:50 -0400577 def test_dhcp_without_subnet(self, MockRestClient):
578 net_dict = {
579 'network': False,
580 'router': False,
581 'subnet': False,
582 'dhcp': True,
583 }
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700584 creds = dynamic_creds.DynamicCredentialProvider(
Andrea Frittoli (andreaf)32d0de12015-10-09 14:43:53 +0100585 network_resources=net_dict,
586 **self.fixed_params)
Andrey Pavlovaf1fb702014-05-29 17:08:10 +0400587 self._mock_assign_user_role()
588 self._mock_list_role()
Matthew Treinish23433a02014-03-17 16:43:50 -0400589 self._mock_user_create('1234', 'fake_prim_user')
590 self._mock_tenant_create('1234', 'fake_prim_tenant')
591 self.assertRaises(exceptions.InvalidConfiguration,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700592 creds.get_primary_creds)