blob: b0e74fbed3a862fde7d13621783926f1da504cf9 [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
19from tempest.cmd import verify_tempest_config
Matthew Treinishd14c9df2014-04-27 00:54:25 -040020from tempest import config
Brant Knudson28de8d52016-03-18 13:50:02 -050021from tempest.lib.common.utils import data_utils
Matthew Treinishffad78a2016-04-16 14:39:52 -040022from tempest.tests import base
Matthew Treinishd14c9df2014-04-27 00:54:25 -040023from tempest.tests import fake_config
Matthew Treinish9b896242014-04-23 21:25:27 +000024
25
26class TestGetAPIVersions(base.TestCase):
27
Brant Knudson28de8d52016-03-18 13:50:02 -050028 def test_remove_version_project(self):
29 f = verify_tempest_config._remove_version_project
30 self.assertEqual('/', f('/v2.1/%s/' % data_utils.rand_uuid_hex()))
31 self.assertEqual('', f('/v2.1/tenant_id'))
32 self.assertEqual('', f('/v3'))
33 self.assertEqual('/', f('/v3/'))
34 self.assertEqual('/something/', f('/something/v2.1/tenant_id/'))
35 self.assertEqual('/something', f('/something/v2.1/tenant_id'))
36 self.assertEqual('/something', f('/something/v3'))
37 self.assertEqual('/something/', f('/something/v3/'))
38 self.assertEqual('/', f('/')) # http://localhost/
39 self.assertEqual('', f('')) # http://localhost
40
Matthew Treinish9b896242014-04-23 21:25:27 +000041 def test_url_grab_versioned_nova_nossl(self):
42 base_url = 'http://127.0.0.1:8774/v2/'
43 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
Brant Knudson28de8d52016-03-18 13:50:02 -050044 self.assertEqual('http://127.0.0.1:8774/', endpoint)
Matthew Treinish9b896242014-04-23 21:25:27 +000045
46 def test_url_grab_versioned_nova_ssl(self):
47 base_url = 'https://127.0.0.1:8774/v3/'
48 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
Brant Knudson28de8d52016-03-18 13:50:02 -050049 self.assertEqual('https://127.0.0.1:8774/', endpoint)
50
51 def test_get_unversioned_endpoint_base(self):
52 base_url = 'https://127.0.0.1:5000/'
53 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
54 self.assertEqual('https://127.0.0.1:5000/', endpoint)
55
56 def test_get_unversioned_endpoint_subpath(self):
57 base_url = 'https://127.0.0.1/identity/v3'
58 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
59 self.assertEqual('https://127.0.0.1/identity', endpoint)
60
61 def test_get_unversioned_endpoint_subpath_trailing_solidus(self):
62 base_url = 'https://127.0.0.1/identity/v3/'
63 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
64 self.assertEqual('https://127.0.0.1/identity/', endpoint)
Matthew Treinishd14c9df2014-04-27 00:54:25 -040065
66
67class TestDiscovery(base.TestCase):
68
69 def setUp(self):
70 super(TestDiscovery, self).setUp()
71 self.useFixture(fake_config.ConfigFixture())
Jordan Pittier0021c292016-03-29 21:33:34 +020072 self.patchobject(config, 'TempestConfigPrivate',
73 fake_config.FakePrivate)
Matthew Treinishd14c9df2014-04-27 00:54:25 -040074
75 def test_get_keystone_api_versions(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070076 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -040077 verify_tempest_config, '_get_unversioned_endpoint',
78 return_value='http://fake_endpoint:5000'))
79 fake_resp = {'versions': {'values': [{'id': 'v2.0'}, {'id': 'v3.0'}]}}
80 fake_resp = json.dumps(fake_resp)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070081 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +010082 'tempest.lib.common.http.ClosingHttp.request',
83 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -040084 fake_os = mock.MagicMock()
85 versions = verify_tempest_config._get_api_versions(fake_os, 'keystone')
86 self.assertIn('v2.0', versions)
87 self.assertIn('v3.0', versions)
88
89 def test_get_cinder_api_versions(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070090 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -040091 verify_tempest_config, '_get_unversioned_endpoint',
92 return_value='http://fake_endpoint:5000'))
93 fake_resp = {'versions': [{'id': 'v1.0'}, {'id': 'v2.0'}]}
94 fake_resp = json.dumps(fake_resp)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +070095 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +010096 'tempest.lib.common.http.ClosingHttp.request',
97 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -040098 fake_os = mock.MagicMock()
99 versions = verify_tempest_config._get_api_versions(fake_os, 'cinder')
100 self.assertIn('v1.0', versions)
101 self.assertIn('v2.0', versions)
102
103 def test_get_nova_versions(self):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700104 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400105 verify_tempest_config, '_get_unversioned_endpoint',
106 return_value='http://fake_endpoint:5000'))
107 fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]}
108 fake_resp = json.dumps(fake_resp)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700109 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +0100110 'tempest.lib.common.http.ClosingHttp.request',
111 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400112 fake_os = mock.MagicMock()
113 versions = verify_tempest_config._get_api_versions(fake_os, 'nova')
114 self.assertIn('v2.0', versions)
115 self.assertIn('v3.0', versions)
116
Brant Knudson5a59f872016-03-18 13:07:00 -0500117 def test_get_versions_invalid_response(self):
118 # When the response doesn't contain a JSON response, an error is
119 # logged.
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700120 mock_log_error = self.useFixture(fixtures.MockPatchObject(
Brant Knudson5a59f872016-03-18 13:07:00 -0500121 verify_tempest_config.LOG, 'error')).mock
122
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700123 self.useFixture(fixtures.MockPatchObject(
Brant Knudson5a59f872016-03-18 13:07:00 -0500124 verify_tempest_config, '_get_unversioned_endpoint'))
125
126 # Simulated response is not JSON.
127 sample_body = (
128 '<html><head>Sample Response</head><body>This is the sample page '
129 'for the web server. Why are you requesting it?</body></html>')
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700130 self.useFixture(fixtures.MockPatch(
Jordan Pittier00f25962016-03-18 17:10:07 +0100131 'tempest.lib.common.http.ClosingHttp.request',
132 return_value=(None, sample_body)))
Brant Knudson5a59f872016-03-18 13:07:00 -0500133
134 # service value doesn't matter, just needs to match what
135 # _get_api_versions puts in its client_dict.
136 self.assertRaises(ValueError, verify_tempest_config._get_api_versions,
137 os=mock.MagicMock(), service='keystone')
138 self.assertTrue(mock_log_error.called)
139
Adam Gandelman03af5562014-10-07 12:22:48 -0700140 def test_verify_api_versions(self):
Ken'ichi Ohmichia58c1562014-12-15 00:39:55 +0000141 api_services = ['cinder', 'glance', 'keystone']
Adam Gandelman03af5562014-10-07 12:22:48 -0700142 fake_os = mock.MagicMock()
143 for svc in api_services:
144 m = 'verify_%s_api_versions' % svc
145 with mock.patch.object(verify_tempest_config, m) as verify_mock:
146 verify_tempest_config.verify_api_versions(fake_os, svc, True)
147 verify_mock.assert_called_once_with(fake_os, True)
148
149 def test_verify_api_versions_not_implemented(self):
Ken'ichi Ohmichia58c1562014-12-15 00:39:55 +0000150 api_services = ['cinder', 'glance', 'keystone']
Adam Gandelman03af5562014-10-07 12:22:48 -0700151 fake_os = mock.MagicMock()
152 for svc in api_services:
153 m = 'verify_%s_api_versions' % svc
154 with mock.patch.object(verify_tempest_config, m) as verify_mock:
155 verify_tempest_config.verify_api_versions(fake_os, 'foo', True)
156 self.assertFalse(verify_mock.called)
157
Jordan Pittier00f25962016-03-18 17:10:07 +0100158 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
159 def test_verify_keystone_api_versions_no_v3(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700160 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400161 verify_tempest_config, '_get_unversioned_endpoint',
162 return_value='http://fake_endpoint:5000'))
163 fake_resp = {'versions': {'values': [{'id': 'v2.0'}]}}
164 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100165 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400166 fake_os = mock.MagicMock()
167 with mock.patch.object(verify_tempest_config,
168 'print_and_or_update') as print_mock:
169 verify_tempest_config.verify_keystone_api_versions(fake_os, True)
170 print_mock.assert_called_once_with('api_v3',
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300171 'identity-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400172 False, True)
173
Jordan Pittier00f25962016-03-18 17:10:07 +0100174 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
175 def test_verify_keystone_api_versions_no_v2(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700176 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400177 verify_tempest_config, '_get_unversioned_endpoint',
178 return_value='http://fake_endpoint:5000'))
179 fake_resp = {'versions': {'values': [{'id': 'v3.0'}]}}
180 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100181 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400182 fake_os = mock.MagicMock()
183 with mock.patch.object(verify_tempest_config,
184 'print_and_or_update') as print_mock:
185 verify_tempest_config.verify_keystone_api_versions(fake_os, True)
186 print_mock.assert_called_once_with('api_v2',
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300187 'identity-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400188 False, True)
189
Jordan Pittier00f25962016-03-18 17:10:07 +0100190 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300191 def test_verify_cinder_api_versions_no_v3(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700192 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400193 verify_tempest_config, '_get_unversioned_endpoint',
194 return_value='http://fake_endpoint:5000'))
Ken'ichi Ohmichi7a0811e2017-03-15 17:32:09 -0700195 fake_resp = {'versions': [{'id': 'v2.0'}]}
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400196 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100197 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400198 fake_os = mock.MagicMock()
199 with mock.patch.object(verify_tempest_config,
200 'print_and_or_update') as print_mock:
201 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
Ken'ichi Ohmichi0f107bc2017-03-17 09:55:55 -0700202 print_mock.assert_any_call('api_v3', 'volume-feature-enabled',
203 False, True)
204 self.assertEqual(1, print_mock.call_count)
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300205
206 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
207 def test_verify_cinder_api_versions_no_v2(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700208 self.useFixture(fixtures.MockPatchObject(
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300209 verify_tempest_config, '_get_unversioned_endpoint',
210 return_value='http://fake_endpoint:5000'))
Ken'ichi Ohmichi7a0811e2017-03-15 17:32:09 -0700211 fake_resp = {'versions': [{'id': 'v3.0'}]}
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300212 fake_resp = json.dumps(fake_resp)
213 mock_request.return_value = (None, fake_resp)
214 fake_os = mock.MagicMock()
215 with mock.patch.object(verify_tempest_config,
216 'print_and_or_update') as print_mock:
217 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
218 print_mock.assert_any_call('api_v2', 'volume-feature-enabled',
219 False, True)
Ken'ichi Ohmichi0f107bc2017-03-17 09:55:55 -0700220 self.assertEqual(1, print_mock.call_count)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400221
Jordan Pittier00f25962016-03-18 17:10:07 +0100222 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
223 def test_verify_cinder_api_versions_no_v1(self, mock_request):
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700224 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400225 verify_tempest_config, '_get_unversioned_endpoint',
226 return_value='http://fake_endpoint:5000'))
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300227 fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]}
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400228 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100229 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400230 fake_os = mock.MagicMock()
231 with mock.patch.object(verify_tempest_config,
232 'print_and_or_update') as print_mock:
233 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
Ken'ichi Ohmichi0f107bc2017-03-17 09:55:55 -0700234 print_mock.assert_not_called()
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400235
Julien Danjou99518762016-09-19 17:58:25 +0200236 def test_verify_glance_version_no_v2_with_v1_1(self):
237 def fake_get_versions():
238 return (None, ['v1.1'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400239 fake_os = mock.MagicMock()
Julien Danjou99518762016-09-19 17:58:25 +0200240 fake_os.image_client.get_versions = fake_get_versions
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400241 with mock.patch.object(verify_tempest_config,
242 'print_and_or_update') as print_mock:
243 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300244 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400245 False, True)
246
Julien Danjou99518762016-09-19 17:58:25 +0200247 def test_verify_glance_version_no_v2_with_v1_0(self):
248 def fake_get_versions():
249 return (None, ['v1.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400250 fake_os = mock.MagicMock()
Julien Danjou99518762016-09-19 17:58:25 +0200251 fake_os.image_client.get_versions = fake_get_versions
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400252 with mock.patch.object(verify_tempest_config,
253 'print_and_or_update') as print_mock:
254 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300255 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400256 False, True)
257
Julien Danjou99518762016-09-19 17:58:25 +0200258 def test_verify_glance_version_no_v1(self):
259 def fake_get_versions():
260 return (None, ['v2.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400261 fake_os = mock.MagicMock()
Julien Danjou99518762016-09-19 17:58:25 +0200262 fake_os.image_client.get_versions = fake_get_versions
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400263 with mock.patch.object(verify_tempest_config,
264 'print_and_or_update') as print_mock:
265 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300266 print_mock.assert_called_once_with('api_v1', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400267 False, True)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400268
269 def test_verify_extensions_neutron(self):
270 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500271 return {'extensions': [{'alias': 'fake1'},
272 {'alias': 'fake2'},
273 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400274 fake_os = mock.MagicMock()
Ken'ichi Ohmichi52bb8122016-01-26 01:43:06 +0000275 fake_os.network_extensions_client.list_extensions = (
276 fake_list_extensions)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700277 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400278 verify_tempest_config, 'get_enabled_extensions',
279 return_value=(['fake1', 'fake2', 'fake3'])))
280 results = verify_tempest_config.verify_extensions(fake_os,
281 'neutron', {})
282 self.assertIn('neutron', results)
283 self.assertIn('fake1', results['neutron'])
284 self.assertTrue(results['neutron']['fake1'])
285 self.assertIn('fake2', results['neutron'])
286 self.assertTrue(results['neutron']['fake2'])
287 self.assertIn('fake3', results['neutron'])
288 self.assertFalse(results['neutron']['fake3'])
289 self.assertIn('not_fake', results['neutron'])
290 self.assertFalse(results['neutron']['not_fake'])
291
292 def test_verify_extensions_neutron_all(self):
293 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500294 return {'extensions': [{'alias': 'fake1'},
295 {'alias': 'fake2'},
296 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400297 fake_os = mock.MagicMock()
Ken'ichi Ohmichi52bb8122016-01-26 01:43:06 +0000298 fake_os.network_extensions_client.list_extensions = (
299 fake_list_extensions)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700300 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400301 verify_tempest_config, 'get_enabled_extensions',
302 return_value=(['all'])))
303 results = verify_tempest_config.verify_extensions(fake_os,
304 'neutron', {})
305 self.assertIn('neutron', results)
306 self.assertIn('extensions', results['neutron'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400307 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
308 sorted(results['neutron']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400309
310 def test_verify_extensions_cinder(self):
311 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000312 return {'extensions': [{'alias': 'fake1'},
313 {'alias': 'fake2'},
314 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400315 fake_os = mock.MagicMock()
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300316 # NOTE (e0ne): mock both v1 and v2 APIs
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400317 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300318 fake_os.volumes_v2_extension_client.list_extensions = (
319 fake_list_extensions)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700320 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400321 verify_tempest_config, 'get_enabled_extensions',
322 return_value=(['fake1', 'fake2', 'fake3'])))
323 results = verify_tempest_config.verify_extensions(fake_os,
324 'cinder', {})
325 self.assertIn('cinder', results)
326 self.assertIn('fake1', results['cinder'])
327 self.assertTrue(results['cinder']['fake1'])
328 self.assertIn('fake2', results['cinder'])
329 self.assertTrue(results['cinder']['fake2'])
330 self.assertIn('fake3', results['cinder'])
331 self.assertFalse(results['cinder']['fake3'])
332 self.assertIn('not_fake', results['cinder'])
333 self.assertFalse(results['cinder']['not_fake'])
334
335 def test_verify_extensions_cinder_all(self):
336 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000337 return {'extensions': [{'alias': 'fake1'},
338 {'alias': 'fake2'},
339 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400340 fake_os = mock.MagicMock()
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300341 # NOTE (e0ne): mock both v1 and v2 APIs
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400342 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300343 fake_os.volumes_v2_extension_client.list_extensions = (
344 fake_list_extensions)
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700345 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400346 verify_tempest_config, 'get_enabled_extensions',
347 return_value=(['all'])))
348 results = verify_tempest_config.verify_extensions(fake_os,
349 'cinder', {})
350 self.assertIn('cinder', results)
351 self.assertIn('extensions', results['cinder'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400352 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
353 sorted(results['cinder']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400354
355 def test_verify_extensions_nova(self):
356 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500357 return ([{'alias': 'fake1'}, {'alias': 'fake2'},
358 {'alias': 'not_fake'}])
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400359 fake_os = mock.MagicMock()
360 fake_os.extensions_client.list_extensions = fake_list_extensions
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700361 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400362 verify_tempest_config, 'get_enabled_extensions',
363 return_value=(['fake1', 'fake2', 'fake3'])))
364 results = verify_tempest_config.verify_extensions(fake_os,
365 'nova', {})
366 self.assertIn('nova', results)
367 self.assertIn('fake1', results['nova'])
368 self.assertTrue(results['nova']['fake1'])
369 self.assertIn('fake2', results['nova'])
370 self.assertTrue(results['nova']['fake2'])
371 self.assertIn('fake3', results['nova'])
372 self.assertFalse(results['nova']['fake3'])
373 self.assertIn('not_fake', results['nova'])
374 self.assertFalse(results['nova']['not_fake'])
375
376 def test_verify_extensions_nova_all(self):
377 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500378 return ({'extensions': [{'alias': 'fake1'},
379 {'alias': 'fake2'},
380 {'alias': 'not_fake'}]})
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400381 fake_os = mock.MagicMock()
382 fake_os.extensions_client.list_extensions = fake_list_extensions
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700383 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400384 verify_tempest_config, 'get_enabled_extensions',
385 return_value=(['all'])))
386 results = verify_tempest_config.verify_extensions(fake_os,
387 'nova', {})
388 self.assertIn('nova', results)
389 self.assertIn('extensions', results['nova'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400390 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
391 sorted(results['nova']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400392
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400393 def test_verify_extensions_swift(self):
394 def fake_list_extensions():
395 return (None, {'fake1': 'metadata',
396 'fake2': 'metadata',
397 'not_fake': 'metadata',
398 'swift': 'metadata'})
399 fake_os = mock.MagicMock()
ghanshyamf29831d2016-12-12 18:45:23 +0900400 fake_os.capabilities_client.list_capabilities = fake_list_extensions
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700401 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400402 verify_tempest_config, 'get_enabled_extensions',
403 return_value=(['fake1', 'fake2', 'fake3'])))
404 results = verify_tempest_config.verify_extensions(fake_os, 'swift', {})
405 self.assertIn('swift', results)
406 self.assertIn('fake1', results['swift'])
407 self.assertTrue(results['swift']['fake1'])
408 self.assertIn('fake2', results['swift'])
409 self.assertTrue(results['swift']['fake2'])
410 self.assertIn('fake3', results['swift'])
411 self.assertFalse(results['swift']['fake3'])
412 self.assertIn('not_fake', results['swift'])
413 self.assertFalse(results['swift']['not_fake'])
414
415 def test_verify_extensions_swift_all(self):
416 def fake_list_extensions():
417 return (None, {'fake1': 'metadata',
418 'fake2': 'metadata',
419 'not_fake': 'metadata',
420 'swift': 'metadata'})
421 fake_os = mock.MagicMock()
ghanshyamf29831d2016-12-12 18:45:23 +0900422 fake_os.capabilities_client.list_capabilities = fake_list_extensions
Ngo Quoc Cuong33710b32017-05-11 14:17:17 +0700423 self.useFixture(fixtures.MockPatchObject(
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400424 verify_tempest_config, 'get_enabled_extensions',
425 return_value=(['all'])))
426 results = verify_tempest_config.verify_extensions(fake_os,
427 'swift', {})
428 self.assertIn('swift', results)
429 self.assertIn('extensions', results['swift'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400430 self.assertEqual(sorted(['not_fake', 'fake1', 'fake2']),
431 sorted(results['swift']['extensions']))