blob: 7286d7608b50536b3d7db77e06b8a6d19e07db77 [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 json
16
17import mock
Doug Hellmann583ce2c2015-03-11 14:55:46 +000018from oslotest import mockpatch
Matthew Treinish9b896242014-04-23 21:25:27 +000019
20from tempest.cmd import verify_tempest_config
Matthew Treinishd14c9df2014-04-27 00:54:25 -040021from tempest import config
Matthew Treinish9b896242014-04-23 21:25:27 +000022from 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
28 def test_url_grab_versioned_nova_nossl(self):
29 base_url = 'http://127.0.0.1:8774/v2/'
30 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
31 self.assertEqual('http://127.0.0.1:8774', endpoint)
32
33 def test_url_grab_versioned_nova_ssl(self):
34 base_url = 'https://127.0.0.1:8774/v3/'
35 endpoint = verify_tempest_config._get_unversioned_endpoint(base_url)
36 self.assertEqual('https://127.0.0.1:8774', endpoint)
Matthew Treinishd14c9df2014-04-27 00:54:25 -040037
38
39class TestDiscovery(base.TestCase):
40
41 def setUp(self):
42 super(TestDiscovery, self).setUp()
43 self.useFixture(fake_config.ConfigFixture())
44 self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
45
46 def test_get_keystone_api_versions(self):
47 self.useFixture(mockpatch.PatchObject(
48 verify_tempest_config, '_get_unversioned_endpoint',
49 return_value='http://fake_endpoint:5000'))
50 fake_resp = {'versions': {'values': [{'id': 'v2.0'}, {'id': 'v3.0'}]}}
51 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -050052 self.useFixture(mockpatch.Patch('httplib2.Http.request',
53 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -040054 fake_os = mock.MagicMock()
55 versions = verify_tempest_config._get_api_versions(fake_os, 'keystone')
56 self.assertIn('v2.0', versions)
57 self.assertIn('v3.0', versions)
58
59 def test_get_cinder_api_versions(self):
60 self.useFixture(mockpatch.PatchObject(
61 verify_tempest_config, '_get_unversioned_endpoint',
62 return_value='http://fake_endpoint:5000'))
63 fake_resp = {'versions': [{'id': 'v1.0'}, {'id': 'v2.0'}]}
64 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -050065 self.useFixture(mockpatch.Patch('httplib2.Http.request',
66 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -040067 fake_os = mock.MagicMock()
68 versions = verify_tempest_config._get_api_versions(fake_os, 'cinder')
69 self.assertIn('v1.0', versions)
70 self.assertIn('v2.0', versions)
71
72 def test_get_nova_versions(self):
73 self.useFixture(mockpatch.PatchObject(
74 verify_tempest_config, '_get_unversioned_endpoint',
75 return_value='http://fake_endpoint:5000'))
76 fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]}
77 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -050078 self.useFixture(mockpatch.Patch('httplib2.Http.request',
79 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -040080 fake_os = mock.MagicMock()
81 versions = verify_tempest_config._get_api_versions(fake_os, 'nova')
82 self.assertIn('v2.0', versions)
83 self.assertIn('v3.0', versions)
84
Adam Gandelman03af5562014-10-07 12:22:48 -070085 def test_verify_api_versions(self):
Ken'ichi Ohmichia58c1562014-12-15 00:39:55 +000086 api_services = ['cinder', 'glance', 'keystone']
Adam Gandelman03af5562014-10-07 12:22:48 -070087 fake_os = mock.MagicMock()
88 for svc in api_services:
89 m = 'verify_%s_api_versions' % svc
90 with mock.patch.object(verify_tempest_config, m) as verify_mock:
91 verify_tempest_config.verify_api_versions(fake_os, svc, True)
92 verify_mock.assert_called_once_with(fake_os, True)
93
94 def test_verify_api_versions_not_implemented(self):
Ken'ichi Ohmichia58c1562014-12-15 00:39:55 +000095 api_services = ['cinder', 'glance', 'keystone']
Adam Gandelman03af5562014-10-07 12:22:48 -070096 fake_os = mock.MagicMock()
97 for svc in api_services:
98 m = 'verify_%s_api_versions' % svc
99 with mock.patch.object(verify_tempest_config, m) as verify_mock:
100 verify_tempest_config.verify_api_versions(fake_os, 'foo', True)
101 self.assertFalse(verify_mock.called)
102
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400103 def test_verify_keystone_api_versions_no_v3(self):
104 self.useFixture(mockpatch.PatchObject(
105 verify_tempest_config, '_get_unversioned_endpoint',
106 return_value='http://fake_endpoint:5000'))
107 fake_resp = {'versions': {'values': [{'id': 'v2.0'}]}}
108 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -0500109 self.useFixture(mockpatch.Patch('httplib2.Http.request',
110 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400111 fake_os = mock.MagicMock()
112 with mock.patch.object(verify_tempest_config,
113 'print_and_or_update') as print_mock:
114 verify_tempest_config.verify_keystone_api_versions(fake_os, True)
115 print_mock.assert_called_once_with('api_v3',
116 'identity_feature_enabled',
117 False, True)
118
119 def test_verify_keystone_api_versions_no_v2(self):
120 self.useFixture(mockpatch.PatchObject(
121 verify_tempest_config, '_get_unversioned_endpoint',
122 return_value='http://fake_endpoint:5000'))
123 fake_resp = {'versions': {'values': [{'id': 'v3.0'}]}}
124 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -0500125 self.useFixture(mockpatch.Patch('httplib2.Http.request',
126 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400127 fake_os = mock.MagicMock()
128 with mock.patch.object(verify_tempest_config,
129 'print_and_or_update') as print_mock:
130 verify_tempest_config.verify_keystone_api_versions(fake_os, True)
131 print_mock.assert_called_once_with('api_v2',
132 'identity_feature_enabled',
133 False, True)
134
135 def test_verify_cinder_api_versions_no_v2(self):
136 self.useFixture(mockpatch.PatchObject(
137 verify_tempest_config, '_get_unversioned_endpoint',
138 return_value='http://fake_endpoint:5000'))
139 fake_resp = {'versions': [{'id': 'v1.0'}]}
140 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -0500141 self.useFixture(mockpatch.Patch('httplib2.Http.request',
142 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400143 fake_os = mock.MagicMock()
144 with mock.patch.object(verify_tempest_config,
145 'print_and_or_update') as print_mock:
146 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
147 print_mock.assert_called_once_with('api_v2', 'volume_feature_enabled',
148 False, True)
149
150 def test_verify_cinder_api_versions_no_v1(self):
151 self.useFixture(mockpatch.PatchObject(
152 verify_tempest_config, '_get_unversioned_endpoint',
153 return_value='http://fake_endpoint:5000'))
154 fake_resp = {'versions': [{'id': 'v2.0'}]}
155 fake_resp = json.dumps(fake_resp)
Matthew Treinishe1f32cd2015-02-17 15:06:13 -0500156 self.useFixture(mockpatch.Patch('httplib2.Http.request',
157 return_value=(None, fake_resp)))
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400158 fake_os = mock.MagicMock()
159 with mock.patch.object(verify_tempest_config,
160 'print_and_or_update') as print_mock:
161 verify_tempest_config.verify_cinder_api_versions(fake_os, True)
162 print_mock.assert_called_once_with('api_v1', 'volume_feature_enabled',
163 False, True)
164
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400165 def test_verify_glance_version_no_v2_with_v1_1(self):
166 def fake_get_versions():
David Kranz0df154d2015-06-02 17:02:27 -0400167 return (None, ['v1.1'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400168 fake_os = mock.MagicMock()
169 fake_os.image_client.get_versions = fake_get_versions
170 with mock.patch.object(verify_tempest_config,
171 'print_and_or_update') as print_mock:
172 verify_tempest_config.verify_glance_api_versions(fake_os, True)
173 print_mock.assert_called_once_with('api_v2', 'image_feature_enabled',
174 False, True)
175
176 def test_verify_glance_version_no_v2_with_v1_0(self):
177 def fake_get_versions():
David Kranz0df154d2015-06-02 17:02:27 -0400178 return (None, ['v1.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400179 fake_os = mock.MagicMock()
180 fake_os.image_client.get_versions = fake_get_versions
181 with mock.patch.object(verify_tempest_config,
182 'print_and_or_update') as print_mock:
183 verify_tempest_config.verify_glance_api_versions(fake_os, True)
184 print_mock.assert_called_once_with('api_v2', 'image_feature_enabled',
185 False, True)
186
187 def test_verify_glance_version_no_v1(self):
188 def fake_get_versions():
David Kranz0df154d2015-06-02 17:02:27 -0400189 return (None, ['v2.0'])
Matthew Treinishd14c9df2014-04-27 00:54:25 -0400190 fake_os = mock.MagicMock()
191 fake_os.image_client.get_versions = fake_get_versions
192 with mock.patch.object(verify_tempest_config,
193 'print_and_or_update') as print_mock:
194 verify_tempest_config.verify_glance_api_versions(fake_os, True)
195 print_mock.assert_called_once_with('api_v1', 'image_feature_enabled',
196 False, True)
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400197
198 def test_verify_extensions_neutron(self):
199 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500200 return {'extensions': [{'alias': 'fake1'},
201 {'alias': 'fake2'},
202 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400203 fake_os = mock.MagicMock()
204 fake_os.network_client.list_extensions = fake_list_extensions
205 self.useFixture(mockpatch.PatchObject(
206 verify_tempest_config, 'get_enabled_extensions',
207 return_value=(['fake1', 'fake2', 'fake3'])))
208 results = verify_tempest_config.verify_extensions(fake_os,
209 'neutron', {})
210 self.assertIn('neutron', results)
211 self.assertIn('fake1', results['neutron'])
212 self.assertTrue(results['neutron']['fake1'])
213 self.assertIn('fake2', results['neutron'])
214 self.assertTrue(results['neutron']['fake2'])
215 self.assertIn('fake3', results['neutron'])
216 self.assertFalse(results['neutron']['fake3'])
217 self.assertIn('not_fake', results['neutron'])
218 self.assertFalse(results['neutron']['not_fake'])
219
220 def test_verify_extensions_neutron_all(self):
221 def fake_list_extensions():
David Kranz34e88122014-12-11 15:24:05 -0500222 return {'extensions': [{'alias': 'fake1'},
223 {'alias': 'fake2'},
224 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400225 fake_os = mock.MagicMock()
226 fake_os.network_client.list_extensions = fake_list_extensions
227 self.useFixture(mockpatch.PatchObject(
228 verify_tempest_config, 'get_enabled_extensions',
229 return_value=(['all'])))
230 results = verify_tempest_config.verify_extensions(fake_os,
231 'neutron', {})
232 self.assertIn('neutron', results)
233 self.assertIn('extensions', results['neutron'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400234 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
235 sorted(results['neutron']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400236
237 def test_verify_extensions_cinder(self):
238 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000239 return {'extensions': [{'alias': 'fake1'},
240 {'alias': 'fake2'},
241 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400242 fake_os = mock.MagicMock()
243 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
244 self.useFixture(mockpatch.PatchObject(
245 verify_tempest_config, 'get_enabled_extensions',
246 return_value=(['fake1', 'fake2', 'fake3'])))
247 results = verify_tempest_config.verify_extensions(fake_os,
248 'cinder', {})
249 self.assertIn('cinder', results)
250 self.assertIn('fake1', results['cinder'])
251 self.assertTrue(results['cinder']['fake1'])
252 self.assertIn('fake2', results['cinder'])
253 self.assertTrue(results['cinder']['fake2'])
254 self.assertIn('fake3', results['cinder'])
255 self.assertFalse(results['cinder']['fake3'])
256 self.assertIn('not_fake', results['cinder'])
257 self.assertFalse(results['cinder']['not_fake'])
258
259 def test_verify_extensions_cinder_all(self):
260 def fake_list_extensions():
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000261 return {'extensions': [{'alias': 'fake1'},
262 {'alias': 'fake2'},
263 {'alias': 'not_fake'}]}
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400264 fake_os = mock.MagicMock()
265 fake_os.volumes_extension_client.list_extensions = fake_list_extensions
266 self.useFixture(mockpatch.PatchObject(
267 verify_tempest_config, 'get_enabled_extensions',
268 return_value=(['all'])))
269 results = verify_tempest_config.verify_extensions(fake_os,
270 'cinder', {})
271 self.assertIn('cinder', results)
272 self.assertIn('extensions', results['cinder'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400273 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
274 sorted(results['cinder']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400275
276 def test_verify_extensions_nova(self):
277 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500278 return ([{'alias': 'fake1'}, {'alias': 'fake2'},
279 {'alias': 'not_fake'}])
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400280 fake_os = mock.MagicMock()
281 fake_os.extensions_client.list_extensions = fake_list_extensions
282 self.useFixture(mockpatch.PatchObject(
283 verify_tempest_config, 'get_enabled_extensions',
284 return_value=(['fake1', 'fake2', 'fake3'])))
285 results = verify_tempest_config.verify_extensions(fake_os,
286 'nova', {})
287 self.assertIn('nova', results)
288 self.assertIn('fake1', results['nova'])
289 self.assertTrue(results['nova']['fake1'])
290 self.assertIn('fake2', results['nova'])
291 self.assertTrue(results['nova']['fake2'])
292 self.assertIn('fake3', results['nova'])
293 self.assertFalse(results['nova']['fake3'])
294 self.assertIn('not_fake', results['nova'])
295 self.assertFalse(results['nova']['not_fake'])
296
297 def test_verify_extensions_nova_all(self):
298 def fake_list_extensions():
David Kranz5cf4ba42015-02-10 14:00:50 -0500299 return ({'extensions': [{'alias': 'fake1'},
300 {'alias': 'fake2'},
301 {'alias': 'not_fake'}]})
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400302 fake_os = mock.MagicMock()
303 fake_os.extensions_client.list_extensions = fake_list_extensions
304 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 'nova', {})
309 self.assertIn('nova', results)
310 self.assertIn('extensions', results['nova'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400311 self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
312 sorted(results['nova']['extensions']))
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400313
Matthew Treinishfabe77c2014-04-27 10:38:00 -0400314 def test_verify_extensions_swift(self):
315 def fake_list_extensions():
316 return (None, {'fake1': 'metadata',
317 'fake2': 'metadata',
318 'not_fake': 'metadata',
319 'swift': 'metadata'})
320 fake_os = mock.MagicMock()
321 fake_os.account_client.list_extensions = fake_list_extensions
322 self.useFixture(mockpatch.PatchObject(
323 verify_tempest_config, 'get_enabled_extensions',
324 return_value=(['fake1', 'fake2', 'fake3'])))
325 results = verify_tempest_config.verify_extensions(fake_os, 'swift', {})
326 self.assertIn('swift', results)
327 self.assertIn('fake1', results['swift'])
328 self.assertTrue(results['swift']['fake1'])
329 self.assertIn('fake2', results['swift'])
330 self.assertTrue(results['swift']['fake2'])
331 self.assertIn('fake3', results['swift'])
332 self.assertFalse(results['swift']['fake3'])
333 self.assertIn('not_fake', results['swift'])
334 self.assertFalse(results['swift']['not_fake'])
335
336 def test_verify_extensions_swift_all(self):
337 def fake_list_extensions():
338 return (None, {'fake1': 'metadata',
339 'fake2': 'metadata',
340 'not_fake': 'metadata',
341 'swift': 'metadata'})
342 fake_os = mock.MagicMock()
343 fake_os.account_client.list_extensions = fake_list_extensions
344 self.useFixture(mockpatch.PatchObject(
345 verify_tempest_config, 'get_enabled_extensions',
346 return_value=(['all'])))
347 results = verify_tempest_config.verify_extensions(fake_os,
348 'swift', {})
349 self.assertIn('swift', results)
350 self.assertIn('extensions', results['swift'])
Matthew Treinish6bbc8742014-08-25 18:28:15 -0400351 self.assertEqual(sorted(['not_fake', 'fake1', 'fake2']),
352 sorted(results['swift']['extensions']))