blob: 8641b638f40a18d0c77f3c6e51657ca21bfb6014 [file] [log] [blame]
Matthew Treinish9b896242014-04-23 21:25:27 +00001# Copyright 2014 IBM Corp.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070015import fixtures
Matthew Treinishd14c9df2014-04-27 00:54:25 -040016import mock
Matthew Treinish21905512015-07-13 10:33:35 -040017from oslo_serialization import jsonutils as json
Matthew Treinish9b896242014-04-23 21:25:27 +000018
Andrea Frittolib33dd462017-07-21 10:14:25 +010019from tempest import clients
Matthew Treinish9b896242014-04-23 21:25:27 +000020from tempest.cmd import verify_tempest_config
Andrea Frittolib33dd462017-07-21 10:14:25 +010021from tempest.common import credentials_factory
Matthew Treinishd14c9df2014-04-27 00:54:25 -040022from tempest import config
Andrea Frittolib33dd462017-07-21 10:14:25 +010023from tempest.lib.common import rest_client
Brant Knudson28de8d52016-03-18 13:50:02 -050024from tempest.lib.common.utils import data_utils
Andrea Frittolib33dd462017-07-21 10:14:25 +010025from tempest.lib import exceptions as lib_exc
Matthew Treinishffad78a2016-04-16 14:39:52 -040026from tempest.tests import base
Matthew Treinishd14c9df2014-04-27 00:54:25 -040027from tempest.tests import fake_config
Matthew Treinish9b896242014-04-23 21:25:27 +000028
29
30class TestGetAPIVersions(base.TestCase):
31
Brant Knudson28de8d52016-03-18 13:50:02 -050032 def test_remove_version_project(self):
33 f = verify_tempest_config._remove_version_project
34 self.assertEqual('/', f('/v2.1/%s/' % data_utils.rand_uuid_hex()))
35 self.assertEqual('', f('/v2.1/tenant_id'))
36 self.assertEqual('', f('/v3'))
37 self.assertEqual('/', f('/v3/'))
38 self.assertEqual('/something/', f('/something/v2.1/tenant_id/'))
39 self.assertEqual('/something', f('/something/v2.1/tenant_id'))
40 self.assertEqual('/something', f('/something/v3'))
41 self.assertEqual('/something/', f('/something/v3/'))
42 self.assertEqual('/', f('/')) # http://localhost/
43 self.assertEqual('', f('')) # http://localhost
44
Matthew Treinish9b896242014-04-23 21:25:27 +000045 def test_url_grab_versioned_nova_nossl(self):
46 base_url = 'http://127.0.0.1:8774/v2/'
47 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
Brant Knudson28de8d52016-03-18 13:50:02 -050048 self.assertEqual('http://127.0.0.1:8774/', endpoint)
Matthew Treinish9b896242014-04-23 21:25:27 +000049
50 def test_url_grab_versioned_nova_ssl(self):
51 base_url = 'https://127.0.0.1:8774/v3/'
52 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
Brant Knudson28de8d52016-03-18 13:50:02 -050053 self.assertEqual('https://127.0.0.1:8774/', endpoint)
54
55 def test_get_unversioned_endpoint_base(self):
56 base_url = 'https://127.0.0.1:5000/'
57 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
58 self.assertEqual('https://127.0.0.1:5000/', endpoint)
59
60 def test_get_unversioned_endpoint_subpath(self):
61 base_url = 'https://127.0.0.1/identity/v3'
62 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
63 self.assertEqual('https://127.0.0.1/identity', endpoint)
64
65 def test_get_unversioned_endpoint_subpath_trailing_solidus(self):
66 base_url = 'https://127.0.0.1/identity/v3/'
67 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
68 self.assertEqual('https://127.0.0.1/identity/', endpoint)
Matthew Treinishd14c9df2014-04-27 00:54:25 -040069
70
71class TestDiscovery(base.TestCase):
72
73 def setUp(self):
74 super(TestDiscovery, self).setUp()
75 self.useFixture(fake_config.ConfigFixture())
Jordan Pittier0021c292016-03-29 21:33:34 +020076 self.patchobject(config, 'TempestConfigPrivate',
77 fake_config.FakePrivate)
Matthew Treinishd14c9df2014-04-27 00:54:25 -040078
79 def test_get_keystone_api_versions(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070080 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -040081 verify_tempest_config, '_get_unversioned_endpoint',
82 return_value='http://fake_endpoint:5000'))
83 fake_resp = {'versions': {'values': [{'id': 'v2.0'}, {'id': 'v3.0'}]}}
84 fake_resp = json.dumps(fake_resp)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070085 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +010086 'tempest.lib.common.http.ClosingHttp.request',
87 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -040088 fake_os = mock.MagicMock()
89 versions = verify_tempest_config._get_api_versions(fake_os, 'keystone')
90 self.assertIn('v2.0', versions)
91 self.assertIn('v3.0', versions)
92
93 def test_get_cinder_api_versions(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070094 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -040095 verify_tempest_config, '_get_unversioned_endpoint',
96 return_value='http://fake_endpoint:5000'))
97 fake_resp = {'versions': [{'id': 'v1.0'}, {'id': 'v2.0'}]}
98 fake_resp = json.dumps(fake_resp)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070099 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +0100100 'tempest.lib.common.http.ClosingHttp.request',
101 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400102 fake_os = mock.MagicMock()
103 versions = verify_tempest_config._get_api_versions(fake_os, 'cinder')
104 self.assertIn('v1.0', versions)
105 self.assertIn('v2.0', versions)
106
107 def test_get_nova_versions(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700108 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400109 verify_tempest_config, '_get_unversioned_endpoint',
110 return_value='http://fake_endpoint:5000'))
111 fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]}
112 fake_resp = json.dumps(fake_resp)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700113 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +0100114 'tempest.lib.common.http.ClosingHttp.request',
115 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400116 fake_os = mock.MagicMock()
117 versions = verify_tempest_config._get_api_versions(fake_os, 'nova')
118 self.assertIn('v2.0', versions)
119 self.assertIn('v3.0', versions)
120
Brant Knudson5a59f872016-03-18 13:07:00 -0500121 def test_get_versions_invalid_response(self):
122 # When the response doesn't contain a JSON response, an error is
123 # logged.
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700124 mock_log_error = self.useFixture(fixtures.MockPatchObject(
Brant Knudson5a59f872016-03-18 13:07:00 -0500125 verify_tempest_config.LOG, 'error')).mock
126
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700127 self.useFixture(fixtures.MockPatchObject(
Brant Knudson5a59f872016-03-18 13:07:00 -0500128 verify_tempest_config, '_get_unversioned_endpoint'))
129
130 # Simulated response is not JSON.
131 sample_body = (
132 '<html><head>Sample Response</head><body>This is the sample page '
133 'for the web server. Why are you requesting it?</body></html>')
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700134 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +0100135 'tempest.lib.common.http.ClosingHttp.request',
136 return_value=(None, sample_body)))
Brant Knudson5a59f872016-03-18 13:07:00 -0500137
138 # service value doesn't matter, just needs to match what
139 # _get_api_versions puts in its client_dict.
140 self.assertRaises(ValueError, verify_tempest_config._get_api_versions,
141 os=mock.MagicMock(), service='keystone')
142 self.assertTrue(mock_log_error.called)
143
Adam Gandelman03af5562014-10-07 12:22:48 -0700144 def test_verify_api_versions(self):
Ken'ichi Ohmichia58c1562014-12-15 00:39:55 +0000145 api_services = ['cinder', 'glance', 'keystone']
Adam Gandelman03af5562014-10-07 12:22:48 -0700146 fake_os = mock.MagicMock()
147 for svc in api_services:
148 m = 'verify_%s_api_versions' % svc
149 with mock.patch.object(verify_tempest_config, m) as verify_mock:
150 verify_tempest_config.verify_api_versions(fake_os, svc, True)
151 verify_mock.assert_called_once_with(fake_os, True)
152
153 def test_verify_api_versions_not_implemented(self):
Ken'ichi Ohmichia58c1562014-12-15 00:39:55 +0000154 api_services = ['cinder', 'glance', 'keystone']
Adam Gandelman03af5562014-10-07 12:22:48 -0700155 fake_os = mock.MagicMock()
156 for svc in api_services:
157 m = 'verify_%s_api_versions' % svc
158 with mock.patch.object(verify_tempest_config, m) as verify_mock:
159 verify_tempest_config.verify_api_versions(fake_os, 'foo', True)
160 self.assertFalse(verify_mock.called)
161
Jordan Pittier00f25962016-03-18 17:10:07 +0100162 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
163 def test_verify_keystone_api_versions_no_v3(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700164 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400165 verify_tempest_config, '_get_unversioned_endpoint',
166 return_value='http://fake_endpoint:5000'))
167 fake_resp = {'versions': {'values': [{'id': 'v2.0'}]}}
168 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100169 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400170 fake_os = mock.MagicMock()
171 with mock.patch.object(verify_tempest_config,
172 'print_and_or_update') as print_mock:
173 verify_tempest_config.verify_keystone_api_versions(fake_os, True)
174 print_mock.assert_called_once_with('api_v3',
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300175 'identity-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400176 False, True)
177
Jordan Pittier00f25962016-03-18 17:10:07 +0100178 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300179 def test_verify_cinder_api_versions_no_v3(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700180 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400181 verify_tempest_config, '_get_unversioned_endpoint',
182 return_value='http://fake_endpoint:5000'))
Ken'ichi Ohmichi7a0811e2017-03-15 17:32:09 -0700183 fake_resp = {'versions': [{'id': 'v2.0'}]}
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400184 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100185 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400186 fake_os = mock.MagicMock()
187 with mock.patch.object(verify_tempest_config,
188 'print_and_or_update') as print_mock:
189 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
Ken'ichi Ohmichi0f107bc2017-03-17 09:55:55 -0700190 print_mock.assert_any_call('api_v3', 'volume-feature-enabled',
191 False, True)
192 self.assertEqual(1, print_mock.call_count)
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300193
194 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
195 def test_verify_cinder_api_versions_no_v2(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700196 self.useFixture(fixtures.MockPatchObject(
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300197 verify_tempest_config, '_get_unversioned_endpoint',
198 return_value='http://fake_endpoint:5000'))
Ken'ichi Ohmichi7a0811e2017-03-15 17:32:09 -0700199 fake_resp = {'versions': [{'id': 'v3.0'}]}
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300200 fake_resp = json.dumps(fake_resp)
201 mock_request.return_value = (None, fake_resp)
202 fake_os = mock.MagicMock()
203 with mock.patch.object(verify_tempest_config,
204 'print_and_or_update') as print_mock:
205 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
206 print_mock.assert_any_call('api_v2', 'volume-feature-enabled',
207 False, True)
Ken'ichi Ohmichi0f107bc2017-03-17 09:55:55 -0700208 self.assertEqual(1, print_mock.call_count)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400209
Jordan Pittier00f25962016-03-18 17:10:07 +0100210 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
211 def test_verify_cinder_api_versions_no_v1(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700212 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400213 verify_tempest_config, '_get_unversioned_endpoint',
214 return_value='http://fake_endpoint:5000'))
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300215 fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]}
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400216 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100217 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400218 fake_os = mock.MagicMock()
219 with mock.patch.object(verify_tempest_config,
220 'print_and_or_update') as print_mock:
221 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
Ken'ichi Ohmichi0f107bc2017-03-17 09:55:55 -0700222 print_mock.assert_not_called()
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400223
Julien Danjou99518762016-09-19 17:58:25 +0200224 def test_verify_glance_version_no_v2_with_v1_1(self):
Andrea Frittolib33dd462017-07-21 10:14:25 +0100225 # This test verifies that wrong config api_v2 = True is detected
226 class FakeClient(object):
227 def get_versions(self):
228 return (None, ['v1.0'])
229
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400230 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100231 fake_module = mock.MagicMock()
232 fake_module.ImagesClient = FakeClient
233 fake_os.image_v1 = fake_module
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400234 with mock.patch.object(verify_tempest_config,
235 'print_and_or_update') as print_mock:
236 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300237 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400238 False, True)
239
Julien Danjou99518762016-09-19 17:58:25 +0200240 def test_verify_glance_version_no_v2_with_v1_0(self):
Andrea Frittolib33dd462017-07-21 10:14:25 +0100241 # This test verifies that wrong config api_v2 = True is detected
242 class FakeClient(object):
243 def get_versions(self):
244 return (None, ['v1.0'])
245
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400246 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100247 fake_module = mock.MagicMock()
248 fake_module.ImagesClient = FakeClient
249 fake_os.image_v1 = fake_module
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400250 with mock.patch.object(verify_tempest_config,
251 'print_and_or_update') as print_mock:
252 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300253 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400254 False, True)
255
Julien Danjou99518762016-09-19 17:58:25 +0200256 def test_verify_glance_version_no_v1(self):
Andrea Frittolib33dd462017-07-21 10:14:25 +0100257 # This test verifies that wrong config api_v1 = True is detected
258 class FakeClient(object):
259 def get_versions(self):
260 raise lib_exc.NotFound()
261
262 def list_versions(self):
263 return {'versions': [{'id': 'v2.0'}]}
264
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400265 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100266 fake_module = mock.MagicMock()
267 fake_module.ImagesClient = FakeClient
268 fake_module.VersionsClient = FakeClient
269 fake_os.image_v1 = fake_module
270 fake_os.image_v2 = fake_module
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400271 with mock.patch.object(verify_tempest_config,
272 'print_and_or_update') as print_mock:
273 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300274 print_mock.assert_called_once_with('api_v1', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400275 False, True)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400276
Andrea Frittolib33dd462017-07-21 10:14:25 +0100277 def test_verify_glance_version_no_version(self):
278 # This test verifies that wrong config api_v1 = True is detected
279 class FakeClient(object):
280 def get_versions(self):
281 raise lib_exc.NotFound()
282
283 def list_versions(self):
284 raise lib_exc.NotFound()
285
286 fake_os = mock.MagicMock()
287 fake_module = mock.MagicMock()
288 fake_module.ImagesClient = FakeClient
289 fake_module.VersionsClient = FakeClient
290 fake_os.image_v1 = fake_module
291 fake_os.image_v2 = fake_module
292 with mock.patch.object(verify_tempest_config,
293 'print_and_or_update') as print_mock:
294 verify_tempest_config.verify_glance_api_versions(fake_os, True)
295 print_mock.assert_called_once_with('glance',
296 'service-available',
297 False, True)
298
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400299 def test_verify_extensions_neutron(self):
300 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500301 return {'extensions': [{'alias': 'fake1'},
302 {'alias': 'fake2'},
303 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400304 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100305 fake_client = mock.MagicMock()
306 fake_client.list_extensions = fake_list_extensions
307 self.useFixture(fixtures.MockPatchObject(
308 verify_tempest_config, 'get_extension_client',
309 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700310 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400311 verify_tempest_config, 'get_enabled_extensions',
312 return_value=(['fake1', 'fake2', 'fake3'])))
313 results = verify_tempest_config.verify_extensions(fake_os,
314 'neutron', {})
315 self.assertIn('neutron', results)
316 self.assertIn('fake1', results['neutron'])
317 self.assertTrue(results['neutron']['fake1'])
318 self.assertIn('fake2', results['neutron'])
319 self.assertTrue(results['neutron']['fake2'])
320 self.assertIn('fake3', results['neutron'])
321 self.assertFalse(results['neutron']['fake3'])
322 self.assertIn('not_fake', results['neutron'])
323 self.assertFalse(results['neutron']['not_fake'])
324
325 def test_verify_extensions_neutron_all(self):
326 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500327 return {'extensions': [{'alias': 'fake1'},
328 {'alias': 'fake2'},
329 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400330 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100331 fake_client = mock.MagicMock()
332 fake_client.list_extensions = fake_list_extensions
333 self.useFixture(fixtures.MockPatchObject(
334 verify_tempest_config, 'get_extension_client',
335 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700336 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400337 verify_tempest_config, 'get_enabled_extensions',
338 return_value=(['all'])))
339 results = verify_tempest_config.verify_extensions(fake_os,
340 'neutron', {})
341 self.assertIn('neutron', results)
342 self.assertIn('extensions', results['neutron'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400343 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
344 sorted(results['neutron']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400345
346 def test_verify_extensions_cinder(self):
347 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000348 return {'extensions': [{'alias': 'fake1'},
349 {'alias': 'fake2'},
350 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400351 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100352 fake_client = mock.MagicMock()
353 fake_client.list_extensions = fake_list_extensions
354 self.useFixture(fixtures.MockPatchObject(
355 verify_tempest_config, 'get_extension_client',
356 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700357 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400358 verify_tempest_config, 'get_enabled_extensions',
359 return_value=(['fake1', 'fake2', 'fake3'])))
360 results = verify_tempest_config.verify_extensions(fake_os,
361 'cinder', {})
Andrea Frittolib33dd462017-07-21 10:14:25 +0100362
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400363 self.assertIn('cinder', results)
364 self.assertIn('fake1', results['cinder'])
365 self.assertTrue(results['cinder']['fake1'])
366 self.assertIn('fake2', results['cinder'])
367 self.assertTrue(results['cinder']['fake2'])
368 self.assertIn('fake3', results['cinder'])
369 self.assertFalse(results['cinder']['fake3'])
370 self.assertIn('not_fake', results['cinder'])
371 self.assertFalse(results['cinder']['not_fake'])
372
373 def test_verify_extensions_cinder_all(self):
374 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000375 return {'extensions': [{'alias': 'fake1'},
376 {'alias': 'fake2'},
377 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400378 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100379 fake_client = mock.MagicMock()
380 fake_client.list_extensions = fake_list_extensions
381 self.useFixture(fixtures.MockPatchObject(
382 verify_tempest_config, 'get_extension_client',
383 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700384 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400385 verify_tempest_config, 'get_enabled_extensions',
386 return_value=(['all'])))
387 results = verify_tempest_config.verify_extensions(fake_os,
388 'cinder', {})
389 self.assertIn('cinder', results)
390 self.assertIn('extensions', results['cinder'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400391 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
392 sorted(results['cinder']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400393
394 def test_verify_extensions_nova(self):
395 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500396 return ([{'alias': 'fake1'}, {'alias': 'fake2'},
397 {'alias': 'not_fake'}])
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400398 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100399 fake_client = mock.MagicMock()
400 fake_client.list_extensions = fake_list_extensions
401 self.useFixture(fixtures.MockPatchObject(
402 verify_tempest_config, 'get_extension_client',
403 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700404 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400405 verify_tempest_config, 'get_enabled_extensions',
406 return_value=(['fake1', 'fake2', 'fake3'])))
407 results = verify_tempest_config.verify_extensions(fake_os,
408 'nova', {})
409 self.assertIn('nova', results)
410 self.assertIn('fake1', results['nova'])
411 self.assertTrue(results['nova']['fake1'])
412 self.assertIn('fake2', results['nova'])
413 self.assertTrue(results['nova']['fake2'])
414 self.assertIn('fake3', results['nova'])
415 self.assertFalse(results['nova']['fake3'])
416 self.assertIn('not_fake', results['nova'])
417 self.assertFalse(results['nova']['not_fake'])
418
419 def test_verify_extensions_nova_all(self):
420 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500421 return ({'extensions': [{'alias': 'fake1'},
422 {'alias': 'fake2'},
423 {'alias': 'not_fake'}]})
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400424 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100425 fake_client = mock.MagicMock()
426 fake_client.list_extensions = fake_list_extensions
427 self.useFixture(fixtures.MockPatchObject(
428 verify_tempest_config, 'get_extension_client',
429 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700430 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400431 verify_tempest_config, 'get_enabled_extensions',
432 return_value=(['all'])))
433 results = verify_tempest_config.verify_extensions(fake_os,
434 'nova', {})
435 self.assertIn('nova', results)
436 self.assertIn('extensions', results['nova'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400437 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
438 sorted(results['nova']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400439
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400440 def test_verify_extensions_swift(self):
441 def fake_list_extensions():
ghanshyam17d8a482017-07-21 03:10:48 +0000442 return {'fake1': 'metadata',
443 'fake2': 'metadata',
444 'not_fake': 'metadata',
445 'swift': 'metadata'}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400446 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100447 fake_client = mock.MagicMock()
448 fake_client.list_capabilities = fake_list_extensions
449 self.useFixture(fixtures.MockPatchObject(
450 verify_tempest_config, 'get_extension_client',
451 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700452 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400453 verify_tempest_config, 'get_enabled_extensions',
454 return_value=(['fake1', 'fake2', 'fake3'])))
455 results = verify_tempest_config.verify_extensions(fake_os, 'swift', {})
456 self.assertIn('swift', results)
457 self.assertIn('fake1', results['swift'])
458 self.assertTrue(results['swift']['fake1'])
459 self.assertIn('fake2', results['swift'])
460 self.assertTrue(results['swift']['fake2'])
461 self.assertIn('fake3', results['swift'])
462 self.assertFalse(results['swift']['fake3'])
463 self.assertIn('not_fake', results['swift'])
464 self.assertFalse(results['swift']['not_fake'])
465
466 def test_verify_extensions_swift_all(self):
467 def fake_list_extensions():
ghanshyam17d8a482017-07-21 03:10:48 +0000468 return {'fake1': 'metadata',
469 'fake2': 'metadata',
470 'not_fake': 'metadata',
471 'swift': 'metadata'}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400472 fake_os = mock.MagicMock()
Andrea Frittolib33dd462017-07-21 10:14:25 +0100473 fake_client = mock.MagicMock()
474 fake_client.list_capabilities = fake_list_extensions
475 self.useFixture(fixtures.MockPatchObject(
476 verify_tempest_config, 'get_extension_client',
477 return_value=fake_client))
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700478 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400479 verify_tempest_config, 'get_enabled_extensions',
480 return_value=(['all'])))
481 results = verify_tempest_config.verify_extensions(fake_os,
482 'swift', {})
483 self.assertIn('swift', results)
484 self.assertIn('extensions', results['swift'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400485 self.assertEqual(sorted(['not_fake', 'fake1', 'fake2']),
486 sorted(results['swift']['extensions']))
Andrea Frittolib33dd462017-07-21 10:14:25 +0100487
488 def test_get_extension_client(self):
489 creds = credentials_factory.get_credentials(
490 fill_in=False, username='fake_user', project_name='fake_project',
491 password='fake_password')
492 os = clients.Manager(creds)
493 for service in ['nova', 'neutron', 'swift', 'cinder']:
494 extensions_client = verify_tempest_config.get_extension_client(
495 os, service)
496 self.assertIsInstance(extensions_client, rest_client.RestClient)