Merge "Remove compute api_extensions config option"
This commit is contained in:
commit
a06eb65363
releasenotes/notes
tempest
api/compute
admin
test_flavors.pytest_flavors_access.pytest_flavors_access_negative.pytest_flavors_extra_specs.pytest_flavors_extra_specs_negative.py
servers
test_extensions.pytest_quotas.pycmd
common/utils
config.pytests
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
Remove deprecated config option ``api_extensions`` from
|
||||||
|
``compute_feature_enabled`` groups.
|
@ -16,7 +16,6 @@
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions as lib_exc
|
from tempest.lib import exceptions as lib_exc
|
||||||
@ -25,13 +24,6 @@ from tempest.lib import exceptions as lib_exc
|
|||||||
class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
|
class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
|
||||||
"""Tests Flavors API Create and Delete that require admin privileges"""
|
"""Tests Flavors API Create and Delete that require admin privileges"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(FlavorsAdminTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
|
|
||||||
msg = "OS-FLV-EXT-DATA extension not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(FlavorsAdminTestJSON, cls).resource_setup()
|
super(FlavorsAdminTestJSON, cls).resource_setup()
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
|
||||||
@ -24,13 +23,6 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
Add and remove Flavor Access require admin privileges.
|
Add and remove Flavor Access require admin privileges.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(FlavorsAccessTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
|
|
||||||
msg = "OS-FLV-EXT-DATA extension not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(FlavorsAccessTestJSON, cls).resource_setup()
|
super(FlavorsAccessTestJSON, cls).resource_setup()
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions as lib_exc
|
from tempest.lib import exceptions as lib_exc
|
||||||
|
|
||||||
@ -27,13 +26,6 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
|
|
||||||
credentials = ['primary', 'admin', 'alt']
|
credentials = ['primary', 'admin', 'alt']
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(FlavorsAccessNegativeTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
|
|
||||||
msg = "OS-FLV-EXT-DATA extension not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(FlavorsAccessNegativeTestJSON, cls).resource_setup()
|
super(FlavorsAccessNegativeTestJSON, cls).resource_setup()
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
@ -26,13 +25,6 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
GET Flavor Extra specs can be performed even by without admin privileges.
|
GET Flavor Extra specs can be performed even by without admin privileges.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(FlavorsExtraSpecsTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
|
|
||||||
msg = "OS-FLV-EXT-DATA extension not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(FlavorsExtraSpecsTestJSON, cls).resource_setup()
|
super(FlavorsExtraSpecsTestJSON, cls).resource_setup()
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
from tempest.lib import exceptions as lib_exc
|
from tempest.lib import exceptions as lib_exc
|
||||||
@ -27,13 +26,6 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
|||||||
SET, UNSET, UPDATE Flavor Extra specs require admin privileges.
|
SET, UNSET, UPDATE Flavor Extra specs require admin privileges.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(FlavorsExtraSpecsNegativeTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
|
|
||||||
msg = "OS-FLV-EXT-DATA extension not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(FlavorsExtraSpecsNegativeTestJSON, cls).resource_setup()
|
super(FlavorsExtraSpecsNegativeTestJSON, cls).resource_setup()
|
||||||
|
@ -17,7 +17,6 @@ import testtools
|
|||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import compute
|
from tempest.common import compute
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
@ -31,13 +30,6 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
|||||||
"""
|
"""
|
||||||
create_default_network = True
|
create_default_network = True
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(ServerGroupTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('os-server-groups', 'compute'):
|
|
||||||
msg = "os-server-groups extension is not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(ServerGroupTestJSON, cls).setup_clients()
|
super(ServerGroupTestJSON, cls).setup_clients()
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
@ -27,13 +26,6 @@ class ServerTagsTestJSON(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
create_default_network = True
|
create_default_network = True
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(ServerTagsTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('os-server-tags', 'compute'):
|
|
||||||
msg = "os-server-tags extension is not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(ServerTagsTestJSON, cls).setup_clients()
|
super(ServerTagsTestJSON, cls).setup_clients()
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
@ -32,24 +31,14 @@ class ExtensionsTest(base.BaseV2ComputeTest):
|
|||||||
@decorators.idempotent_id('3bb27738-b759-4e0d-a5fa-37d7a6df07d1')
|
@decorators.idempotent_id('3bb27738-b759-4e0d-a5fa-37d7a6df07d1')
|
||||||
def test_list_extensions(self):
|
def test_list_extensions(self):
|
||||||
"""Test listing compute extensions"""
|
"""Test listing compute extensions"""
|
||||||
if not CONF.compute_feature_enabled.api_extensions:
|
|
||||||
raise self.skipException('There are not any extensions configured')
|
|
||||||
extensions = self.extensions_client.list_extensions()['extensions']
|
extensions = self.extensions_client.list_extensions()['extensions']
|
||||||
ext = CONF.compute_feature_enabled.api_extensions[0]
|
|
||||||
|
|
||||||
# Log extensions list
|
# Log extensions list
|
||||||
extension_list = [x['alias'] for x in extensions]
|
extension_list = [x['alias'] for x in extensions]
|
||||||
LOG.debug("Nova extensions: %s", ','.join(extension_list))
|
LOG.debug("Nova extensions: %s", ','.join(extension_list))
|
||||||
|
|
||||||
if ext == 'all':
|
self.assertIn('Hosts', map(lambda x: x['name'], extensions))
|
||||||
self.assertIn('Hosts', map(lambda x: x['name'], extensions))
|
|
||||||
elif ext:
|
|
||||||
self.assertIn(ext, extension_list)
|
|
||||||
else:
|
|
||||||
raise self.skipException('There are not any extensions configured')
|
|
||||||
|
|
||||||
@decorators.idempotent_id('05762f39-bdfa-4cdb-9b46-b78f8e78e2fd')
|
@decorators.idempotent_id('05762f39-bdfa-4cdb-9b46-b78f8e78e2fd')
|
||||||
@utils.requires_ext(extension='os-consoles', service='compute')
|
|
||||||
def test_get_extension(self):
|
def test_get_extension(self):
|
||||||
"""Test getting specified compute extension details"""
|
"""Test getting specified compute extension details"""
|
||||||
extension = self.extensions_client.show_extension('os-consoles')
|
extension = self.extensions_client.show_extension('os-consoles')
|
||||||
|
@ -15,20 +15,12 @@
|
|||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import tempest_fixtures as fixtures
|
from tempest.common import tempest_fixtures as fixtures
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
|
||||||
class QuotasTestJSON(base.BaseV2ComputeTest):
|
class QuotasTestJSON(base.BaseV2ComputeTest):
|
||||||
"""Test compute quotas"""
|
"""Test compute quotas"""
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def skip_checks(cls):
|
|
||||||
super(QuotasTestJSON, cls).skip_checks()
|
|
||||||
if not utils.is_extension_enabled('os-quota-sets', 'compute'):
|
|
||||||
msg = "quotas extension not enabled."
|
|
||||||
raise cls.skipException(msg)
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
# NOTE(mriedem): Avoid conflicts with os-quota-class-sets tests.
|
# NOTE(mriedem): Avoid conflicts with os-quota-class-sets tests.
|
||||||
self.useFixture(fixtures.LockFixture('compute_quotas'))
|
self.useFixture(fixtures.LockFixture('compute_quotas'))
|
||||||
|
@ -214,7 +214,6 @@ def verify_api_versions(os, service, update):
|
|||||||
|
|
||||||
def get_extension_client(os, service):
|
def get_extension_client(os, service):
|
||||||
extensions_client = {
|
extensions_client = {
|
||||||
'nova': os.compute.ExtensionsClient(),
|
|
||||||
'neutron': os.network.ExtensionsClient(),
|
'neutron': os.network.ExtensionsClient(),
|
||||||
'swift': os.object_storage.CapabilitiesClient(),
|
'swift': os.object_storage.CapabilitiesClient(),
|
||||||
# NOTE: Cinder v3 API is current and v2 and v1 are deprecated.
|
# NOTE: Cinder v3 API is current and v2 and v1 are deprecated.
|
||||||
@ -231,7 +230,6 @@ def get_extension_client(os, service):
|
|||||||
|
|
||||||
def get_enabled_extensions(service):
|
def get_enabled_extensions(service):
|
||||||
extensions_options = {
|
extensions_options = {
|
||||||
'nova': CONF.compute_feature_enabled.api_extensions,
|
|
||||||
'cinder': CONF.volume_feature_enabled.api_extensions,
|
'cinder': CONF.volume_feature_enabled.api_extensions,
|
||||||
'neutron': CONF.network_feature_enabled.api_extensions,
|
'neutron': CONF.network_feature_enabled.api_extensions,
|
||||||
'swift': CONF.object_storage_feature_enabled.discoverable_apis,
|
'swift': CONF.object_storage_feature_enabled.discoverable_apis,
|
||||||
@ -442,7 +440,7 @@ def main(opts=None):
|
|||||||
os = clients.Manager(icreds.get_primary_creds().credentials)
|
os = clients.Manager(icreds.get_primary_creds().credentials)
|
||||||
services = check_service_availability(os, update)
|
services = check_service_availability(os, update)
|
||||||
results = {}
|
results = {}
|
||||||
for service in ['nova', 'cinder', 'neutron', 'swift']:
|
for service in ['cinder', 'neutron', 'swift']:
|
||||||
if service not in services:
|
if service not in services:
|
||||||
continue
|
continue
|
||||||
results = verify_extensions(os, service, results)
|
results = verify_extensions(os, service, results)
|
||||||
|
@ -96,7 +96,6 @@ def is_extension_enabled(extension_name, service):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
config_dict = {
|
config_dict = {
|
||||||
'compute': CONF.compute_feature_enabled.api_extensions,
|
|
||||||
'volume': CONF.volume_feature_enabled.api_extensions,
|
'volume': CONF.volume_feature_enabled.api_extensions,
|
||||||
'network': CONF.network_feature_enabled.api_extensions,
|
'network': CONF.network_feature_enabled.api_extensions,
|
||||||
'object': CONF.object_storage_feature_enabled.discoverable_apis,
|
'object': CONF.object_storage_feature_enabled.discoverable_apis,
|
||||||
|
@ -450,18 +450,6 @@ ComputeFeaturesGroup = [
|
|||||||
"the '.' with '-' to comply with fqdn hostname. Nova "
|
"the '.' with '-' to comply with fqdn hostname. Nova "
|
||||||
"changed that in Wallaby cycle, if your cloud is older "
|
"changed that in Wallaby cycle, if your cloud is older "
|
||||||
"than wallaby then you can keep/make it False."),
|
"than wallaby then you can keep/make it False."),
|
||||||
cfg.ListOpt('api_extensions',
|
|
||||||
default=['all'],
|
|
||||||
help='A list of enabled compute extensions with a special '
|
|
||||||
'entry all which indicates every extension is enabled. '
|
|
||||||
'Each extension should be specified with alias name. '
|
|
||||||
'Empty list indicates all extensions are disabled',
|
|
||||||
deprecated_for_removal=True,
|
|
||||||
deprecated_reason='The Nova extensions API and mechanism '
|
|
||||||
'is deprecated. This option will be '
|
|
||||||
'removed when all releases supported '
|
|
||||||
'by tempest no longer contain the Nova '
|
|
||||||
'extensions API and mechanism.'),
|
|
||||||
cfg.BoolOpt('change_password',
|
cfg.BoolOpt('change_password',
|
||||||
default=False,
|
default=False,
|
||||||
help="Does the test environment support changing the admin "
|
help="Does the test environment support changing the admin "
|
||||||
|
@ -380,70 +380,6 @@ class TestDiscovery(base.TestCase):
|
|||||||
self.assertIn('extensions', results['cinder'])
|
self.assertIn('extensions', results['cinder'])
|
||||||
self.assertEqual([], results['cinder']['extensions'])
|
self.assertEqual([], results['cinder']['extensions'])
|
||||||
|
|
||||||
def test_verify_extensions_nova(self):
|
|
||||||
def fake_list_extensions():
|
|
||||||
return ([{'alias': 'fake1'}, {'alias': 'fake2'},
|
|
||||||
{'alias': 'not_fake'}])
|
|
||||||
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=(['fake1', 'fake2', 'fake3'])))
|
|
||||||
results = verify_tempest_config.verify_extensions(fake_os,
|
|
||||||
'nova', {})
|
|
||||||
self.assertIn('nova', results)
|
|
||||||
self.assertIn('fake1', results['nova'])
|
|
||||||
self.assertTrue(results['nova']['fake1'])
|
|
||||||
self.assertIn('fake2', results['nova'])
|
|
||||||
self.assertTrue(results['nova']['fake2'])
|
|
||||||
self.assertIn('fake3', results['nova'])
|
|
||||||
self.assertFalse(results['nova']['fake3'])
|
|
||||||
self.assertIn('not_fake', results['nova'])
|
|
||||||
self.assertFalse(results['nova']['not_fake'])
|
|
||||||
|
|
||||||
def test_verify_extensions_nova_all(self):
|
|
||||||
def fake_list_extensions():
|
|
||||||
return ({'extensions': [{'alias': 'fake1'},
|
|
||||||
{'alias': 'fake2'},
|
|
||||||
{'alias': 'not_fake'}]})
|
|
||||||
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(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 test_verify_extensions_swift(self):
|
||||||
def fake_list_extensions():
|
def fake_list_extensions():
|
||||||
return {'fake1': 'metadata',
|
return {'fake1': 'metadata',
|
||||||
@ -513,7 +449,6 @@ class TestDiscovery(base.TestCase):
|
|||||||
def test_get_extension_client(self):
|
def test_get_extension_client(self):
|
||||||
fake_os = mock.MagicMock()
|
fake_os = mock.MagicMock()
|
||||||
services = {
|
services = {
|
||||||
'nova': fake_os.compute.ExtensionsClient(),
|
|
||||||
'neutron': fake_os.network.ExtensionsClient(),
|
'neutron': fake_os.network.ExtensionsClient(),
|
||||||
'swift': fake_os.object_storage.CapabilitiesClient(),
|
'swift': fake_os.object_storage.CapabilitiesClient(),
|
||||||
'cinder': fake_os.volume_v2.ExtensionsClient(),
|
'cinder': fake_os.volume_v2.ExtensionsClient(),
|
||||||
|
@ -92,7 +92,7 @@ class TestRequiresExtDecorator(BaseDecoratorsTest):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestRequiresExtDecorator, self).setUp()
|
super(TestRequiresExtDecorator, self).setUp()
|
||||||
cfg.CONF.set_default('api_extensions', ['enabled_ext', 'another_ext'],
|
cfg.CONF.set_default('api_extensions', ['enabled_ext', 'another_ext'],
|
||||||
'compute-feature-enabled')
|
'network-feature-enabled')
|
||||||
|
|
||||||
def _test_requires_ext_helper(self, expected_to_skip=True,
|
def _test_requires_ext_helper(self, expected_to_skip=True,
|
||||||
**decorator_args):
|
**decorator_args):
|
||||||
@ -116,18 +116,18 @@ class TestRequiresExtDecorator(BaseDecoratorsTest):
|
|||||||
def test_requires_ext_decorator(self):
|
def test_requires_ext_decorator(self):
|
||||||
self._test_requires_ext_helper(expected_to_skip=False,
|
self._test_requires_ext_helper(expected_to_skip=False,
|
||||||
extension='enabled_ext',
|
extension='enabled_ext',
|
||||||
service='compute')
|
service='network')
|
||||||
|
|
||||||
def test_requires_ext_decorator_disabled_ext(self):
|
def test_requires_ext_decorator_disabled_ext(self):
|
||||||
self._test_requires_ext_helper(extension='disabled_ext',
|
self._test_requires_ext_helper(extension='disabled_ext',
|
||||||
service='compute')
|
service='network')
|
||||||
|
|
||||||
def test_requires_ext_decorator_with_all_ext_enabled(self):
|
def test_requires_ext_decorator_with_all_ext_enabled(self):
|
||||||
cfg.CONF.set_default('api_extensions', ['all'],
|
cfg.CONF.set_default('api_extensions', ['all'],
|
||||||
group='compute-feature-enabled')
|
group='network-feature-enabled')
|
||||||
self._test_requires_ext_helper(expected_to_skip=False,
|
self._test_requires_ext_helper(expected_to_skip=False,
|
||||||
extension='random_ext',
|
extension='random_ext',
|
||||||
service='compute')
|
service='network')
|
||||||
|
|
||||||
def test_requires_ext_decorator_bad_service(self):
|
def test_requires_ext_decorator_bad_service(self):
|
||||||
self.assertRaises(KeyError,
|
self.assertRaises(KeyError,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user