Skip test early to improve memory footprint and time
When we skip the test class using skip_checks(), it check the conditions and skip the test class at first step without creating any keystone credentials. But when tests are skipped with other decorator at test level then it does create keystone credentials, setup network resources and service clients. Wehn all the tests in test class are skipped based on common condition then it is better to skip them using the skip_check so that we do not create any keystone, network resources which will improve the DB queries keystone, neutron does and also speed up the test skip. Related-Bug: #2004780 Change-Id: Id5e6ddcb83aaa6133c28ef188183d98e26e4925b
This commit is contained in:
parent
2142671ea4
commit
fd90dacc8e
tempest
@ -304,13 +304,17 @@ class LiveMigrationRemoteConsolesV26Test(LiveMigrationTestBase):
|
|||||||
min_microversion = '2.6'
|
min_microversion = '2.6'
|
||||||
max_microversion = 'latest'
|
max_microversion = 'latest'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(LiveMigrationRemoteConsolesV26Test, cls).skip_checks()
|
||||||
|
if not CONF.compute_feature_enabled.serial_console:
|
||||||
|
skip_msg = ("Serial console not supported.")
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
if not compute.is_scheduler_filter_enabled("DifferentHostFilter"):
|
||||||
|
raise cls.skipException("DifferentHostFilter is not available.")
|
||||||
|
|
||||||
@decorators.attr(type='multinode')
|
@decorators.attr(type='multinode')
|
||||||
@decorators.idempotent_id('6190af80-513e-4f0f-90f2-9714e84955d7')
|
@decorators.idempotent_id('6190af80-513e-4f0f-90f2-9714e84955d7')
|
||||||
@testtools.skipUnless(CONF.compute_feature_enabled.serial_console,
|
|
||||||
'Serial console not supported.')
|
|
||||||
@testtools.skipUnless(
|
|
||||||
compute.is_scheduler_filter_enabled("DifferentHostFilter"),
|
|
||||||
'DifferentHostFilter is not available.')
|
|
||||||
def test_live_migration_serial_console(self):
|
def test_live_migration_serial_console(self):
|
||||||
"""Test the live-migration of an instance which has a serial console
|
"""Test the live-migration of an instance which has a serial console
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.common import waiters
|
from tempest.common import waiters
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
@ -33,6 +32,8 @@ class TestVolumeSwapBase(base.BaseV2ComputeAdminTest):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def skip_checks(cls):
|
def skip_checks(cls):
|
||||||
super(TestVolumeSwapBase, cls).skip_checks()
|
super(TestVolumeSwapBase, cls).skip_checks()
|
||||||
|
if not CONF.service_available.cinder:
|
||||||
|
raise cls.skipException("Cinder is not available")
|
||||||
if not CONF.compute_feature_enabled.swap_volume:
|
if not CONF.compute_feature_enabled.swap_volume:
|
||||||
raise cls.skipException("Swapping volumes is not supported.")
|
raise cls.skipException("Swapping volumes is not supported.")
|
||||||
|
|
||||||
@ -81,7 +82,6 @@ class TestVolumeSwap(TestVolumeSwapBase):
|
|||||||
# so it's marked as such.
|
# so it's marked as such.
|
||||||
@decorators.attr(type='slow')
|
@decorators.attr(type='slow')
|
||||||
@decorators.idempotent_id('1769f00d-a693-4d67-a631-6a3496773813')
|
@decorators.idempotent_id('1769f00d-a693-4d67-a631-6a3496773813')
|
||||||
@utils.services('volume')
|
|
||||||
def test_volume_swap(self):
|
def test_volume_swap(self):
|
||||||
"""Test swapping of volume attached to server with admin user
|
"""Test swapping of volume attached to server with admin user
|
||||||
|
|
||||||
@ -183,7 +183,6 @@ class TestMultiAttachVolumeSwap(TestVolumeSwapBase):
|
|||||||
# multiple computes but that would just side-step the underlying bug.
|
# multiple computes but that would just side-step the underlying bug.
|
||||||
@decorators.skip_because(bug='1807723',
|
@decorators.skip_because(bug='1807723',
|
||||||
condition=CONF.compute.min_compute_nodes > 1)
|
condition=CONF.compute.min_compute_nodes > 1)
|
||||||
@utils.services('volume')
|
|
||||||
def test_volume_swap_with_multiattach(self):
|
def test_volume_swap_with_multiattach(self):
|
||||||
"""Test swapping volume attached to multiple servers
|
"""Test swapping volume attached to multiple servers
|
||||||
|
|
||||||
|
@ -51,6 +51,9 @@ class BaseV2ComputeTest(api_version_utils.BaseMicroversionTest,
|
|||||||
super(BaseV2ComputeTest, cls).skip_checks()
|
super(BaseV2ComputeTest, cls).skip_checks()
|
||||||
if not CONF.service_available.nova:
|
if not CONF.service_available.nova:
|
||||||
raise cls.skipException("Nova is not available")
|
raise cls.skipException("Nova is not available")
|
||||||
|
if cls.create_default_network and not CONF.service_available.neutron:
|
||||||
|
raise cls.skipException("Neutron is not available")
|
||||||
|
|
||||||
api_version_utils.check_skip_with_microversion(
|
api_version_utils.check_skip_with_microversion(
|
||||||
cls.min_microversion, cls.max_microversion,
|
cls.min_microversion, cls.max_microversion,
|
||||||
CONF.compute.min_microversion, CONF.compute.max_microversion)
|
CONF.compute.min_microversion, CONF.compute.max_microversion)
|
||||||
|
@ -14,10 +14,13 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
|
from tempest import config
|
||||||
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
|
||||||
|
|
||||||
|
CONF = config.CONF
|
||||||
|
|
||||||
|
|
||||||
class ImagesMetadataNegativeTestJSON(base.BaseV2ComputeTest):
|
class ImagesMetadataNegativeTestJSON(base.BaseV2ComputeTest):
|
||||||
"""Negative tests of image metadata
|
"""Negative tests of image metadata
|
||||||
@ -27,6 +30,13 @@ class ImagesMetadataNegativeTestJSON(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
max_microversion = '2.38'
|
max_microversion = '2.38'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(ImagesMetadataNegativeTestJSON, cls).skip_checks()
|
||||||
|
if not CONF.service_available.glance:
|
||||||
|
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(ImagesMetadataNegativeTestJSON, cls).setup_clients()
|
super(ImagesMetadataNegativeTestJSON, cls).setup_clients()
|
||||||
|
@ -810,9 +810,15 @@ class ServersAaction247Test(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
min_microversion = '2.47'
|
min_microversion = '2.47'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
if not CONF.service_available.glance:
|
||||||
|
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
super(ServersAaction247Test, cls).skip_checks()
|
||||||
|
|
||||||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||||
'Snapshotting not available, backup not possible.')
|
'Snapshotting not available, backup not possible.')
|
||||||
@utils.services('image')
|
|
||||||
@decorators.idempotent_id('252a4bdd-6366-4dae-9994-8c30aa660f23')
|
@decorators.idempotent_id('252a4bdd-6366-4dae-9994-8c30aa660f23')
|
||||||
def test_create_backup(self):
|
def test_create_backup(self):
|
||||||
server = self.create_test_server(wait_until='ACTIVE')
|
server = self.create_test_server(wait_until='ACTIVE')
|
||||||
@ -841,7 +847,6 @@ class ServerActionsV293TestJSON(base.BaseV2ComputeTest):
|
|||||||
cls.server_id = cls.recreate_server(None, volume_backed=True,
|
cls.server_id = cls.recreate_server(None, volume_backed=True,
|
||||||
validatable=True)
|
validatable=True)
|
||||||
|
|
||||||
@utils.services('volume')
|
|
||||||
@decorators.idempotent_id('6652dab9-ea24-4c93-ab5a-93d79c3041cf')
|
@decorators.idempotent_id('6652dab9-ea24-4c93-ab5a-93d79c3041cf')
|
||||||
def test_rebuild_volume_backed_server(self):
|
def test_rebuild_volume_backed_server(self):
|
||||||
"""Test rebuilding a volume backed server"""
|
"""Test rebuilding a volume backed server"""
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
@ -35,7 +34,6 @@ class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('6eb718c0-02d9-4d5e-acd1-4e0c269cef39')
|
@decorators.idempotent_id('6eb718c0-02d9-4d5e-acd1-4e0c269cef39')
|
||||||
@utils.services('network')
|
|
||||||
def test_list_server_addresses(self):
|
def test_list_server_addresses(self):
|
||||||
"""Test listing server address
|
"""Test listing server address
|
||||||
|
|
||||||
@ -52,7 +50,6 @@ class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
@decorators.attr(type='smoke')
|
@decorators.attr(type='smoke')
|
||||||
@decorators.idempotent_id('87bbc374-5538-4f64-b673-2b0e4443cc30')
|
@decorators.idempotent_id('87bbc374-5538-4f64-b673-2b0e4443cc30')
|
||||||
@utils.services('network')
|
|
||||||
def test_list_server_addresses_by_network(self):
|
def test_list_server_addresses_by_network(self):
|
||||||
"""Test listing server addresses filtered by network addresses
|
"""Test listing server addresses filtered by network addresses
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
@ -35,7 +34,6 @@ class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('02c3f645-2d2e-4417-8525-68c0407d001b')
|
@decorators.idempotent_id('02c3f645-2d2e-4417-8525-68c0407d001b')
|
||||||
@utils.services('network')
|
|
||||||
def test_list_server_addresses_invalid_server_id(self):
|
def test_list_server_addresses_invalid_server_id(self):
|
||||||
"""List addresses request should fail if server id not in system"""
|
"""List addresses request should fail if server id not in system"""
|
||||||
self.assertRaises(lib_exc.NotFound, self.client.list_addresses,
|
self.assertRaises(lib_exc.NotFound, self.client.list_addresses,
|
||||||
@ -43,7 +41,6 @@ class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest):
|
|||||||
|
|
||||||
@decorators.attr(type=['negative'])
|
@decorators.attr(type=['negative'])
|
||||||
@decorators.idempotent_id('a2ab5144-78c0-4942-a0ed-cc8edccfd9ba')
|
@decorators.idempotent_id('a2ab5144-78c0-4942-a0ed-cc8edccfd9ba')
|
||||||
@utils.services('network')
|
|
||||||
def test_list_server_addresses_by_network_neg(self):
|
def test_list_server_addresses_by_network_neg(self):
|
||||||
"""List addresses by network should fail if network name not valid"""
|
"""List addresses by network should fail if network name not valid"""
|
||||||
self.assertRaises(lib_exc.NotFound,
|
self.assertRaises(lib_exc.NotFound,
|
||||||
|
@ -14,14 +14,25 @@
|
|||||||
|
|
||||||
from tempest.api.compute import base
|
from tempest.api.compute import base
|
||||||
from tempest.common import utils
|
from tempest.common import utils
|
||||||
|
from tempest import config
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
|
CONF = config.CONF
|
||||||
|
|
||||||
|
|
||||||
class ComputeTenantNetworksTest(base.BaseV2ComputeTest):
|
class ComputeTenantNetworksTest(base.BaseV2ComputeTest):
|
||||||
"""Test compute tenant networks API with microversion less than 2.36"""
|
"""Test compute tenant networks API with microversion less than 2.36"""
|
||||||
|
|
||||||
max_microversion = '2.35'
|
max_microversion = '2.35'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(ComputeTenantNetworksTest, cls).skip_checks()
|
||||||
|
if not CONF.service_available.neutron:
|
||||||
|
skip_msg = (
|
||||||
|
"%s skipped as Neutron is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(ComputeTenantNetworksTest, cls).resource_setup()
|
super(ComputeTenantNetworksTest, cls).resource_setup()
|
||||||
|
@ -30,6 +30,12 @@ CONF = config.CONF
|
|||||||
class IdentityV3UsersTest(base.BaseIdentityV3Test):
|
class IdentityV3UsersTest(base.BaseIdentityV3Test):
|
||||||
"""Test identity user password"""
|
"""Test identity user password"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(IdentityV3UsersTest, cls).skip_checks()
|
||||||
|
if not CONF.identity_feature_enabled.security_compliance:
|
||||||
|
raise cls.skipException("Security compliance not available.")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(IdentityV3UsersTest, cls).resource_setup()
|
super(IdentityV3UsersTest, cls).resource_setup()
|
||||||
@ -77,8 +83,6 @@ class IdentityV3UsersTest(base.BaseIdentityV3Test):
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
self.non_admin_users_client.auth_provider.set_auth()
|
self.non_admin_users_client.auth_provider.set_auth()
|
||||||
|
|
||||||
@testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,
|
|
||||||
'Security compliance not available.')
|
|
||||||
@decorators.idempotent_id('ad71bd23-12ad-426b-bb8b-195d2b635f27')
|
@decorators.idempotent_id('ad71bd23-12ad-426b-bb8b-195d2b635f27')
|
||||||
@testtools.skipIf(CONF.identity_feature_enabled.immutable_user_source,
|
@testtools.skipIf(CONF.identity_feature_enabled.immutable_user_source,
|
||||||
'Skipped because environment has an '
|
'Skipped because environment has an '
|
||||||
@ -107,8 +111,6 @@ class IdentityV3UsersTest(base.BaseIdentityV3Test):
|
|||||||
user_id=self.user_id,
|
user_id=self.user_id,
|
||||||
password=old_pass)
|
password=old_pass)
|
||||||
|
|
||||||
@testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,
|
|
||||||
'Security compliance not available.')
|
|
||||||
@decorators.idempotent_id('941784ee-5342-4571-959b-b80dd2cea516')
|
@decorators.idempotent_id('941784ee-5342-4571-959b-b80dd2cea516')
|
||||||
@testtools.skipIf(CONF.identity_feature_enabled.immutable_user_source,
|
@testtools.skipIf(CONF.identity_feature_enabled.immutable_user_source,
|
||||||
'Skipped because environment has an '
|
'Skipped because environment has an '
|
||||||
@ -142,8 +144,6 @@ class IdentityV3UsersTest(base.BaseIdentityV3Test):
|
|||||||
# A different password can be set
|
# A different password can be set
|
||||||
self._update_password(original_password=new_pass1, password=new_pass2)
|
self._update_password(original_password=new_pass1, password=new_pass2)
|
||||||
|
|
||||||
@testtools.skipUnless(CONF.identity_feature_enabled.security_compliance,
|
|
||||||
'Security compliance not available.')
|
|
||||||
@decorators.idempotent_id('a7ad8bbf-2cff-4520-8c1d-96332e151658')
|
@decorators.idempotent_id('a7ad8bbf-2cff-4520-8c1d-96332e151658')
|
||||||
def test_user_account_lockout(self):
|
def test_user_account_lockout(self):
|
||||||
"""Test locking out user account after failure attempts"""
|
"""Test locking out user account after failure attempts"""
|
||||||
|
@ -10,8 +10,6 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import testtools
|
|
||||||
|
|
||||||
from tempest.api.network import base
|
from tempest.api.network import base
|
||||||
from tempest.common import utils
|
from tempest.common import utils
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
@ -20,10 +18,14 @@ from tempest.lib import decorators
|
|||||||
class ServiceProvidersTest(base.BaseNetworkTest):
|
class ServiceProvidersTest(base.BaseNetworkTest):
|
||||||
"""Test network service providers"""
|
"""Test network service providers"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(ServiceProvidersTest, cls).skip_checks()
|
||||||
|
if not utils.is_extension_enabled('service-type', 'network'):
|
||||||
|
skip_msg = ("service-type extension not enabled.")
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
|
||||||
@decorators.idempotent_id('2cbbeea9-f010-40f6-8df5-4eaa0c918ea6')
|
@decorators.idempotent_id('2cbbeea9-f010-40f6-8df5-4eaa0c918ea6')
|
||||||
@testtools.skipUnless(
|
|
||||||
utils.is_extension_enabled('service-type', 'network'),
|
|
||||||
'service-type extension not enabled.')
|
|
||||||
def test_service_providers_list(self):
|
def test_service_providers_list(self):
|
||||||
"""Test listing network service providers"""
|
"""Test listing network service providers"""
|
||||||
body = self.service_providers_client.list_service_providers()
|
body = self.service_providers_client.list_service_providers()
|
||||||
|
@ -14,7 +14,6 @@ import testtools
|
|||||||
|
|
||||||
from tempest.api.volume import base
|
from tempest.api.volume import base
|
||||||
from tempest.api.volume import test_volumes_extend as extend
|
from tempest.api.volume import test_volumes_extend as extend
|
||||||
from tempest.common import utils
|
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
|
|
||||||
@ -25,23 +24,25 @@ class EncryptedVolumesExtendAttachedTest(extend.BaseVolumesExtendAttachedTest,
|
|||||||
base.BaseVolumeAdminTest):
|
base.BaseVolumeAdminTest):
|
||||||
"""Tests extending the size of an attached encrypted volume."""
|
"""Tests extending the size of an attached encrypted volume."""
|
||||||
|
|
||||||
@decorators.idempotent_id('e93243ec-7c37-4b5b-a099-ebf052c13216')
|
@classmethod
|
||||||
@testtools.skipUnless(
|
def skip_checks(cls):
|
||||||
CONF.volume_feature_enabled.extend_attached_encrypted_volume,
|
super(EncryptedVolumesExtendAttachedTest, cls).skip_checks()
|
||||||
|
if not CONF.service_available.nova:
|
||||||
|
skip_msg = ("%s skipped as Nova is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
if not CONF.volume_feature_enabled.extend_attached_encrypted_volume:
|
||||||
|
raise cls.skipException(
|
||||||
"Attached encrypted volume extend is disabled.")
|
"Attached encrypted volume extend is disabled.")
|
||||||
@utils.services('compute')
|
|
||||||
|
@decorators.idempotent_id('e93243ec-7c37-4b5b-a099-ebf052c13216')
|
||||||
def test_extend_attached_encrypted_volume_luksv1(self):
|
def test_extend_attached_encrypted_volume_luksv1(self):
|
||||||
"""LUKs v1 decrypts and extends through libvirt."""
|
"""LUKs v1 decrypts and extends through libvirt."""
|
||||||
volume = self.create_encrypted_volume(encryption_provider="luks")
|
volume = self.create_encrypted_volume(encryption_provider="luks")
|
||||||
self._test_extend_attached_volume(volume)
|
self._test_extend_attached_volume(volume)
|
||||||
|
|
||||||
@decorators.idempotent_id('381a2a3a-b2f4-4631-a910-720881f2cc2f')
|
@decorators.idempotent_id('381a2a3a-b2f4-4631-a910-720881f2cc2f')
|
||||||
@testtools.skipUnless(
|
|
||||||
CONF.volume_feature_enabled.extend_attached_encrypted_volume,
|
|
||||||
"Attached encrypted volume extend is disabled.")
|
|
||||||
@testtools.skipIf(CONF.volume.storage_protocol == 'ceph',
|
@testtools.skipIf(CONF.volume.storage_protocol == 'ceph',
|
||||||
'Ceph only supports LUKSv2 if doing host attach.')
|
'Ceph only supports LUKSv2 if doing host attach.')
|
||||||
@utils.services('compute')
|
|
||||||
def test_extend_attached_encrypted_volume_luksv2(self):
|
def test_extend_attached_encrypted_volume_luksv2(self):
|
||||||
"""LUKs v2 decrypts and extends through os-brick."""
|
"""LUKs v2 decrypts and extends through os-brick."""
|
||||||
volume = self.create_encrypted_volume(encryption_provider="luks2")
|
volume = self.create_encrypted_volume(encryption_provider="luks2")
|
||||||
|
@ -42,6 +42,10 @@ class BaseVolumeTest(api_version_utils.BaseMicroversionTest,
|
|||||||
if not CONF.service_available.cinder:
|
if not CONF.service_available.cinder:
|
||||||
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
|
skip_msg = ("%s skipped as Cinder is not available" % cls.__name__)
|
||||||
raise cls.skipException(skip_msg)
|
raise cls.skipException(skip_msg)
|
||||||
|
if cls.create_default_network and not CONF.service_available.neutron:
|
||||||
|
skip_msg = (
|
||||||
|
"%s skipped as Neutron is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
|
||||||
api_version_utils.check_skip_with_microversion(
|
api_version_utils.check_skip_with_microversion(
|
||||||
cls.volume_min_microversion, cls.volume_max_microversion,
|
cls.volume_min_microversion, cls.volume_max_microversion,
|
||||||
|
@ -18,7 +18,6 @@ import time
|
|||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from tempest.api.volume import base
|
from tempest.api.volume import base
|
||||||
from tempest.common import utils
|
|
||||||
from tempest.common import waiters
|
from tempest.common import waiters
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib import decorators
|
from tempest.lib import decorators
|
||||||
@ -181,10 +180,16 @@ class BaseVolumesExtendAttachedTest(base.BaseVolumeTest):
|
|||||||
|
|
||||||
class VolumesExtendAttachedTest(BaseVolumesExtendAttachedTest):
|
class VolumesExtendAttachedTest(BaseVolumesExtendAttachedTest):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(VolumesExtendAttachedTest, cls).skip_checks()
|
||||||
|
if not CONF.service_available.nova:
|
||||||
|
skip_msg = ("%s skipped as Nova is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
if not CONF.volume_feature_enabled.extend_attached_volume:
|
||||||
|
raise cls.skipException("Attached volume extend is disabled.")
|
||||||
|
|
||||||
@decorators.idempotent_id('301f5a30-1c6f-4ea0-be1a-91fd28d44354')
|
@decorators.idempotent_id('301f5a30-1c6f-4ea0-be1a-91fd28d44354')
|
||||||
@testtools.skipUnless(CONF.volume_feature_enabled.extend_attached_volume,
|
|
||||||
"Attached volume extend is disabled.")
|
|
||||||
@utils.services('compute')
|
|
||||||
def test_extend_attached_volume(self):
|
def test_extend_attached_volume(self):
|
||||||
volume = self.create_volume()
|
volume = self.create_volume()
|
||||||
self._test_extend_attached_volume(volume)
|
self._test_extend_attached_volume(volume)
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
import testtools
|
|
||||||
|
|
||||||
from tempest.common import utils
|
from tempest.common import utils
|
||||||
from tempest.common import waiters
|
from tempest.common import waiters
|
||||||
@ -35,6 +34,15 @@ class TestServerAdvancedOps(manager.ScenarioTest):
|
|||||||
* Sequence suspend resume
|
* Sequence suspend resume
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def skip_checks(cls):
|
||||||
|
super(TestServerAdvancedOps, cls).skip_checks()
|
||||||
|
if not CONF.service_available.nova:
|
||||||
|
skip_msg = ("%s skipped as Nova is not available" % cls.__name__)
|
||||||
|
raise cls.skipException(skip_msg)
|
||||||
|
if not CONF.compute_feature_enabled.suspend:
|
||||||
|
raise cls.skipException("Suspend is not available.")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_credentials(cls):
|
def setup_credentials(cls):
|
||||||
cls.set_network_resources(network=True, subnet=True)
|
cls.set_network_resources(network=True, subnet=True)
|
||||||
@ -42,8 +50,6 @@ class TestServerAdvancedOps(manager.ScenarioTest):
|
|||||||
|
|
||||||
@decorators.attr(type='slow')
|
@decorators.attr(type='slow')
|
||||||
@decorators.idempotent_id('949da7d5-72c8-4808-8802-e3d70df98e2c')
|
@decorators.idempotent_id('949da7d5-72c8-4808-8802-e3d70df98e2c')
|
||||||
@testtools.skipUnless(CONF.compute_feature_enabled.suspend,
|
|
||||||
'Suspend is not available.')
|
|
||||||
@utils.services('compute')
|
@utils.services('compute')
|
||||||
def test_server_sequence_suspend_resume(self):
|
def test_server_sequence_suspend_resume(self):
|
||||||
# We create an instance for use in this test
|
# We create an instance for use in this test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user