blob: 8a1158dde07eb4c7bc559796ba25f18d15c30313 [file] [log] [blame]
Andrea Frittoli17347f02017-07-26 16:18:30 +01001# Copyright 2017 IBM Corp.
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Sean McGinniseed80742020-04-18 12:01:03 -050016from unittest import mock
17
Andrea Frittoli17347f02017-07-26 16:18:30 +010018from oslo_config import cfg
19import testtools
20
21from tempest.common import credentials_factory as cf
22from tempest import config
23from tempest.lib.common import dynamic_creds
24from tempest.lib.common import preprov_creds
25from tempest.lib import exceptions
26from tempest.tests import base
27from tempest.tests import fake_config
28from tempest.tests.lib import fake_credentials
29
30
31class TestCredentialsFactory(base.TestCase):
32
33 def setUp(self):
34 super(TestCredentialsFactory, self).setUp()
35 self.useFixture(fake_config.ConfigFixture())
36 self.patchobject(config, 'TempestConfigPrivate',
37 fake_config.FakePrivate)
38
39 def test_get_dynamic_provider_params_creds_v2(self):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +090040 expected_uri = 'http://v2.identy.example.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +010041 cfg.CONF.set_default('uri', expected_uri, group='identity')
42 admin_creds = fake_credentials.FakeCredentials()
43 params = cf.get_dynamic_provider_params('v2', admin_creds=admin_creds)
44 expected_params = dict(identity_uri=expected_uri,
45 admin_creds=admin_creds)
46 for key in expected_params:
47 self.assertIn(key, params)
48 self.assertEqual(expected_params[key], params[key])
49
50 def test_get_dynamic_provider_params_creds_v3(self):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +090051 expected_uri = 'http://v3.identy.example.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +010052 cfg.CONF.set_default('uri_v3', expected_uri, group='identity')
53 admin_creds = fake_credentials.FakeCredentials()
54 params = cf.get_dynamic_provider_params('v3', admin_creds=admin_creds)
55 expected_params = dict(identity_uri=expected_uri,
56 admin_creds=admin_creds)
57 for key in expected_params:
58 self.assertIn(key, params)
59 self.assertEqual(expected_params[key], params[key])
60
61 def test_get_dynamic_provider_params_creds_vx(self):
62 admin_creds = fake_credentials.FakeCredentials()
63 invalid_version = 'invalid_version_x'
64 with testtools.ExpectedException(
65 exc_type=exceptions.InvalidIdentityVersion,
66 value_re='Invalid version ' + invalid_version):
67 cf.get_dynamic_provider_params(invalid_version,
68 admin_creds=admin_creds)
69
70 def test_get_dynamic_provider_params_no_creds(self):
71 expected_identity_version = 'v3'
72 with mock.patch.object(
73 cf, 'get_configured_admin_credentials') as admin_creds_mock:
74 cf.get_dynamic_provider_params(expected_identity_version)
75 admin_creds_mock.assert_called_once_with(
76 fill_in=True, identity_version=expected_identity_version)
77
78 def test_get_preprov_provider_params_creds_v2(self):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +090079 expected_uri = 'http://v2.identy.example.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +010080 cfg.CONF.set_default('uri', expected_uri, group='identity')
81 params = cf.get_preprov_provider_params('v2')
82 self.assertIn('identity_uri', params)
83 self.assertEqual(expected_uri, params['identity_uri'])
84
85 def test_get_preprov_provider_params_creds_v3(self):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +090086 expected_uri = 'http://v3.identy.example.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +010087 cfg.CONF.set_default('uri_v3', expected_uri, group='identity')
88 params = cf.get_preprov_provider_params('v3')
89 self.assertIn('identity_uri', params)
90 self.assertEqual(expected_uri, params['identity_uri'])
91
92 def test_get_preprov_provider_params_creds_vx(self):
93 invalid_version = 'invalid_version_x'
94 with testtools.ExpectedException(
95 exc_type=exceptions.InvalidIdentityVersion,
96 value_re='Invalid version ' + invalid_version):
97 cf.get_dynamic_provider_params(invalid_version)
98
99 @mock.patch.object(dynamic_creds, 'DynamicCredentialProvider')
100 @mock.patch.object(cf, 'get_dynamic_provider_params')
101 def test_get_credentials_provider_dynamic(
102 self, mock_dynamic_provider_params,
103 mock_dynamic_credentials_provider_class):
104 cfg.CONF.set_default('use_dynamic_credentials', True, group='auth')
105 expected_params = {'foo': 'bar'}
106 mock_dynamic_provider_params.return_value = expected_params
107 expected_name = 'my_name'
108 expected_network_resources = {'network': 'resources'}
109 expected_identity_version = 'identity_version'
110 cf.get_credentials_provider(
111 expected_name,
112 network_resources=expected_network_resources,
113 force_tenant_isolation=False,
114 identity_version=expected_identity_version)
115 mock_dynamic_provider_params.assert_called_once_with(
116 expected_identity_version)
117 mock_dynamic_credentials_provider_class.assert_called_once_with(
118 name=expected_name, network_resources=expected_network_resources,
119 **expected_params)
120
121 @mock.patch.object(preprov_creds, 'PreProvisionedCredentialProvider')
122 @mock.patch.object(cf, 'get_preprov_provider_params')
123 def test_get_credentials_provider_preprov(
124 self, mock_preprov_provider_params,
125 mock_preprov_credentials_provider_class):
126 cfg.CONF.set_default('use_dynamic_credentials', False, group='auth')
127 cfg.CONF.set_default('test_accounts_file', '/some/file', group='auth')
128 expected_params = {'foo': 'bar'}
129 mock_preprov_provider_params.return_value = expected_params
130 expected_name = 'my_name'
131 expected_identity_version = 'identity_version'
132 cf.get_credentials_provider(
133 expected_name,
134 force_tenant_isolation=False,
135 identity_version=expected_identity_version)
136 mock_preprov_provider_params.assert_called_once_with(
137 expected_identity_version)
138 mock_preprov_credentials_provider_class.assert_called_once_with(
139 name=expected_name, **expected_params)
140
141 def test_get_credentials_provider_preprov_no_file(self):
142 cfg.CONF.set_default('use_dynamic_credentials', False, group='auth')
143 cfg.CONF.set_default('test_accounts_file', None, group='auth')
144 with testtools.ExpectedException(
145 exc_type=exceptions.InvalidConfiguration):
146 cf.get_credentials_provider(
147 'some_name',
148 force_tenant_isolation=False,
149 identity_version='some_version')
150
151 @mock.patch.object(dynamic_creds, 'DynamicCredentialProvider')
152 @mock.patch.object(cf, 'get_dynamic_provider_params')
153 def test_get_credentials_provider_force_dynamic(
154 self, mock_dynamic_provider_params,
155 mock_dynamic_credentials_provider_class):
156 cfg.CONF.set_default('use_dynamic_credentials', False, group='auth')
157 expected_params = {'foo': 'bar'}
158 mock_dynamic_provider_params.return_value = expected_params
159 expected_name = 'my_name'
160 expected_network_resources = {'network': 'resources'}
161 expected_identity_version = 'identity_version'
162 cf.get_credentials_provider(
163 expected_name,
164 network_resources=expected_network_resources,
165 force_tenant_isolation=True,
166 identity_version=expected_identity_version)
167 mock_dynamic_provider_params.assert_called_once_with(
168 expected_identity_version)
169 mock_dynamic_credentials_provider_class.assert_called_once_with(
170 name=expected_name, network_resources=expected_network_resources,
171 **expected_params)
172
173 @mock.patch.object(cf, 'get_credentials')
174 def test_get_configured_admin_credentials(self, mock_get_credentials):
175 cfg.CONF.set_default('auth_version', 'v3', 'identity')
Colleen Murphycd0bbbd2019-10-01 16:18:36 -0700176 all_params = [
177 ('admin_username', 'username', 'my_name'),
178 ('admin_user_domain_name', 'user_domain_name', 'my_dname'),
179 ('admin_password', 'password', 'secret'),
180 ('admin_project_name', 'project_name', 'my_pname'),
181 ('admin_project_domain_name', 'project_domain_name', 'my_dname'),
182 ('admin_domain_name', 'domain_name', 'my_dname'),
183 ('admin_system', 'system', None),
184 ]
Andrea Frittoli17347f02017-07-26 16:18:30 +0100185 expected_result = 'my_admin_credentials'
186 mock_get_credentials.return_value = expected_result
187 for config_item, _, value in all_params:
188 cfg.CONF.set_default(config_item, value, 'auth')
189 # Build the expected params
190 expected_params = dict(
191 [(field, value) for _, field, value in all_params])
Andrea Frittolicad70e22017-08-16 13:19:04 +0100192 expected_params.update(config.service_client_config())
Andrea Frittoli17347f02017-07-26 16:18:30 +0100193 admin_creds = cf.get_configured_admin_credentials()
194 mock_get_credentials.assert_called_once_with(
195 fill_in=True, identity_version='v3', **expected_params)
196 self.assertEqual(expected_result, admin_creds)
197
198 @mock.patch.object(cf, 'get_credentials')
199 def test_get_configured_admin_credentials_not_fill_valid(
200 self, mock_get_credentials):
201 cfg.CONF.set_default('auth_version', 'v2', 'identity')
Colleen Murphycd0bbbd2019-10-01 16:18:36 -0700202 all_params = [
203 ('admin_username', 'username', 'my_name'),
204 ('admin_user_domain_name', 'user_domain_name', 'my_dname'),
205 ('admin_password', 'password', 'secret'),
206 ('admin_project_domain_name', 'project_domain_name', 'my_dname'),
207 ('admin_project_name', 'project_name', 'my_pname'),
208 ('admin_domain_name', 'domain_name', 'my_dname'),
209 ('admin_system', 'system', None),
210 ]
Andrea Frittoli17347f02017-07-26 16:18:30 +0100211 expected_result = mock.Mock()
212 expected_result.is_valid.return_value = True
213 mock_get_credentials.return_value = expected_result
214 for config_item, _, value in all_params:
215 cfg.CONF.set_default(config_item, value, 'auth')
216 # Build the expected params
217 expected_params = dict(
218 [(field, value) for _, field, value in all_params])
Andrea Frittolicad70e22017-08-16 13:19:04 +0100219 expected_params.update(config.service_client_config())
Andrea Frittoli17347f02017-07-26 16:18:30 +0100220 admin_creds = cf.get_configured_admin_credentials(
221 fill_in=False, identity_version='v3')
222 mock_get_credentials.assert_called_once_with(
223 fill_in=False, identity_version='v3', **expected_params)
224 self.assertEqual(expected_result, admin_creds)
225 expected_result.is_valid.assert_called_once()
226
227 @mock.patch.object(cf, 'get_credentials')
228 def test_get_configured_admin_credentials_not_fill_not_valid(
229 self, mock_get_credentials):
230 cfg.CONF.set_default('auth_version', 'v2', 'identity')
231 expected_result = mock.Mock()
232 expected_result.is_valid.return_value = False
233 mock_get_credentials.return_value = expected_result
234 with testtools.ExpectedException(exceptions.InvalidConfiguration,
235 value_re='.*\n.*identity version v2'):
236 cf.get_configured_admin_credentials(fill_in=False)
237
238 @mock.patch('tempest.lib.auth.get_credentials')
239 def test_get_credentials_v2(self, mock_auth_get_credentials):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +0900240 expected_uri = 'http://v2.identity.example.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +0100241 expected_result = 'my_creds'
242 mock_auth_get_credentials.return_value = expected_result
243 cfg.CONF.set_default('uri', expected_uri, 'identity')
244 params = {'foo': 'bar'}
245 expected_params = params.copy()
Andrea Frittolicad70e22017-08-16 13:19:04 +0100246 expected_params.update(config.service_client_config())
Andrea Frittoli17347f02017-07-26 16:18:30 +0100247 result = cf.get_credentials(identity_version='v2', **params)
248 self.assertEqual(expected_result, result)
249 mock_auth_get_credentials.assert_called_once_with(
250 expected_uri, fill_in=True, identity_version='v2',
251 **expected_params)
252
253 @mock.patch('tempest.lib.auth.get_credentials')
254 def test_get_credentials_v3_no_domain(self, mock_auth_get_credentials):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +0900255 expected_uri = 'https://v3.identity.exmaple.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +0100256 expected_result = 'my_creds'
257 expected_domain = 'my_domain'
258 mock_auth_get_credentials.return_value = expected_result
259 cfg.CONF.set_default('uri_v3', expected_uri, 'identity')
260 cfg.CONF.set_default('default_credentials_domain_name',
261 expected_domain, 'auth')
262 params = {'foo': 'bar'}
263 expected_params = params.copy()
264 expected_params['domain_name'] = expected_domain
Andrea Frittolicad70e22017-08-16 13:19:04 +0100265 expected_params.update(config.service_client_config())
Andrea Frittoli17347f02017-07-26 16:18:30 +0100266 result = cf.get_credentials(fill_in=False, identity_version='v3',
267 **params)
268 self.assertEqual(expected_result, result)
269 mock_auth_get_credentials.assert_called_once_with(
270 expected_uri, fill_in=False, identity_version='v3',
271 **expected_params)
272
273 @mock.patch('tempest.lib.auth.get_credentials')
274 def test_get_credentials_v3_domain(self, mock_auth_get_credentials):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +0900275 expected_uri = 'https://v3.identity.exmaple.com'
Andrea Frittoli17347f02017-07-26 16:18:30 +0100276 expected_result = 'my_creds'
277 expected_domain = 'my_domain'
278 mock_auth_get_credentials.return_value = expected_result
279 cfg.CONF.set_default('uri_v3', expected_uri, 'identity')
280 cfg.CONF.set_default('default_credentials_domain_name',
281 expected_domain, 'auth')
282 params = {'foo': 'bar', 'user_domain_name': expected_domain}
283 expected_params = params.copy()
Andrea Frittolicad70e22017-08-16 13:19:04 +0100284 expected_params.update(config.service_client_config())
Andrea Frittoli17347f02017-07-26 16:18:30 +0100285 result = cf.get_credentials(fill_in=False, identity_version='v3',
286 **params)
287 self.assertEqual(expected_result, result)
288 mock_auth_get_credentials.assert_called_once_with(
289 expected_uri, fill_in=False, identity_version='v3',
290 **expected_params)
Colleen Murphycd0bbbd2019-10-01 16:18:36 -0700291
292 @mock.patch('tempest.lib.auth.get_credentials')
293 def test_get_credentials_v3_system(self, mock_auth_get_credentials):
Takashi Kajinami0ed15dc2024-01-24 11:09:53 +0900294 expected_uri = 'https://v3.identity.exmaple.com'
Colleen Murphycd0bbbd2019-10-01 16:18:36 -0700295 expected_result = 'my_creds'
296 mock_auth_get_credentials.return_value = expected_result
297 cfg.CONF.set_default('uri_v3', expected_uri, 'identity')
298 cfg.CONF.set_default('admin_system', 'all', 'auth')
299 params = {'system': 'all'}
300 expected_params = params.copy()
301 expected_params.update(config.service_client_config())
302 result = cf.get_credentials(fill_in=False, identity_version='v3',
303 **params)
304 self.assertEqual(expected_result, result)
305 mock_auth_get_credentials.assert_called_once_with(
306 expected_uri, fill_in=False, identity_version='v3',
307 **expected_params)