blob: 70cbf87a587c9384284506274b670d19e048fb5c [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')
191 def test_verify_cinder_api_versions_no_v2(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'))
195 fake_resp = {'versions': [{'id': 'v1.0'}]}
196 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 Gerasimov35fbdc12015-08-07 19:58:24 +0300202 print_mock.assert_called_once_with('api_v2', 'volume-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400203 False, True)
204
Jordan Pittier00f25962016-03-18 17:10:07 +0100205 @mock.patch('tempest.lib.common.http.ClosingHttp.request')
206 def test_verify_cinder_api_versions_no_v1(self, mock_request):
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400207 self.useFixture(mockpatch.PatchObject(
208 verify_tempest_config, '_get_unversioned_endpoint',
209 return_value='http://fake_endpoint:5000'))
210 fake_resp = {'versions': [{'id': 'v2.0'}]}
211 fake_resp = json.dumps(fake_resp)
Jordan Pittier00f25962016-03-18 17:10:07 +0100212 mock_request.return_value = (None, fake_resp)
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400213 fake_os = mock.MagicMock()
214 with mock.patch.object(verify_tempest_config,
215 'print_and_or_update') as print_mock:
216 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300217 print_mock.assert_called_once_with('api_v1', 'volume-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400218 False, True)
219
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400220 def test_verify_glance_version_no_v2_with_v1_1(self):
221 def fake_get_versions():
David Kranz0df154d2015-06-02 17:02:27 -0400222 return (None, ['v1.1'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400223 fake_os = mock.MagicMock()
224 fake_os.image_client.get_versions = fake_get_versions
225 with mock.patch.object(verify_tempest_config,
226 'print_and_or_update') as print_mock:
227 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300228 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400229 False, True)
230
231 def test_verify_glance_version_no_v2_with_v1_0(self):
232 def fake_get_versions():
David Kranz0df154d2015-06-02 17:02:27 -0400233 return (None, ['v1.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400234 fake_os = mock.MagicMock()
235 fake_os.image_client.get_versions = fake_get_versions
236 with mock.patch.object(verify_tempest_config,
237 'print_and_or_update') as print_mock:
238 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300239 print_mock.assert_called_once_with('api_v2', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400240 False, True)
241
242 def test_verify_glance_version_no_v1(self):
243 def fake_get_versions():
David Kranz0df154d2015-06-02 17:02:27 -0400244 return (None, ['v2.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400245 fake_os = mock.MagicMock()
246 fake_os.image_client.get_versions = fake_get_versions
247 with mock.patch.object(verify_tempest_config,
248 'print_and_or_update') as print_mock:
249 verify_tempest_config.verify_glance_api_versions(fake_os, True)
Nikita Gerasimov35fbdc12015-08-07 19:58:24 +0300250 print_mock.assert_called_once_with('api_v1', 'image-feature-enabled',
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400251 False, True)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400252
253 def test_verify_extensions_neutron(self):
254 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500255 return {'extensions': [{'alias': 'fake1'},
256 {'alias': 'fake2'},
257 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400258 fake_os = mock.MagicMock()
Ken'ichi Ohmichi52bb8122016-01-26 01:43:06 +0000259 fake_os.network_extensions_client.list_extensions = (
260 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400261 self.useFixture(mockpatch.PatchObject(
262 verify_tempest_config, 'get_enabled_extensions',
263 return_value=(['fake1', 'fake2', 'fake3'])))
264 results = verify_tempest_config.verify_extensions(fake_os,
265 'neutron', {})
266 self.assertIn('neutron', results)
267 self.assertIn('fake1', results['neutron'])
268 self.assertTrue(results['neutron']['fake1'])
269 self.assertIn('fake2', results['neutron'])
270 self.assertTrue(results['neutron']['fake2'])
271 self.assertIn('fake3', results['neutron'])
272 self.assertFalse(results['neutron']['fake3'])
273 self.assertIn('not_fake', results['neutron'])
274 self.assertFalse(results['neutron']['not_fake'])
275
276 def test_verify_extensions_neutron_all(self):
277 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500278 return {'extensions': [{'alias': 'fake1'},
279 {'alias': 'fake2'},
280 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400281 fake_os = mock.MagicMock()
Ken'ichi Ohmichi52bb8122016-01-26 01:43:06 +0000282 fake_os.network_extensions_client.list_extensions = (
283 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400284 self.useFixture(mockpatch.PatchObject(
285 verify_tempest_config, 'get_enabled_extensions',
286 return_value=(['all'])))
287 results = verify_tempest_config.verify_extensions(fake_os,
288 'neutron', {})
289 self.assertIn('neutron', results)
290 self.assertIn('extensions', results['neutron'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400291 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
292 sorted(results['neutron']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400293
294 def test_verify_extensions_cinder(self):
295 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000296 return {'extensions': [{'alias': 'fake1'},
297 {'alias': 'fake2'},
298 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400299 fake_os = mock.MagicMock()
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300300 # NOTE (e0ne): mock both v1 and v2 APIs
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400301 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300302 fake_os.volumes_v2_extension_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=(['fake1', 'fake2', 'fake3'])))
307 results = verify_tempest_config.verify_extensions(fake_os,
308 'cinder', {})
309 self.assertIn('cinder', results)
310 self.assertIn('fake1', results['cinder'])
311 self.assertTrue(results['cinder']['fake1'])
312 self.assertIn('fake2', results['cinder'])
313 self.assertTrue(results['cinder']['fake2'])
314 self.assertIn('fake3', results['cinder'])
315 self.assertFalse(results['cinder']['fake3'])
316 self.assertIn('not_fake', results['cinder'])
317 self.assertFalse(results['cinder']['not_fake'])
318
319 def test_verify_extensions_cinder_all(self):
320 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000321 return {'extensions': [{'alias': 'fake1'},
322 {'alias': 'fake2'},
323 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400324 fake_os = mock.MagicMock()
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300325 # NOTE (e0ne): mock both v1 and v2 APIs
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400326 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
Ivan Kolodyazhnybcfc32e2015-08-06 13:31:36 +0300327 fake_os.volumes_v2_extension_client.list_extensions = (
328 fake_list_extensions)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400329 self.useFixture(mockpatch.PatchObject(
330 verify_tempest_config, 'get_enabled_extensions',
331 return_value=(['all'])))
332 results = verify_tempest_config.verify_extensions(fake_os,
333 'cinder', {})
334 self.assertIn('cinder', results)
335 self.assertIn('extensions', results['cinder'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400336 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
337 sorted(results['cinder']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400338
339 def test_verify_extensions_nova(self):
340 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500341 return ([{'alias': 'fake1'}, {'alias': 'fake2'},
342 {'alias': 'not_fake'}])
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400343 fake_os = mock.MagicMock()
344 fake_os.extensions_client.list_extensions = fake_list_extensions
345 self.useFixture(mockpatch.PatchObject(
346 verify_tempest_config, 'get_enabled_extensions',
347 return_value=(['fake1', 'fake2', 'fake3'])))
348 results = verify_tempest_config.verify_extensions(fake_os,
349 'nova', {})
350 self.assertIn('nova', results)
351 self.assertIn('fake1', results['nova'])
352 self.assertTrue(results['nova']['fake1'])
353 self.assertIn('fake2', results['nova'])
354 self.assertTrue(results['nova']['fake2'])
355 self.assertIn('fake3', results['nova'])
356 self.assertFalse(results['nova']['fake3'])
357 self.assertIn('not_fake', results['nova'])
358 self.assertFalse(results['nova']['not_fake'])
359
360 def test_verify_extensions_nova_all(self):
361 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500362 return ({'extensions': [{'alias': 'fake1'},
363 {'alias': 'fake2'},
364 {'alias': 'not_fake'}]})
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400365 fake_os = mock.MagicMock()
366 fake_os.extensions_client.list_extensions = fake_list_extensions
367 self.useFixture(mockpatch.PatchObject(
368 verify_tempest_config, 'get_enabled_extensions',
369 return_value=(['all'])))
370 results = verify_tempest_config.verify_extensions(fake_os,
371 'nova', {})
372 self.assertIn('nova', results)
373 self.assertIn('extensions', results['nova'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400374 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
375 sorted(results['nova']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400376
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400377 def test_verify_extensions_swift(self):
378 def fake_list_extensions():
379 return (None, {'fake1': 'metadata',
380 'fake2': 'metadata',
381 'not_fake': 'metadata',
382 'swift': 'metadata'})
383 fake_os = mock.MagicMock()
384 fake_os.account_client.list_extensions = fake_list_extensions
385 self.useFixture(mockpatch.PatchObject(
386 verify_tempest_config, 'get_enabled_extensions',
387 return_value=(['fake1', 'fake2', 'fake3'])))
388 results = verify_tempest_config.verify_extensions(fake_os, 'swift', {})
389 self.assertIn('swift', results)
390 self.assertIn('fake1', results['swift'])
391 self.assertTrue(results['swift']['fake1'])
392 self.assertIn('fake2', results['swift'])
393 self.assertTrue(results['swift']['fake2'])
394 self.assertIn('fake3', results['swift'])
395 self.assertFalse(results['swift']['fake3'])
396 self.assertIn('not_fake', results['swift'])
397 self.assertFalse(results['swift']['not_fake'])
398
399 def test_verify_extensions_swift_all(self):
400 def fake_list_extensions():
401 return (None, {'fake1': 'metadata',
402 'fake2': 'metadata',
403 'not_fake': 'metadata',
404 'swift': 'metadata'})
405 fake_os = mock.MagicMock()
406 fake_os.account_client.list_extensions = fake_list_extensions
407 self.useFixture(mockpatch.PatchObject(
408 verify_tempest_config, 'get_enabled_extensions',
409 return_value=(['all'])))
410 results = verify_tempest_config.verify_extensions(fake_os,
411 'swift', {})
412 self.assertIn('swift', results)
413 self.assertIn('extensions', results['swift'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400414 self.assertEqual(sorted(['not_fake', 'fake1', 'fake2']),
415 sorted(results['swift']['extensions']))