blob: 00b45421b4e1b6f3a8174eb92d6fb0885337db29 [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
Matthew Treinishd14c9df2014-04-27 00:54:25 -040015import mock
Matthew Treinish21905512015-07-13 10:33:35 -040016from oslo_serialization import jsonutils as json
Doug Hellmann583ce2c2015-03-11 14:55:46 +000017from oslotest import mockpatch
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):
76 self.useFixture(mockpatch.PatchObject(
77 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)
Jordan Pittier00f25962016-03-18 17:10:07 +010081 self.useFixture(mockpatch.Patch(
82 '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):
90 self.useFixture(mockpatch.PatchObject(
91 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)
Jordan Pittier00f25962016-03-18 17:10:07 +010095 self.useFixture(mockpatch.Patch(
96 '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):
104 self.useFixture(mockpatch.PatchObject(
105 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)
Jordan Pittier00f25962016-03-18 17:10:07 +0100109 self.useFixture(mockpatch.Patch(
110 '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.
120 mock_log_error = self.useFixture(mockpatch.PatchObject(
121 verify_tempest_config.LOG, 'error')).mock
122
123 self.useFixture(mockpatch.PatchObject(
124 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>')
Jordan Pittier00f25962016-03-18 17:10:07 +0100130 self.useFixture(mockpatch.Patch(
131 '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):
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400160 self.useFixture(mockpatch.PatchObject(
161 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):
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400176 self.useFixture(mockpatch.PatchObject(
177 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):
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400192 self.useFixture(mockpatch.PatchObject(
193 verify_tempest_config, '_get_unversioned_endpoint',
194 return_value='http://fake_endpoint:5000'))
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300195 fake_resp = {'versions': [{'id': 'v1.0'}, {'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)
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300202 print_mock.assert_not_called()
203
204 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
205 def test_verify_cinder_api_versions_no_v2(self, mock_request):
206 self.useFixture(mockpatch.PatchObject(
207 verify_tempest_config, '_get_unversioned_endpoint',
208 return_value='http://fake_endpoint:5000'))
209 fake_resp = {'versions': [{'id': 'v1.0'}, {'id': 'v3.0'}]}
210 fake_resp = json.dumps(fake_resp)
211 mock_request.return_value = (None, fake_resp)
212 fake_os = mock.MagicMock()
213 with mock.patch.object(verify_tempest_config,
214 'print_and_or_update') as print_mock:
215 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
216 print_mock.assert_any_call('api_v2', 'volume-feature-enabled',
217 False, True)
218 print_mock.assert_any_call('api_v3', 'volume-feature-enabled',
219 True, True)
220 self.assertEqual(2, 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):
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400224 self.useFixture(mockpatch.PatchObject(
225 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)
Nikita Gerasimov3b169cc2016-08-10 17:10:42 +0300234 print_mock.assert_any_call('api_v1', 'volume-feature-enabled',
235 False, True)
236 print_mock.assert_any_call('api_v3', 'volume-feature-enabled',
237 True, True)
238 self.assertEqual(2, print_mock.call_count)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400239
Julien Danjou99518762016-09-19 17:58:25 +0200240 def test_verify_glance_version_no_v2_with_v1_1(self):
241 def fake_get_versions():
242 return (None, ['v1.1'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400243 fake_os = mock.MagicMock()
Julien Danjou99518762016-09-19 17:58:25 +0200244 fake_os.image_client.get_versions = fake_get_versions
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400245 with mock.patch.object(verify_tempest_config,
246 'print_and_or_update') as print_mock:
247 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300248 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400249 False, True)
250
Julien Danjou99518762016-09-19 17:58:25 +0200251 def test_verify_glance_version_no_v2_with_v1_0(self):
252 def fake_get_versions():
253 return (None, ['v1.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400254 fake_os = mock.MagicMock()
Julien Danjou99518762016-09-19 17:58:25 +0200255 fake_os.image_client.get_versions = fake_get_versions
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400256 with mock.patch.object(verify_tempest_config,
257 'print_and_or_update') as print_mock:
258 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300259 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400260 False, True)
261
Julien Danjou99518762016-09-19 17:58:25 +0200262 def test_verify_glance_version_no_v1(self):
263 def fake_get_versions():
264 return (None, ['v2.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400265 fake_os = mock.MagicMock()
Julien Danjou99518762016-09-19 17:58:25 +0200266 fake_os.image_client.get_versions = fake_get_versions
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400267 with mock.patch.object(verify_tempest_config,
268 'print_and_or_update') as print_mock:
269 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300270 print_mock.assert_called_once_with('api_v1', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400271 False, True)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400272
273 def test_verify_extensions_neutron(self):
274 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500275 return {'extensions': [{'alias': 'fake1'},
276 {'alias': 'fake2'},
277 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400278 fake_os = mock.MagicMock()
Ken'ichi Ohmichi52bb8122016-01-26 01:43:06 +0000279 fake_os.network_extensions_client.list_extensions = (
280 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400281 self.useFixture(mockpatch.PatchObject(
282 verify_tempest_config, 'get_enabled_extensions',
283 return_value=(['fake1', 'fake2', 'fake3'])))
284 results = verify_tempest_config.verify_extensions(fake_os,
285 'neutron', {})
286 self.assertIn('neutron', results)
287 self.assertIn('fake1', results['neutron'])
288 self.assertTrue(results['neutron']['fake1'])
289 self.assertIn('fake2', results['neutron'])
290 self.assertTrue(results['neutron']['fake2'])
291 self.assertIn('fake3', results['neutron'])
292 self.assertFalse(results['neutron']['fake3'])
293 self.assertIn('not_fake', results['neutron'])
294 self.assertFalse(results['neutron']['not_fake'])
295
296 def test_verify_extensions_neutron_all(self):
297 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500298 return {'extensions': [{'alias': 'fake1'},
299 {'alias': 'fake2'},
300 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400301 fake_os = mock.MagicMock()
Ken'ichi Ohmichi52bb8122016-01-26 01:43:06 +0000302 fake_os.network_extensions_client.list_extensions = (
303 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400304 self.useFixture(mockpatch.PatchObject(
305 verify_tempest_config, 'get_enabled_extensions',
306 return_value=(['all'])))
307 results = verify_tempest_config.verify_extensions(fake_os,
308 'neutron', {})
309 self.assertIn('neutron', results)
310 self.assertIn('extensions', results['neutron'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400311 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
312 sorted(results['neutron']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400313
314 def test_verify_extensions_cinder(self):
315 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000316 return {'extensions': [{'alias': 'fake1'},
317 {'alias': 'fake2'},
318 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400319 fake_os = mock.MagicMock()
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300320 # NOTE (e0ne): mock both v1 and v2 APIs
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400321 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300322 fake_os.volumes_v2_extension_client.list_extensions = (
323 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400324 self.useFixture(mockpatch.PatchObject(
325 verify_tempest_config, 'get_enabled_extensions',
326 return_value=(['fake1', 'fake2', 'fake3'])))
327 results = verify_tempest_config.verify_extensions(fake_os,
328 'cinder', {})
329 self.assertIn('cinder', results)
330 self.assertIn('fake1', results['cinder'])
331 self.assertTrue(results['cinder']['fake1'])
332 self.assertIn('fake2', results['cinder'])
333 self.assertTrue(results['cinder']['fake2'])
334 self.assertIn('fake3', results['cinder'])
335 self.assertFalse(results['cinder']['fake3'])
336 self.assertIn('not_fake', results['cinder'])
337 self.assertFalse(results['cinder']['not_fake'])
338
339 def test_verify_extensions_cinder_all(self):
340 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000341 return {'extensions': [{'alias': 'fake1'},
342 {'alias': 'fake2'},
343 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400344 fake_os = mock.MagicMock()
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300345 # NOTE (e0ne): mock both v1 and v2 APIs
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400346 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300347 fake_os.volumes_v2_extension_client.list_extensions = (
348 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400349 self.useFixture(mockpatch.PatchObject(
350 verify_tempest_config, 'get_enabled_extensions',
351 return_value=(['all'])))
352 results = verify_tempest_config.verify_extensions(fake_os,
353 'cinder', {})
354 self.assertIn('cinder', results)
355 self.assertIn('extensions', results['cinder'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400356 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
357 sorted(results['cinder']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400358
359 def test_verify_extensions_nova(self):
360 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500361 return ([{'alias': 'fake1'}, {'alias': 'fake2'},
362 {'alias': 'not_fake'}])
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400363 fake_os = mock.MagicMock()
364 fake_os.extensions_client.list_extensions = fake_list_extensions
365 self.useFixture(mockpatch.PatchObject(
366 verify_tempest_config, 'get_enabled_extensions',
367 return_value=(['fake1', 'fake2', 'fake3'])))
368 results = verify_tempest_config.verify_extensions(fake_os,
369 'nova', {})
370 self.assertIn('nova', results)
371 self.assertIn('fake1', results['nova'])
372 self.assertTrue(results['nova']['fake1'])
373 self.assertIn('fake2', results['nova'])
374 self.assertTrue(results['nova']['fake2'])
375 self.assertIn('fake3', results['nova'])
376 self.assertFalse(results['nova']['fake3'])
377 self.assertIn('not_fake', results['nova'])
378 self.assertFalse(results['nova']['not_fake'])
379
380 def test_verify_extensions_nova_all(self):
381 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500382 return ({'extensions': [{'alias': 'fake1'},
383 {'alias': 'fake2'},
384 {'alias': 'not_fake'}]})
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400385 fake_os = mock.MagicMock()
386 fake_os.extensions_client.list_extensions = fake_list_extensions
387 self.useFixture(mockpatch.PatchObject(
388 verify_tempest_config, 'get_enabled_extensions',
389 return_value=(['all'])))
390 results = verify_tempest_config.verify_extensions(fake_os,
391 'nova', {})
392 self.assertIn('nova', results)
393 self.assertIn('extensions', results['nova'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400394 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
395 sorted(results['nova']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400396
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400397 def test_verify_extensions_swift(self):
398 def fake_list_extensions():
399 return (None, {'fake1': 'metadata',
400 'fake2': 'metadata',
401 'not_fake': 'metadata',
402 'swift': 'metadata'})
403 fake_os = mock.MagicMock()
404 fake_os.account_client.list_extensions = fake_list_extensions
405 self.useFixture(mockpatch.PatchObject(
406 verify_tempest_config, 'get_enabled_extensions',
407 return_value=(['fake1', 'fake2', 'fake3'])))
408 results = verify_tempest_config.verify_extensions(fake_os, 'swift', {})
409 self.assertIn('swift', results)
410 self.assertIn('fake1', results['swift'])
411 self.assertTrue(results['swift']['fake1'])
412 self.assertIn('fake2', results['swift'])
413 self.assertTrue(results['swift']['fake2'])
414 self.assertIn('fake3', results['swift'])
415 self.assertFalse(results['swift']['fake3'])
416 self.assertIn('not_fake', results['swift'])
417 self.assertFalse(results['swift']['not_fake'])
418
419 def test_verify_extensions_swift_all(self):
420 def fake_list_extensions():
421 return (None, {'fake1': 'metadata',
422 'fake2': 'metadata',
423 'not_fake': 'metadata',
424 'swift': 'metadata'})
425 fake_os = mock.MagicMock()
426 fake_os.account_client.list_extensions = fake_list_extensions
427 self.useFixture(mockpatch.PatchObject(
428 verify_tempest_config, 'get_enabled_extensions',
429 return_value=(['all'])))
430 results = verify_tempest_config.verify_extensions(fake_os,
431 'swift', {})
432 self.assertIn('swift', results)
433 self.assertIn('extensions', results['swift'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400434 self.assertEqual(sorted(['not_fake', 'fake1', 'fake2']),
435 sorted(results['swift']['extensions']))