Prevent verify-config from IndexError

verify-config raises IndexError when tempest.conf
contains an empty api_extensions list.
The patch fixes that and adds a few unit tests to
that.

Change-Id: Ia9abea77e3baeb9418cb1869cec2a159cdc9fd48
Related-Bug: #1786915
This commit is contained in:
Martin Kopec 2018-08-14 09:20:48 +00:00
parent b53b923818
commit d7e05dd767
2 changed files with 75 additions and 0 deletions

View File

@ -279,6 +279,9 @@ def verify_extensions(os, service, results):
if not results.get(service):
results[service] = {}
extensions_opt = get_enabled_extensions(service)
if not extensions_opt:
LOG.info("'%s' has no api_extensions set.", service)
return results
if extensions_opt[0] == 'all':
results[service]['extensions'] = extensions
return results

View File

@ -343,6 +343,24 @@ class TestDiscovery(base.TestCase):
self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
sorted(results['neutron']['extensions']))
def test_verify_extensions_neutron_none(self):
def fake_list_extensions():
return {'extensions': []}
fake_os = mock.MagicMock()
fake_client = mock.MagicMock()
fake_client.list_extensions = fake_list_extensions
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_extension_client',
return_value=fake_client))
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_enabled_extensions',
return_value=(['all'])))
results = verify_tempest_config.verify_extensions(fake_os,
'neutron', {})
self.assertIn('neutron', results)
self.assertIn('extensions', results['neutron'])
self.assertEqual([], results['neutron']['extensions'])
def test_verify_extensions_cinder(self):
def fake_list_extensions():
return {'extensions': [{'alias': 'fake1'},
@ -391,6 +409,24 @@ class TestDiscovery(base.TestCase):
self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
sorted(results['cinder']['extensions']))
def test_verify_extensions_cinder_none(self):
def fake_list_extensions():
return {'extensions': []}
fake_os = mock.MagicMock()
fake_client = mock.MagicMock()
fake_client.list_extensions = fake_list_extensions
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_extension_client',
return_value=fake_client))
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_enabled_extensions',
return_value=(['all'])))
results = verify_tempest_config.verify_extensions(fake_os,
'cinder', {})
self.assertIn('cinder', results)
self.assertIn('extensions', results['cinder'])
self.assertEqual([], results['cinder']['extensions'])
def test_verify_extensions_nova(self):
def fake_list_extensions():
return ([{'alias': 'fake1'}, {'alias': 'fake2'},
@ -437,6 +473,24 @@ class TestDiscovery(base.TestCase):
self.assertEqual(sorted(['fake1', 'fake2', 'not_fake']),
sorted(results['nova']['extensions']))
def test_verify_extensions_nova_none(self):
def fake_list_extensions():
return ({'extensions': []})
fake_os = mock.MagicMock()
fake_client = mock.MagicMock()
fake_client.list_extensions = fake_list_extensions
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_extension_client',
return_value=fake_client))
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_enabled_extensions',
return_value=(['all'])))
results = verify_tempest_config.verify_extensions(fake_os,
'nova', {})
self.assertIn('nova', results)
self.assertIn('extensions', results['nova'])
self.assertEqual([], results['nova']['extensions'])
def test_verify_extensions_swift(self):
def fake_list_extensions():
return {'fake1': 'metadata',
@ -485,6 +539,24 @@ class TestDiscovery(base.TestCase):
self.assertEqual(sorted(['not_fake', 'fake1', 'fake2']),
sorted(results['swift']['extensions']))
def test_verify_extensions_swift_none(self):
def fake_list_extensions():
return {'swift': 'metadata'}
fake_os = mock.MagicMock()
fake_client = mock.MagicMock()
fake_client.list_capabilities = fake_list_extensions
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_extension_client',
return_value=fake_client))
self.useFixture(fixtures.MockPatchObject(
verify_tempest_config, 'get_enabled_extensions',
return_value=(['all'])))
results = verify_tempest_config.verify_extensions(fake_os,
'swift', {})
self.assertIn('swift', results)
self.assertIn('extensions', results['swift'])
self.assertEqual([], results['swift']['extensions'])
def test_get_extension_client(self):
creds = credentials_factory.get_credentials(
fill_in=False, username='fake_user', project_name='fake_project',