Move test decorators to common

services and extension decorators are based on CONF and needed by
Tempest only, so moving them to tempest.common.
Since a few plugnis use them today, use debtcollector to avoid
breaking all dependencies.

Change-Id: Ibd52153d00b8e60fb8c89e38d94e358ddc787251
This commit is contained in:
Andrea Frittoli 2017-08-14 21:37:56 +01:00
parent ac9500a457
commit cd36841ca2
109 changed files with 462 additions and 438 deletions

View File

@ -358,10 +358,10 @@ to Tempest.
When adding tests for new features that were not in previous releases of the When adding tests for new features that were not in previous releases of the
projects the new test has to be properly skipped with a feature flag. Whether projects the new test has to be properly skipped with a feature flag. Whether
this is just as simple as using the @test.requires_ext() decorator to check this is just as simple as using the @utils.requires_ext() decorator to
if the required extension (or discoverable optional API) is enabled or adding check if the required extension (or discoverable optional API) is enabled or
a new config option to the appropriate section. If there isn't a method of adding a new config option to the appropriate section. If there isn't a method
selecting the new **feature** from the config file then there won't be a of selecting the new **feature** from the config file then there won't be a
mechanism to disable the test with older stable releases and the new test won't mechanism to disable the test with older stable releases and the new test won't
be able to merge. be able to merge.

View File

@ -17,11 +17,11 @@ from oslo_log import log
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 credentials_factory as credentials from tempest.common import credentials_factory as credentials
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions as lib_excs from tempest.lib import exceptions as lib_excs
from tempest import test
CONF = config.CONF CONF = config.CONF
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
@ -53,7 +53,8 @@ class AutoAllocateNetworkTest(base.BaseV2ComputeTest):
raise cls.skipException(msg) raise cls.skipException(msg)
if not CONF.service_available.neutron: if not CONF.service_available.neutron:
raise cls.skipException('Neutron is required') raise cls.skipException('Neutron is required')
if not test.is_extension_enabled('auto-allocated-topology', 'network'): if not utils.is_extension_enabled('auto-allocated-topology',
'network'):
raise cls.skipException( raise cls.skipException(
'auto-allocated-topology extension is not available') 'auto-allocated-topology extension is not available')

View File

@ -14,9 +14,9 @@
# 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 import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -49,17 +49,17 @@ class FixedIPsTestJson(base.BaseV2ComputeAdminTest):
break break
@decorators.idempotent_id('16b7d848-2f7c-4709-85a3-2dfb4576cc52') @decorators.idempotent_id('16b7d848-2f7c-4709-85a3-2dfb4576cc52')
@test.services('network') @utils.services('network')
def test_list_fixed_ip_details(self): def test_list_fixed_ip_details(self):
fixed_ip = self.client.show_fixed_ip(self.ip) fixed_ip = self.client.show_fixed_ip(self.ip)
self.assertEqual(fixed_ip['fixed_ip']['address'], self.ip) self.assertEqual(fixed_ip['fixed_ip']['address'], self.ip)
@decorators.idempotent_id('5485077b-7e46-4cec-b402-91dc3173433b') @decorators.idempotent_id('5485077b-7e46-4cec-b402-91dc3173433b')
@test.services('network') @utils.services('network')
def test_set_reserve(self): def test_set_reserve(self):
self.client.reserve_fixed_ip(self.ip, reserve="None") self.client.reserve_fixed_ip(self.ip, reserve="None")
@decorators.idempotent_id('7476e322-b9ff-4710-bf82-49d51bac6e2e') @decorators.idempotent_id('7476e322-b9ff-4710-bf82-49d51bac6e2e')
@test.services('network') @utils.services('network')
def test_set_unreserve(self): def test_set_unreserve(self):
self.client.reserve_fixed_ip(self.ip, unreserve="None") self.client.reserve_fixed_ip(self.ip, unreserve="None")

View File

@ -13,10 +13,10 @@
# 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 import config from tempest import config
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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -51,14 +51,14 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('9f17f47d-daad-4adc-986e-12370c93e407') @decorators.idempotent_id('9f17f47d-daad-4adc-986e-12370c93e407')
@test.services('network') @utils.services('network')
def test_list_fixed_ip_details_with_non_admin_user(self): def test_list_fixed_ip_details_with_non_admin_user(self):
self.assertRaises(lib_exc.Forbidden, self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.show_fixed_ip, self.ip) self.non_admin_client.show_fixed_ip, self.ip)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('ce60042c-fa60-4836-8d43-1c8e3359dc47') @decorators.idempotent_id('ce60042c-fa60-4836-8d43-1c8e3359dc47')
@test.services('network') @utils.services('network')
def test_set_reserve_with_non_admin_user(self): def test_set_reserve_with_non_admin_user(self):
self.assertRaises(lib_exc.Forbidden, self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.reserve_fixed_ip, self.non_admin_client.reserve_fixed_ip,
@ -66,7 +66,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('f1f7a35b-0390-48c5-9803-5f27461439db') @decorators.idempotent_id('f1f7a35b-0390-48c5-9803-5f27461439db')
@test.services('network') @utils.services('network')
def test_set_unreserve_with_non_admin_user(self): def test_set_unreserve_with_non_admin_user(self):
self.assertRaises(lib_exc.Forbidden, self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.reserve_fixed_ip, self.non_admin_client.reserve_fixed_ip,
@ -74,7 +74,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('f51cf464-7fc5-4352-bc3e-e75cfa2cb717') @decorators.idempotent_id('f51cf464-7fc5-4352-bc3e-e75cfa2cb717')
@test.services('network') @utils.services('network')
def test_set_reserve_with_invalid_ip(self): def test_set_reserve_with_invalid_ip(self):
# NOTE(maurosr): since this exercises the same code snippet, we do it # NOTE(maurosr): since this exercises the same code snippet, we do it
# only for reserve action # only for reserve action
@ -87,7 +87,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('fd26ef50-f135-4232-9d32-281aab3f9176') @decorators.idempotent_id('fd26ef50-f135-4232-9d32-281aab3f9176')
@test.services('network') @utils.services('network')
def test_fixed_ip_with_invalid_action(self): def test_fixed_ip_with_invalid_action(self):
self.assertRaises(lib_exc.BadRequest, self.assertRaises(lib_exc.BadRequest,
self.client.reserve_fixed_ip, self.client.reserve_fixed_ip,

View File

@ -16,10 +16,10 @@
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
from tempest import test
class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest): class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
@ -28,7 +28,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FlavorsAdminTestJSON, cls).skip_checks() super(FlavorsAdminTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'): if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled." msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,8 +14,8 @@
# 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 import test
class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest): class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
@ -27,7 +27,7 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FlavorsAccessTestJSON, cls).skip_checks() super(FlavorsAccessTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'): if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled." msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,9 +14,9 @@
# 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
from tempest import test
class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest): class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
@ -30,7 +30,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FlavorsAccessNegativeTestJSON, cls).skip_checks() super(FlavorsAccessNegativeTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'): if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled." msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,9 +14,9 @@
# 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 import test
class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest): class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
@ -29,7 +29,7 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FlavorsExtraSpecsTestJSON, cls).skip_checks() super(FlavorsExtraSpecsTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'): if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled." msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -15,10 +15,10 @@
# 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
from tempest import test
class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest): class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
@ -30,7 +30,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FlavorsExtraSpecsNegativeTestJSON, cls).skip_checks() super(FlavorsExtraSpecsNegativeTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'): if not utils.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled." msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -16,11 +16,11 @@
import netaddr import netaddr
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.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -57,7 +57,7 @@ class FloatingIPsBulkAdminTestJSON(base.BaseV2ComputeAdminTest):
return return
@decorators.idempotent_id('2c8f145f-8012-4cb8-ac7e-95a587f0e4ab') @decorators.idempotent_id('2c8f145f-8012-4cb8-ac7e-95a587f0e4ab')
@test.services('network') @utils.services('network')
def test_create_list_delete_floating_ips_bulk(self): def test_create_list_delete_floating_ips_bulk(self):
# Create, List and delete the Floating IPs Bulk # Create, List and delete the Floating IPs Bulk
pool = 'test_pool' pool = 'test_pool'

View File

@ -20,10 +20,10 @@ 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.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
from tempest import test
CONF = config.CONF CONF = config.CONF
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -122,7 +122,7 @@ class LiveMigrationTest(base.BaseV2ComputeAdminTest):
@decorators.skip_because(bug="1524898") @decorators.skip_because(bug="1524898")
@decorators.idempotent_id('5071cf17-3004-4257-ae61-73a84e28badd') @decorators.idempotent_id('5071cf17-3004-4257-ae61-73a84e28badd')
@test.services('volume') @utils.services('volume')
def test_volume_backed_live_migration(self): def test_volume_backed_live_migration(self):
self._test_live_migration(volume_backed=True) self._test_live_migration(volume_backed=True)

View File

@ -13,11 +13,11 @@
# 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 import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -89,7 +89,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
condition=CONF.service_available.neutron) condition=CONF.service_available.neutron)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('7c6c8f3b-2bf6-4918-b240-57b136a66aa0') @decorators.idempotent_id('7c6c8f3b-2bf6-4918-b240-57b136a66aa0')
@test.services('network') @utils.services('network')
def test_security_groups_exceed_limit(self): def test_security_groups_exceed_limit(self):
# Negative test: Creation Security Groups over limit should FAIL # Negative test: Creation Security Groups over limit should FAIL
# Set the quota to number of used security groups # Set the quota to number of used security groups
@ -108,7 +108,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
condition=CONF.service_available.neutron) condition=CONF.service_available.neutron)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('6e9f436d-f1ed-4f8e-a493-7275dfaa4b4d') @decorators.idempotent_id('6e9f436d-f1ed-4f8e-a493-7275dfaa4b4d')
@test.services('network') @utils.services('network')
def test_security_groups_rules_exceed_limit(self): def test_security_groups_rules_exceed_limit(self):
# Negative test: Creation of Security Group Rules should FAIL # Negative test: Creation of Security Group Rules should FAIL
# when we reach limit maxSecurityGroupRules # when we reach limit maxSecurityGroupRules

View File

@ -14,9 +14,9 @@
# 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 import test
class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest): class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest):
@ -34,7 +34,7 @@ class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest):
self.client.delete_security_group(securitygroup_id) self.client.delete_security_group(securitygroup_id)
@decorators.idempotent_id('49667619-5af9-4c63-ab5d-2cfdd1c8f7f1') @decorators.idempotent_id('49667619-5af9-4c63-ab5d-2cfdd1c8f7f1')
@test.services('network') @utils.services('network')
def test_list_security_groups_list_all_tenants_filter(self): def test_list_security_groups_list_all_tenants_filter(self):
# Admin can list security groups of all tenants # Admin can list security groups of all tenants
# List of all security groups created # List of all security groups created

View File

@ -13,11 +13,11 @@
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
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -80,7 +80,7 @@ class TestVolumeSwap(base.BaseV2ComputeAdminTest):
raise lib_exc.TimeoutException(message) raise lib_exc.TimeoutException(message)
@decorators.idempotent_id('1769f00d-a693-4d67-a631-6a3496773813') @decorators.idempotent_id('1769f00d-a693-4d67-a631-6a3496773813')
@test.services('volume') @utils.services('volume')
def test_volume_swap(self): def test_volume_swap(self):
# Create two volumes. # Create two volumes.
# NOTE(gmann): Volumes are created before server creation so that # NOTE(gmann): Volumes are created before server creation so that

View File

@ -19,11 +19,11 @@ import six
from tempest.api.compute import base from tempest.api.compute import base
from tempest.common import image as common_image from tempest.common import image as common_image
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -43,7 +43,7 @@ class FlavorsV2NegativeTest(base.BaseV2ComputeTest):
'[image-feature-enabled].') '[image-feature-enabled].')
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@test.services('image') @utils.services('image')
@decorators.idempotent_id('90f0d93a-91c1-450c-91e6-07d18172cefe') @decorators.idempotent_id('90f0d93a-91c1-450c-91e6-07d18172cefe')
def test_boot_with_low_ram(self): def test_boot_with_low_ram(self):
"""Try boot a vm with lower than min ram """Try boot a vm with lower than min ram

View File

@ -16,11 +16,11 @@
import testtools import testtools
from tempest.api.compute.floating_ips import base from tempest.api.compute.floating_ips import base
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -62,7 +62,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
super(FloatingIPsTestJSON, cls).resource_cleanup() super(FloatingIPsTestJSON, cls).resource_cleanup()
@decorators.idempotent_id('f7bfb946-297e-41b8-9e8c-aba8e9bb5194') @decorators.idempotent_id('f7bfb946-297e-41b8-9e8c-aba8e9bb5194')
@test.services('network') @utils.services('network')
def test_allocate_floating_ip(self): def test_allocate_floating_ip(self):
# Positive test:Allocation of a new floating IP to a project # Positive test:Allocation of a new floating IP to a project
# should be successful # should be successful
@ -78,7 +78,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
self.assertIn(floating_ip_details, body) self.assertIn(floating_ip_details, body)
@decorators.idempotent_id('de45e989-b5ca-4a9b-916b-04a52e7bbb8b') @decorators.idempotent_id('de45e989-b5ca-4a9b-916b-04a52e7bbb8b')
@test.services('network') @utils.services('network')
def test_delete_floating_ip(self): def test_delete_floating_ip(self):
# Positive test:Deletion of valid floating IP from project # Positive test:Deletion of valid floating IP from project
# should be successful # should be successful
@ -93,7 +93,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
self.client.wait_for_resource_deletion(floating_ip_body['id']) self.client.wait_for_resource_deletion(floating_ip_body['id'])
@decorators.idempotent_id('307efa27-dc6f-48a0-8cd2-162ce3ef0b52') @decorators.idempotent_id('307efa27-dc6f-48a0-8cd2-162ce3ef0b52')
@test.services('network') @utils.services('network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_associate_disassociate_floating_ip(self): def test_associate_disassociate_floating_ip(self):
@ -116,7 +116,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
self.server_id) self.server_id)
@decorators.idempotent_id('6edef4b2-aaf1-4abc-bbe3-993e2561e0fe') @decorators.idempotent_id('6edef4b2-aaf1-4abc-bbe3-993e2561e0fe')
@test.services('network') @utils.services('network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_associate_already_associated_floating_ip(self): def test_associate_already_associated_floating_ip(self):

View File

@ -16,11 +16,11 @@
import testtools import testtools
from tempest.api.compute.floating_ips import base from tempest.api.compute.floating_ips import base
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -58,7 +58,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('6e0f059b-e4dd-48fb-8207-06e3bba5b074') @decorators.idempotent_id('6e0f059b-e4dd-48fb-8207-06e3bba5b074')
@test.services('network') @utils.services('network')
def test_allocate_floating_ip_from_nonexistent_pool(self): def test_allocate_floating_ip_from_nonexistent_pool(self):
# Negative test:Allocation of a new floating IP from a nonexistent_pool # Negative test:Allocation of a new floating IP from a nonexistent_pool
# to a project should fail # to a project should fail
@ -68,7 +68,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('ae1c55a8-552b-44d4-bfb6-2a115a15d0ba') @decorators.idempotent_id('ae1c55a8-552b-44d4-bfb6-2a115a15d0ba')
@test.services('network') @utils.services('network')
def test_delete_nonexistent_floating_ip(self): def test_delete_nonexistent_floating_ip(self):
# Negative test:Deletion of a nonexistent floating IP # Negative test:Deletion of a nonexistent floating IP
# from project should fail # from project should fail
@ -79,7 +79,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('595fa616-1a71-4670-9614-46564ac49a4c') @decorators.idempotent_id('595fa616-1a71-4670-9614-46564ac49a4c')
@test.services('network') @utils.services('network')
def test_associate_nonexistent_floating_ip(self): def test_associate_nonexistent_floating_ip(self):
# Negative test:Association of a non existent floating IP # Negative test:Association of a non existent floating IP
# to specific server should fail # to specific server should fail
@ -90,7 +90,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('0a081a66-e568-4e6b-aa62-9587a876dca8') @decorators.idempotent_id('0a081a66-e568-4e6b-aa62-9587a876dca8')
@test.services('network') @utils.services('network')
def test_dissociate_nonexistent_floating_ip(self): def test_dissociate_nonexistent_floating_ip(self):
# Negative test:Dissociation of a non existent floating IP should fail # Negative test:Dissociation of a non existent floating IP should fail
# Dissociating non existent floating IP # Dissociating non existent floating IP
@ -100,7 +100,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('804b4fcb-bbf5-412f-925d-896672b61eb3') @decorators.idempotent_id('804b4fcb-bbf5-412f-925d-896672b61eb3')
@test.services('network') @utils.services('network')
def test_associate_ip_to_server_without_passing_floating_ip(self): def test_associate_ip_to_server_without_passing_floating_ip(self):
# Negative test:Association of empty floating IP to specific server # Negative test:Association of empty floating IP to specific server
# should raise NotFound or BadRequest(In case of Nova V2.1) exception. # should raise NotFound or BadRequest(In case of Nova V2.1) exception.
@ -110,7 +110,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('58a80596-ffb2-11e6-9393-fa163e4fa634') @decorators.idempotent_id('58a80596-ffb2-11e6-9393-fa163e4fa634')
@test.services('network') @utils.services('network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_associate_ip_to_server_with_floating_ip(self): def test_associate_ip_to_server_with_floating_ip(self):

View File

@ -14,9 +14,9 @@
# 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 import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -53,7 +53,7 @@ class FloatingIPDetailsTestJSON(base.BaseV2ComputeTest):
super(FloatingIPDetailsTestJSON, cls).resource_cleanup() super(FloatingIPDetailsTestJSON, cls).resource_cleanup()
@decorators.idempotent_id('16db31c3-fb85-40c9-bbe2-8cf7b67ff99f') @decorators.idempotent_id('16db31c3-fb85-40c9-bbe2-8cf7b67ff99f')
@test.services('network') @utils.services('network')
def test_list_floating_ips(self): def test_list_floating_ips(self):
# Positive test:Should return the list of floating IPs # Positive test:Should return the list of floating IPs
body = self.client.list_floating_ips()['floating_ips'] body = self.client.list_floating_ips()['floating_ips']
@ -64,7 +64,7 @@ class FloatingIPDetailsTestJSON(base.BaseV2ComputeTest):
self.assertIn(self.floating_ip[i], floating_ips) self.assertIn(self.floating_ip[i], floating_ips)
@decorators.idempotent_id('eef497e0-8ff7-43c8-85ef-558440574f84') @decorators.idempotent_id('eef497e0-8ff7-43c8-85ef-558440574f84')
@test.services('network') @utils.services('network')
def test_get_floating_ip_details(self): def test_get_floating_ip_details(self):
# Positive test:Should be able to GET the details of floatingIP # Positive test:Should be able to GET the details of floatingIP
# Creating a floating IP for which details are to be checked # Creating a floating IP for which details are to be checked
@ -86,7 +86,7 @@ class FloatingIPDetailsTestJSON(base.BaseV2ComputeTest):
self.assertEqual(floating_ip_id, body['id']) self.assertEqual(floating_ip_id, body['id'])
@decorators.idempotent_id('df389fc8-56f5-43cc-b290-20eda39854d3') @decorators.idempotent_id('df389fc8-56f5-43cc-b290-20eda39854d3')
@test.services('network') @utils.services('network')
def test_list_floating_ip_pools(self): def test_list_floating_ip_pools(self):
# Positive test:Should return the list of floating IP Pools # Positive test:Should return the list of floating IP Pools
floating_ip_pools = self.pools_client.list_floating_ip_pools() floating_ip_pools = self.pools_client.list_floating_ip_pools()

View File

@ -14,11 +14,11 @@
# 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 import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -38,7 +38,7 @@ class FloatingIPDetailsNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('7ab18834-4a4b-4f28-a2c5-440579866695') @decorators.idempotent_id('7ab18834-4a4b-4f28-a2c5-440579866695')
@test.services('network') @utils.services('network')
def test_get_nonexistent_floating_ip_details(self): def test_get_nonexistent_floating_ip_details(self):
# Negative test:Should not be able to GET the details # Negative test:Should not be able to GET the details
# of non-existent floating IP # of non-existent floating IP

View File

@ -14,9 +14,9 @@
# 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 import config from tempest import config
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -32,7 +32,7 @@ class BaseSecurityGroupsTest(base.BaseV2ComputeTest):
@staticmethod @staticmethod
def generate_random_security_group_id(): def generate_random_security_group_id():
if (CONF.service_available.neutron and if (CONF.service_available.neutron and
test.is_extension_enabled('security-group', 'network')): utils.is_extension_enabled('security-group', 'network')):
return data_utils.rand_uuid() return data_utils.rand_uuid()
else: else:
return data_utils.rand_int_id(start=999) return data_utils.rand_int_id(start=999)

View File

@ -14,8 +14,8 @@
# under the License. # under the License.
from tempest.api.compute.security_groups import base from tempest.api.compute.security_groups import base
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest): class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
@ -55,7 +55,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('850795d7-d4d3-4e55-b527-a774c0123d3a') @decorators.idempotent_id('850795d7-d4d3-4e55-b527-a774c0123d3a')
@test.services('network') @utils.services('network')
def test_security_group_rules_create(self): def test_security_group_rules_create(self):
# Positive test: Creation of Security Group rule # Positive test: Creation of Security Group rule
# should be successful # should be successful
@ -73,7 +73,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
self._check_expected_response(rule) self._check_expected_response(rule)
@decorators.idempotent_id('7a01873e-3c38-4f30-80be-31a043cfe2fd') @decorators.idempotent_id('7a01873e-3c38-4f30-80be-31a043cfe2fd')
@test.services('network') @utils.services('network')
def test_security_group_rules_create_with_optional_cidr(self): def test_security_group_rules_create_with_optional_cidr(self):
# Positive test: Creation of Security Group rule # Positive test: Creation of Security Group rule
# with optional argument cidr # with optional argument cidr
@ -96,7 +96,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
self._check_expected_response(rule) self._check_expected_response(rule)
@decorators.idempotent_id('7f5d2899-7705-4d4b-8458-4505188ffab6') @decorators.idempotent_id('7f5d2899-7705-4d4b-8458-4505188ffab6')
@test.services('network') @utils.services('network')
def test_security_group_rules_create_with_optional_group_id(self): def test_security_group_rules_create_with_optional_group_id(self):
# Positive test: Creation of Security Group rule # Positive test: Creation of Security Group rule
# with optional argument group_id # with optional argument group_id
@ -125,7 +125,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('a6154130-5a55-4850-8be4-5e9e796dbf17') @decorators.idempotent_id('a6154130-5a55-4850-8be4-5e9e796dbf17')
@test.services('network') @utils.services('network')
def test_security_group_rules_list(self): def test_security_group_rules_list(self):
# Positive test: Created Security Group rules should be # Positive test: Created Security Group rules should be
# in the list of all rules # in the list of all rules
@ -163,7 +163,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
self.assertNotEmpty([i for i in rules if i['id'] == rule2_id]) self.assertNotEmpty([i for i in rules if i['id'] == rule2_id])
@decorators.idempotent_id('fc5c5acf-2091-43a6-a6ae-e42760e9ffaf') @decorators.idempotent_id('fc5c5acf-2091-43a6-a6ae-e42760e9ffaf')
@test.services('network') @utils.services('network')
def test_security_group_rules_delete_when_peer_group_deleted(self): def test_security_group_rules_delete_when_peer_group_deleted(self):
# Positive test:rule will delete when peer group deleting # Positive test:rule will delete when peer group deleting
# Creating a Security Group to add rules to it # Creating a Security Group to add rules to it

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
from tempest.api.compute.security_groups import base from tempest.api.compute.security_groups 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
from tempest import test
class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest): class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@ -29,7 +29,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('1d507e98-7951-469b-82c3-23f1e6b8c254') @decorators.idempotent_id('1d507e98-7951-469b-82c3-23f1e6b8c254')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_with_non_existent_id(self): def test_create_security_group_rule_with_non_existent_id(self):
# Negative test: Creation of Security Group rule should FAIL # Negative test: Creation of Security Group rule should FAIL
# with non existent Parent group id # with non existent Parent group id
@ -46,7 +46,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('2244d7e4-adb7-4ecb-9930-2d77e123ce4f') @decorators.idempotent_id('2244d7e4-adb7-4ecb-9930-2d77e123ce4f')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_with_invalid_id(self): def test_create_security_group_rule_with_invalid_id(self):
# Negative test: Creation of Security Group rule should FAIL # Negative test: Creation of Security Group rule should FAIL
# with Parent group id which is not integer # with Parent group id which is not integer
@ -63,7 +63,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('8bd56d02-3ffa-4d67-9933-b6b9a01d6089') @decorators.idempotent_id('8bd56d02-3ffa-4d67-9933-b6b9a01d6089')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_duplicate(self): def test_create_security_group_rule_duplicate(self):
# Negative test: Create Security Group rule duplicate should fail # Negative test: Create Security Group rule duplicate should fail
# Creating a Security Group to add rule to it # Creating a Security Group to add rule to it
@ -88,7 +88,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('84c81249-9f6e-439c-9bbf-cbb0d2cddbdf') @decorators.idempotent_id('84c81249-9f6e-439c-9bbf-cbb0d2cddbdf')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_with_invalid_ip_protocol(self): def test_create_security_group_rule_with_invalid_ip_protocol(self):
# Negative test: Creation of Security Group rule should FAIL # Negative test: Creation of Security Group rule should FAIL
# with invalid ip_protocol # with invalid ip_protocol
@ -108,7 +108,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('12bbc875-1045-4f7a-be46-751277baedb9') @decorators.idempotent_id('12bbc875-1045-4f7a-be46-751277baedb9')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_with_invalid_from_port(self): def test_create_security_group_rule_with_invalid_from_port(self):
# Negative test: Creation of Security Group rule should FAIL # Negative test: Creation of Security Group rule should FAIL
# with invalid from_port # with invalid from_port
@ -127,7 +127,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('ff88804d-144f-45d1-bf59-dd155838a43a') @decorators.idempotent_id('ff88804d-144f-45d1-bf59-dd155838a43a')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_with_invalid_to_port(self): def test_create_security_group_rule_with_invalid_to_port(self):
# Negative test: Creation of Security Group rule should FAIL # Negative test: Creation of Security Group rule should FAIL
# with invalid to_port # with invalid to_port
@ -146,7 +146,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('00296fa9-0576-496a-ae15-fbab843189e0') @decorators.idempotent_id('00296fa9-0576-496a-ae15-fbab843189e0')
@test.services('network') @utils.services('network')
def test_create_security_group_rule_with_invalid_port_range(self): def test_create_security_group_rule_with_invalid_port_range(self):
# Negative test: Creation of Security Group rule should FAIL # Negative test: Creation of Security Group rule should FAIL
# with invalid port range. # with invalid port range.
@ -165,7 +165,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('56fddcca-dbb8-4494-a0db-96e9f869527c') @decorators.idempotent_id('56fddcca-dbb8-4494-a0db-96e9f869527c')
@test.services('network') @utils.services('network')
def test_delete_security_group_rule_with_non_existent_id(self): def test_delete_security_group_rule_with_non_existent_id(self):
# Negative test: Deletion of Security Group rule should be FAIL # Negative test: Deletion of Security Group rule should be FAIL
# with non existent id # with non existent id

View File

@ -14,11 +14,11 @@
# under the License. # under the License.
from tempest.api.compute.security_groups import base from tempest.api.compute.security_groups import base
from tempest.common import utils
from tempest.common import waiters from tempest.common import waiters
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
from tempest import test
class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest): class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
@ -30,7 +30,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('eb2b087d-633d-4d0d-a7bd-9e6ba35b32de') @decorators.idempotent_id('eb2b087d-633d-4d0d-a7bd-9e6ba35b32de')
@test.services('network') @utils.services('network')
def test_security_groups_create_list_delete(self): def test_security_groups_create_list_delete(self):
# Positive test:Should return the list of Security Groups # Positive test:Should return the list of Security Groups
# Create 3 Security Groups # Create 3 Security Groups
@ -62,7 +62,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
for m_group in deleted_sgs)) for m_group in deleted_sgs))
@decorators.idempotent_id('ecc0da4a-2117-48af-91af-993cca39a615') @decorators.idempotent_id('ecc0da4a-2117-48af-91af-993cca39a615')
@test.services('network') @utils.services('network')
def test_security_group_create_get_delete(self): def test_security_group_create_get_delete(self):
# Security Group should be created, fetched and deleted # Security Group should be created, fetched and deleted
# with char space between name along with # with char space between name along with
@ -83,7 +83,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
self.client.wait_for_resource_deletion(securitygroup['id']) self.client.wait_for_resource_deletion(securitygroup['id'])
@decorators.idempotent_id('fe4abc0d-83f5-4c50-ad11-57a1127297a2') @decorators.idempotent_id('fe4abc0d-83f5-4c50-ad11-57a1127297a2')
@test.services('network') @utils.services('network')
def test_server_security_groups(self): def test_server_security_groups(self):
# Checks that security groups may be added and linked to a server # Checks that security groups may be added and linked to a server
# and not deleted if the server is active. # and not deleted if the server is active.
@ -125,7 +125,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
self.client.delete_security_group(sg2['id']) self.client.delete_security_group(sg2['id'])
@decorators.idempotent_id('7d4e1d3c-3209-4d6d-b020-986304ebad1f') @decorators.idempotent_id('7d4e1d3c-3209-4d6d-b020-986304ebad1f')
@test.services('network') @utils.services('network')
def test_update_security_groups(self): def test_update_security_groups(self):
# Update security group name and description # Update security group name and description
# Create a security group # Create a security group
@ -144,7 +144,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
self.assertEqual(s_new_des, fetched_group['description']) self.assertEqual(s_new_des, fetched_group['description'])
@decorators.idempotent_id('79517d60-535a-438f-af3d-e6feab1cbea7') @decorators.idempotent_id('79517d60-535a-438f-af3d-e6feab1cbea7')
@test.services('network') @utils.services('network')
def test_list_security_groups_by_server(self): def test_list_security_groups_by_server(self):
# Create a couple security groups that we will use # Create a couple security groups that we will use
# for the server resource this test creates # for the server resource this test creates

View File

@ -16,11 +16,11 @@
import testtools import testtools
from tempest.api.compute.security_groups import base from tempest.api.compute.security_groups import base
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -34,7 +34,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('673eaec1-9b3e-48ed-bdf1-2786c1b9661c') @decorators.idempotent_id('673eaec1-9b3e-48ed-bdf1-2786c1b9661c')
@test.services('network') @utils.services('network')
def test_security_group_get_nonexistent_group(self): def test_security_group_get_nonexistent_group(self):
# Negative test:Should not be able to GET the details # Negative test:Should not be able to GET the details
# of non-existent Security Group # of non-existent Security Group
@ -46,7 +46,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
condition=CONF.service_available.neutron) condition=CONF.service_available.neutron)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('1759c3cb-b0fc-44b7-86ce-c99236be911d') @decorators.idempotent_id('1759c3cb-b0fc-44b7-86ce-c99236be911d')
@test.services('network') @utils.services('network')
def test_security_group_create_with_invalid_group_name(self): def test_security_group_create_with_invalid_group_name(self):
# Negative test: Security Group should not be created with group name # Negative test: Security Group should not be created with group name
# as an empty string/with white spaces/chars more than 255 # as an empty string/with white spaces/chars more than 255
@ -69,7 +69,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
condition=CONF.service_available.neutron) condition=CONF.service_available.neutron)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('777b6f14-aca9-4758-9e84-38783cfa58bc') @decorators.idempotent_id('777b6f14-aca9-4758-9e84-38783cfa58bc')
@test.services('network') @utils.services('network')
def test_security_group_create_with_invalid_group_description(self): def test_security_group_create_with_invalid_group_description(self):
# Negative test: Security Group should not be created with description # Negative test: Security Group should not be created with description
# longer than 255 chars. Empty description is allowed by the API # longer than 255 chars. Empty description is allowed by the API
@ -85,7 +85,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@testtools.skipIf(CONF.service_available.neutron, @testtools.skipIf(CONF.service_available.neutron,
"Neutron allows duplicate names for security groups") "Neutron allows duplicate names for security groups")
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@test.services('network') @utils.services('network')
def test_security_group_create_with_duplicate_name(self): def test_security_group_create_with_duplicate_name(self):
# Negative test:Security Group with duplicate name should not # Negative test:Security Group with duplicate name should not
# be created # be created
@ -99,7 +99,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('36a1629f-c6da-4a26-b8b8-55e7e5d5cd58') @decorators.idempotent_id('36a1629f-c6da-4a26-b8b8-55e7e5d5cd58')
@test.services('network') @utils.services('network')
def test_delete_the_default_security_group(self): def test_delete_the_default_security_group(self):
# Negative test:Deletion of the "default" Security Group should Fail # Negative test:Deletion of the "default" Security Group should Fail
default_security_group_id = None default_security_group_id = None
@ -115,7 +115,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('6727c00b-214c-4f9e-9a52-017ac3e98411') @decorators.idempotent_id('6727c00b-214c-4f9e-9a52-017ac3e98411')
@test.services('network') @utils.services('network')
def test_delete_nonexistent_security_group(self): def test_delete_nonexistent_security_group(self):
# Negative test:Deletion of a non-existent Security Group should fail # Negative test:Deletion of a non-existent Security Group should fail
non_exist_id = self.generate_random_security_group_id() non_exist_id = self.generate_random_security_group_id()
@ -124,7 +124,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('1438f330-8fa4-4aeb-8a94-37c250106d7f') @decorators.idempotent_id('1438f330-8fa4-4aeb-8a94-37c250106d7f')
@test.services('network') @utils.services('network')
def test_delete_security_group_without_passing_id(self): def test_delete_security_group_without_passing_id(self):
# Negative test:Deletion of a Security Group with out passing ID # Negative test:Deletion of a Security Group with out passing ID
# should Fail # should Fail
@ -135,7 +135,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@testtools.skipIf(CONF.service_available.neutron, @testtools.skipIf(CONF.service_available.neutron,
"Neutron does not check the security group ID") "Neutron does not check the security group ID")
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@test.services('network') @utils.services('network')
def test_update_security_group_with_invalid_sg_id(self): def test_update_security_group_with_invalid_sg_id(self):
# Update security_group with invalid sg_id should fail # Update security_group with invalid sg_id should fail
s_name = data_utils.rand_name('sg') s_name = data_utils.rand_name('sg')
@ -150,7 +150,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@testtools.skipIf(CONF.service_available.neutron, @testtools.skipIf(CONF.service_available.neutron,
"Neutron does not check the security group name") "Neutron does not check the security group name")
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@test.services('network') @utils.services('network')
def test_update_security_group_with_invalid_sg_name(self): def test_update_security_group_with_invalid_sg_name(self):
# Update security_group with invalid sg_name should fail # Update security_group with invalid sg_name should fail
securitygroup = self.create_security_group() securitygroup = self.create_security_group()
@ -165,7 +165,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@testtools.skipIf(CONF.service_available.neutron, @testtools.skipIf(CONF.service_available.neutron,
"Neutron does not check the security group description") "Neutron does not check the security group description")
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@test.services('network') @utils.services('network')
def test_update_security_group_with_invalid_sg_des(self): def test_update_security_group_with_invalid_sg_des(self):
# Update security_group with invalid sg_des should fail # Update security_group with invalid sg_des should fail
securitygroup = self.create_security_group() securitygroup = self.create_security_group()
@ -178,7 +178,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('27edee9c-873d-4da6-a68a-3c256efebe8f') @decorators.idempotent_id('27edee9c-873d-4da6-a68a-3c256efebe8f')
@test.services('network') @utils.services('network')
def test_update_non_existent_security_group(self): def test_update_non_existent_security_group(self):
# Update a non-existent Security Group should Fail # Update a non-existent Security Group should Fail
non_exist_id = self.generate_random_security_group_id() non_exist_id = self.generate_random_security_group_id()

View File

@ -19,12 +19,12 @@ import six
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.common.utils import net_utils from tempest.common.utils import net_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
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -185,7 +185,7 @@ class AttachInterfacesTestJSON(base.BaseV2ComputeTest):
self.assertEqual(sorted(list1), sorted(list2)) self.assertEqual(sorted(list1), sorted(list2))
@decorators.idempotent_id('73fe8f02-590d-4bf1-b184-e9ca81065051') @decorators.idempotent_id('73fe8f02-590d-4bf1-b184-e9ca81065051')
@test.services('network') @utils.services('network')
def test_create_list_show_delete_interfaces(self): def test_create_list_show_delete_interfaces(self):
server, ifs = self._create_server_get_interfaces() server, ifs = self._create_server_get_interfaces()
interface_count = len(ifs) interface_count = len(ifs)
@ -222,7 +222,7 @@ class AttachInterfacesTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('c7e0e60b-ee45-43d0-abeb-8596fd42a2f9') @decorators.idempotent_id('c7e0e60b-ee45-43d0-abeb-8596fd42a2f9')
@test.services('network') @utils.services('network')
def test_add_remove_fixed_ip(self): def test_add_remove_fixed_ip(self):
# Add and Remove the fixed IP to server. # Add and Remove the fixed IP to server.
server, ifs = self._create_server_get_interfaces() server, ifs = self._create_server_get_interfaces()

View File

@ -17,11 +17,11 @@ import netaddr
import testtools import testtools
from tempest.api.compute import base from tempest.api.compute import base
from tempest.common import utils
from tempest.common.utils.linux import remote_client from tempest.common.utils.linux import remote_client
from tempest import config 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 import test
CONF = config.CONF CONF = config.CONF
@ -151,6 +151,6 @@ class ServersTestBootFromVolume(ServersTestJSON):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(ServersTestBootFromVolume, cls).skip_checks() super(ServersTestBootFromVolume, cls).skip_checks()
if not test.get_service_list()['volume']: if not utils.get_service_list()['volume']:
msg = "Volume service not enabled." msg = "Volume service not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -17,10 +17,10 @@ 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.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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -104,7 +104,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
waiters.wait_for_server_termination(self.client, server['id']) waiters.wait_for_server_termination(self.client, server['id'])
@decorators.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c') @decorators.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c')
@test.services('volume') @utils.services('volume')
def test_delete_server_while_in_attached_volume(self): def test_delete_server_while_in_attached_volume(self):
# Delete a server while a volume is attached to it # Delete a server while a volume is attached to it
device = '/dev/%s' % CONF.compute.volume_device_name device = '/dev/%s' % CONF.compute.volume_device_name

View File

@ -17,13 +17,13 @@ import json
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.common.utils.linux import remote_client from tempest.common.utils.linux import remote_client
from tempest import config from tempest import config
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -94,7 +94,7 @@ class DeviceTaggingTest(base.BaseV2ComputeTest):
'other'])) 'other']))
@decorators.idempotent_id('a2e65a6c-66f1-4442-aaa8-498c31778d96') @decorators.idempotent_id('a2e65a6c-66f1-4442-aaa8-498c31778d96')
@test.services('network', 'volume', 'image') @utils.services('network', 'volume', 'image')
def test_device_tagging(self): def test_device_tagging(self):
# Create volumes # Create volumes
# The create_volume methods waits for the volumes to be available and # The create_volume methods waits for the volumes to be available and

View File

@ -19,13 +19,13 @@ 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.common.utils.linux import remote_client from tempest.common.utils.linux import remote_client
from tempest.common import waiters from tempest.common import waiters
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -252,7 +252,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
self.client.start_server(self.server_id) self.client.start_server(self.server_id)
@decorators.idempotent_id('b68bd8d6-855d-4212-b59b-2e704044dace') @decorators.idempotent_id('b68bd8d6-855d-4212-b59b-2e704044dace')
@test.services('volume') @utils.services('volume')
def test_rebuild_server_with_volume_attached(self): def test_rebuild_server_with_volume_attached(self):
# create a new volume and attach it to the server # create a new volume and attach it to the server
volume = self.create_volume() volume = self.create_volume()
@ -333,7 +333,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('b963d4f1-94b3-4c40-9e97-7b583f46e470') @decorators.idempotent_id('b963d4f1-94b3-4c40-9e97-7b583f46e470')
@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.')
@test.services('image') @utils.services('image')
def test_create_backup(self): def test_create_backup(self):
# Positive test:create backup successfully and rotate backups correctly # Positive test:create backup successfully and rotate backups correctly
# create the first and the second backup # create the first and the second backup
@ -518,7 +518,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
@decorators.idempotent_id('77eba8e0-036e-4635-944b-f7a8f3b78dc9') @decorators.idempotent_id('77eba8e0-036e-4635-944b-f7a8f3b78dc9')
@testtools.skipUnless(CONF.compute_feature_enabled.shelve, @testtools.skipUnless(CONF.compute_feature_enabled.shelve,
'Shelve is not available.') 'Shelve is not available.')
@test.services('image') @utils.services('image')
def test_shelve_unshelve_server(self): def test_shelve_unshelve_server(self):
if CONF.image_feature_enabled.api_v2: if CONF.image_feature_enabled.api_v2:
glance_client = self.os_primary.image_client_v2 glance_client = self.os_primary.image_client_v2

View File

@ -14,8 +14,8 @@
# 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 import test
class ServerAddressesTestJSON(base.BaseV2ComputeTest): class ServerAddressesTestJSON(base.BaseV2ComputeTest):
@ -39,7 +39,7 @@ 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')
@test.services('network') @utils.services('network')
def test_list_server_addresses(self): def test_list_server_addresses(self):
# All public and private addresses for # All public and private addresses for
# a server should be returned # a server should be returned
@ -57,7 +57,7 @@ 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')
@test.services('network') @utils.services('network')
def test_list_server_addresses_by_network(self): def test_list_server_addresses_by_network(self):
# Providing a network type should filter # Providing a network type should filter
# the addresses return by that type # the addresses return by that type

View File

@ -14,9 +14,9 @@
# 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
from tempest import test
class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest): class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest):
@ -38,7 +38,7 @@ 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')
@test.services('network') @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,
@ -46,7 +46,7 @@ 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')
@test.services('network') @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,

View File

@ -17,9 +17,9 @@ 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
from tempest import test
class ServerGroupTestJSON(base.BaseV2ComputeTest): class ServerGroupTestJSON(base.BaseV2ComputeTest):
@ -33,7 +33,7 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(ServerGroupTestJSON, cls).skip_checks() super(ServerGroupTestJSON, cls).skip_checks()
if not test.is_extension_enabled('os-server-groups', 'compute'): if not utils.is_extension_enabled('os-server-groups', 'compute'):
msg = "os-server-groups extension is not enabled." msg = "os-server-groups extension is not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -16,12 +16,12 @@
import testtools import testtools
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.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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -109,7 +109,7 @@ class ServerRescueNegativeTestJSON(base.BaseV2ComputeTest):
self.image_ref_alt) self.image_ref_alt)
@decorators.idempotent_id('d0ccac79-0091-4cf4-a1ce-26162d0cc55f') @decorators.idempotent_id('d0ccac79-0091-4cf4-a1ce-26162d0cc55f')
@test.services('volume') @utils.services('volume')
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
def test_rescued_vm_attach_volume(self): def test_rescued_vm_attach_volume(self):
volume = self.create_volume() volume = self.create_volume()
@ -129,7 +129,7 @@ class ServerRescueNegativeTestJSON(base.BaseV2ComputeTest):
device='/dev/%s' % self.device) device='/dev/%s' % self.device)
@decorators.idempotent_id('f56e465b-fe10-48bf-b75d-646cda3a8bc9') @decorators.idempotent_id('f56e465b-fe10-48bf-b75d-646cda3a8bc9')
@test.services('volume') @utils.services('volume')
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
def test_rescued_vm_detach_volume(self): def test_rescued_vm_detach_volume(self):
volume = self.create_volume() volume = self.create_volume()

View File

@ -16,9 +16,9 @@
import six import six
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 import test
class ServerTagsTestJSON(base.BaseV2ComputeTest): class ServerTagsTestJSON(base.BaseV2ComputeTest):
@ -29,7 +29,7 @@ class ServerTagsTestJSON(base.BaseV2ComputeTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(ServerTagsTestJSON, cls).skip_checks() super(ServerTagsTestJSON, cls).skip_checks()
if not test.is_extension_enabled('os-server-tags', 'compute'): if not utils.is_extension_enabled('os-server-tags', 'compute'):
msg = "os-server-tags extension is not enabled." msg = "os-server-tags extension is not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -19,12 +19,12 @@ 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.common import waiters from tempest.common import waiters
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -217,7 +217,7 @@ class ServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.related_bug('1651064', status_code=500) @decorators.related_bug('1651064', status_code=500)
@test.services('volume') @utils.services('volume')
@decorators.idempotent_id('12146ac1-d7df-4928-ad25-b1f99e5286cd') @decorators.idempotent_id('12146ac1-d7df-4928-ad25-b1f99e5286cd')
def test_create_server_invalid_bdm_in_2nd_dict(self): def test_create_server_invalid_bdm_in_2nd_dict(self):
volume = self.create_volume() volume = self.create_volume()
@ -512,7 +512,7 @@ class ServersNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('74085be3-a370-4ca2-bc51-2d0e10e0f573') @decorators.idempotent_id('74085be3-a370-4ca2-bc51-2d0e10e0f573')
@test.services('volume', 'image') @utils.services('volume', 'image')
def test_create_server_from_non_bootable_volume(self): def test_create_server_from_non_bootable_volume(self):
# Create a volume # Create a volume
volume = self.create_volume() volume = self.create_volume()

View File

@ -17,10 +17,10 @@ import netaddr
import testtools import testtools
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
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -44,7 +44,7 @@ class VirtualInterfacesTestJSON(base.BaseV2ComputeTest):
cls.server = cls.create_test_server(wait_until='ACTIVE') cls.server = cls.create_test_server(wait_until='ACTIVE')
@decorators.idempotent_id('96c4e2ef-5e4d-4d7f-87f5-fed6dca18016') @decorators.idempotent_id('96c4e2ef-5e4d-4d7f-87f5-fed6dca18016')
@test.services('network') @utils.services('network')
def test_list_virtual_interfaces(self): def test_list_virtual_interfaces(self):
# Positive test:Should be able to GET the virtual interfaces list # Positive test:Should be able to GET the virtual interfaces list
# for a given server_id # for a given server_id

View File

@ -14,10 +14,10 @@
# 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
from tempest import test
class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest): class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest):
@ -35,7 +35,7 @@ class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('64ebd03c-1089-4306-93fa-60f5eb5c803c') @decorators.idempotent_id('64ebd03c-1089-4306-93fa-60f5eb5c803c')
@test.services('network') @utils.services('network')
def test_list_virtual_interfaces_invalid_server_id(self): def test_list_virtual_interfaces_invalid_server_id(self):
# Negative test: Should not be able to GET virtual interfaces # Negative test: Should not be able to GET virtual interfaces
# for an invalid server_id # for an invalid server_id

View File

@ -16,9 +16,9 @@
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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -48,7 +48,7 @@ class ExtensionsTestJSON(base.BaseV2ComputeTest):
raise self.skipException('There are not any extensions configured') 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')
@test.requires_ext(extension='os-consoles', service='compute') @utils.requires_ext(extension='os-consoles', service='compute')
def test_get_extension(self): def test_get_extension(self):
# get the specified extensions # get the specified extensions
extension = self.extensions_client.show_extension('os-consoles') extension = self.extensions_client.show_extension('os-consoles')

View File

@ -15,8 +15,8 @@
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
from tempest import test
class QuotasTestJSON(base.BaseV2ComputeTest): class QuotasTestJSON(base.BaseV2ComputeTest):
@ -24,7 +24,7 @@ class QuotasTestJSON(base.BaseV2ComputeTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(QuotasTestJSON, cls).skip_checks() super(QuotasTestJSON, cls).skip_checks()
if not test.is_extension_enabled('os-quota-sets', 'compute'): if not utils.is_extension_enabled('os-quota-sets', 'compute'):
msg = "quotas extension not enabled." msg = "quotas extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -13,8 +13,8 @@
# 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 import test
class ComputeTenantNetworksTest(base.BaseV2ComputeTest): class ComputeTenantNetworksTest(base.BaseV2ComputeTest):
@ -31,7 +31,7 @@ class ComputeTenantNetworksTest(base.BaseV2ComputeTest):
super(ComputeTenantNetworksTest, cls).setup_credentials() super(ComputeTenantNetworksTest, cls).setup_credentials()
@decorators.idempotent_id('edfea98e-bbe3-4c7a-9739-87b986baff26') @decorators.idempotent_id('edfea98e-bbe3-4c7a-9739-87b986baff26')
@test.services('network') @utils.services('network')
def test_list_show_tenant_networks(self): def test_list_show_tenant_networks(self):
# Fetch all networks that are visible to the tenant: this may include # Fetch all networks that are visible to the tenant: this may include
# shared and external networks # shared and external networks

View File

@ -11,9 +11,9 @@
# under the License. # under the License.
from tempest.api.identity import base from tempest.api.identity 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 import test
class InheritsV3TestJSON(base.BaseIdentityV3AdminTest): class InheritsV3TestJSON(base.BaseIdentityV3AdminTest):
@ -21,7 +21,7 @@ class InheritsV3TestJSON(base.BaseIdentityV3AdminTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(InheritsV3TestJSON, cls).skip_checks() super(InheritsV3TestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-INHERIT', 'identity'): if not utils.is_extension_enabled('OS-INHERIT', 'identity'):
raise cls.skipException("Inherits aren't enabled") raise cls.skipException("Inherits aren't enabled")
@classmethod @classmethod

View File

@ -14,9 +14,9 @@
# under the License. # under the License.
from tempest.api.identity import base from tempest.api.identity 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
from tempest import test
class EC2CredentialsTest(base.BaseIdentityV2Test): class EC2CredentialsTest(base.BaseIdentityV2Test):
@ -24,7 +24,7 @@ class EC2CredentialsTest(base.BaseIdentityV2Test):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(EC2CredentialsTest, cls).skip_checks() super(EC2CredentialsTest, cls).skip_checks()
if not test.is_extension_enabled('OS-EC2', 'identity'): if not utils.is_extension_enabled('OS-EC2', 'identity'):
msg = "OS-EC2 identity extension not enabled." msg = "OS-EC2 identity extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,8 +14,8 @@
from tempest.api.network import base from tempest.api.network 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
from tempest import test
class AgentManagementTestJSON(base.BaseAdminNetworkTest): class AgentManagementTestJSON(base.BaseAdminNetworkTest):
@ -23,7 +23,7 @@ class AgentManagementTestJSON(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(AgentManagementTestJSON, cls).skip_checks() super(AgentManagementTestJSON, cls).skip_checks()
if not test.is_extension_enabled('agent', 'network'): if not utils.is_extension_enabled('agent', 'network'):
msg = "agent extension not enabled." msg = "agent extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -13,8 +13,8 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class DHCPAgentSchedulersTestJSON(base.BaseAdminNetworkTest): class DHCPAgentSchedulersTestJSON(base.BaseAdminNetworkTest):
@ -22,7 +22,7 @@ class DHCPAgentSchedulersTestJSON(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(DHCPAgentSchedulersTestJSON, cls).skip_checks() super(DHCPAgentSchedulersTestJSON, cls).skip_checks()
if not test.is_extension_enabled('dhcp_agent_scheduler', 'network'): if not utils.is_extension_enabled('dhcp_agent_scheduler', 'network'):
msg = "dhcp_agent_scheduler extension not enabled." msg = "dhcp_agent_scheduler extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,9 +14,9 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -28,7 +28,7 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FloatingIPAdminTestJSON, cls).skip_checks() super(FloatingIPAdminTestJSON, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
if not CONF.network.public_network_id: if not CONF.network.public_network_id:

View File

@ -13,10 +13,10 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest import test
CONF = config.CONF CONF = config.CONF
AGENT_TYPE = 'L3 agent' AGENT_TYPE = 'L3 agent'
@ -41,7 +41,7 @@ class L3AgentSchedulerTestJSON(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(L3AgentSchedulerTestJSON, cls).skip_checks() super(L3AgentSchedulerTestJSON, cls).skip_checks()
if not test.is_extension_enabled('l3_agent_scheduler', 'network'): if not utils.is_extension_enabled('l3_agent_scheduler', 'network'):
msg = "L3 Agent Scheduler Extension not enabled." msg = "L3 Agent Scheduler Extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -13,9 +13,9 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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 import test
class MeteringTestJSON(base.BaseAdminNetworkTest): class MeteringTestJSON(base.BaseAdminNetworkTest):
@ -28,7 +28,7 @@ class MeteringTestJSON(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(MeteringTestJSON, cls).skip_checks() super(MeteringTestJSON, cls).skip_checks()
if not test.is_extension_enabled('metering', 'network'): if not utils.is_extension_enabled('metering', 'network'):
msg = "metering extension not enabled." msg = "metering extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,9 +14,9 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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
from tempest import test
class QuotasNegativeTest(base.BaseAdminNetworkTest): class QuotasNegativeTest(base.BaseAdminNetworkTest):
@ -35,7 +35,7 @@ class QuotasNegativeTest(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(QuotasNegativeTest, cls).skip_checks() super(QuotasNegativeTest, cls).skip_checks()
if not test.is_extension_enabled('quotas', 'network'): if not utils.is_extension_enabled('quotas', 'network'):
msg = "quotas extension not enabled." msg = "quotas extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class QuotasTest(base.BaseAdminNetworkTest): class QuotasTest(base.BaseAdminNetworkTest):
@ -38,7 +38,7 @@ class QuotasTest(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(QuotasTest, cls).skip_checks() super(QuotasTest, cls).skip_checks()
if not test.is_extension_enabled('quotas', 'network'): if not utils.is_extension_enabled('quotas', 'network'):
msg = "quotas extension not enabled." msg = "quotas extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -16,10 +16,10 @@
import testtools import testtools
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest import config 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 import test
CONF = config.CONF CONF = config.CONF
@ -57,7 +57,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(RoutersAdminTest, cls).skip_checks() super(RoutersAdminTest, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
@ -79,7 +79,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
self.assertEqual(project_id, create_body['router']['tenant_id']) self.assertEqual(project_id, create_body['router']['tenant_id'])
@decorators.idempotent_id('847257cc-6afd-4154-b8fb-af49f5670ce8') @decorators.idempotent_id('847257cc-6afd-4154-b8fb-af49f5670ce8')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_create_router_with_default_snat_value(self): def test_create_router_with_default_snat_value(self):
@ -91,7 +91,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
'enable_snat': True}) 'enable_snat': True})
@decorators.idempotent_id('ea74068d-09e9-4fd7-8995-9b6a1ace920f') @decorators.idempotent_id('ea74068d-09e9-4fd7-8995-9b6a1ace920f')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_create_router_with_snat_explicit(self): def test_create_router_with_snat_explicit(self):
@ -153,7 +153,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
self._verify_gateway_port(router['id']) self._verify_gateway_port(router['id'])
@decorators.idempotent_id('b386c111-3b21-466d-880c-5e72b01e1a33') @decorators.idempotent_id('b386c111-3b21-466d-880c-5e72b01e1a33')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_update_router_set_gateway_with_snat_explicit(self): def test_update_router_set_gateway_with_snat_explicit(self):
@ -170,7 +170,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
self._verify_gateway_port(router['id']) self._verify_gateway_port(router['id'])
@decorators.idempotent_id('96536bc7-8262-4fb2-9967-5c46940fa279') @decorators.idempotent_id('96536bc7-8262-4fb2-9967-5c46940fa279')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_update_router_set_gateway_without_snat(self): def test_update_router_set_gateway_without_snat(self):
@ -202,7 +202,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
self.assertFalse(list_body['ports']) self.assertFalse(list_body['ports'])
@decorators.idempotent_id('f2faf994-97f4-410b-a831-9bc977b64374') @decorators.idempotent_id('f2faf994-97f4-410b-a831-9bc977b64374')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_update_router_reset_gateway_without_snat(self): def test_update_router_reset_gateway_without_snat(self):

View File

@ -16,9 +16,9 @@
import testtools import testtools
from tempest.api.network import base from tempest.api.network 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 import test
class RoutersTestDVR(base.BaseAdminNetworkTest): class RoutersTestDVR(base.BaseAdminNetworkTest):
@ -27,7 +27,7 @@ class RoutersTestDVR(base.BaseAdminNetworkTest):
def skip_checks(cls): def skip_checks(cls):
super(RoutersTestDVR, cls).skip_checks() super(RoutersTestDVR, cls).skip_checks()
for ext in ['router', 'dvr']: for ext in ['router', 'dvr']:
if not test.is_extension_enabled(ext, 'network'): if not utils.is_extension_enabled(ext, 'network'):
msg = "%s extension not enabled." % ext msg = "%s extension not enabled." % ext
raise cls.skipException(msg) raise cls.skipException(msg)
# The check above will pass if api_extensions=all, which does # The check above will pass if api_extensions=all, which does
@ -87,7 +87,7 @@ class RoutersTestDVR(base.BaseAdminNetworkTest):
self.assertFalse(router['router']['distributed']) self.assertFalse(router['router']['distributed'])
@decorators.idempotent_id('acd43596-c1fb-439d-ada8-31ad48ae3c2e') @decorators.idempotent_id('acd43596-c1fb-439d-ada8-31ad48ae3c2e')
@testtools.skipUnless(test.is_extension_enabled('l3-ha', 'network'), @testtools.skipUnless(utils.is_extension_enabled('l3-ha', 'network'),
'HA routers are not available.') 'HA routers are not available.')
def test_centralized_router_update_to_dvr(self): def test_centralized_router_update_to_dvr(self):
"""Test centralized router update """Test centralized router update

View File

@ -16,10 +16,10 @@
import testtools import testtools
from tempest.api.network import base from tempest.api.network 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
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -29,13 +29,13 @@ class RoutersAdminNegativeTest(base.BaseAdminNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(RoutersAdminNegativeTest, cls).skip_checks() super(RoutersAdminNegativeTest, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('7101cc02-058a-11e7-93e1-fa163e4fa634') @decorators.idempotent_id('7101cc02-058a-11e7-93e1-fa163e4fa634')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_router_set_gateway_used_ip_returns_409(self): def test_router_set_gateway_used_ip_returns_409(self):

View File

@ -17,9 +17,9 @@ import netaddr
import six import six
from tempest.api.network import base from tempest.api.network 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -44,7 +44,7 @@ class AllowedAddressPairTestJSON(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(AllowedAddressPairTestJSON, cls).skip_checks() super(AllowedAddressPairTestJSON, cls).skip_checks()
if not test.is_extension_enabled('allowed-address-pairs', 'network'): if not utils.is_extension_enabled('allowed-address-pairs', 'network'):
msg = "Allowed Address Pairs extension not enabled." msg = "Allowed Address Pairs extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -15,8 +15,8 @@
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class ExtensionsTestJSON(base.BaseNetworkTest): class ExtensionsTestJSON(base.BaseNetworkTest):
@ -40,7 +40,7 @@ class ExtensionsTestJSON(base.BaseNetworkTest):
'allowed-address-pairs', 'extra_dhcp_opt', 'allowed-address-pairs', 'extra_dhcp_opt',
'metering', 'dvr'] 'metering', 'dvr']
expected_alias = [ext for ext in expected_alias if expected_alias = [ext for ext in expected_alias if
test.is_extension_enabled(ext, 'network')] utils.is_extension_enabled(ext, 'network')]
actual_alias = list() actual_alias = list()
extensions = self.network_extensions_client.list_extensions() extensions = self.network_extensions_client.list_extensions()
list_extensions = extensions['extensions'] list_extensions = extensions['extensions']
@ -66,5 +66,5 @@ class ExtensionsTestJSON(base.BaseNetworkTest):
# of extensions returned, but only for those that have been # of extensions returned, but only for those that have been
# enabled via configuration # enabled via configuration
for e in expected_alias: for e in expected_alias:
if test.is_extension_enabled(e, 'network'): if utils.is_extension_enabled(e, 'network'):
self.assertIn(e, actual_alias) self.assertIn(e, actual_alias)

View File

@ -14,9 +14,9 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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 import test
class ExtraDHCPOptionsTestJSON(base.BaseNetworkTest): class ExtraDHCPOptionsTestJSON(base.BaseNetworkTest):
@ -35,7 +35,7 @@ class ExtraDHCPOptionsTestJSON(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(ExtraDHCPOptionsTestJSON, cls).skip_checks() super(ExtraDHCPOptionsTestJSON, cls).skip_checks()
if not test.is_extension_enabled('extra_dhcp_opt', 'network'): if not utils.is_extension_enabled('extra_dhcp_opt', 'network'):
msg = "Extra DHCP Options extension not enabled." msg = "Extra DHCP Options extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest.common.utils import net_utils from tempest.common.utils import net_utils
from tempest import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -43,7 +43,7 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FloatingIPTestJSON, cls).skip_checks() super(FloatingIPTestJSON, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
if not CONF.network.public_network_id: if not CONF.network.public_network_id:

View File

@ -15,10 +15,10 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network 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
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -34,7 +34,7 @@ class FloatingIPNegativeTestJSON(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(FloatingIPNegativeTestJSON, cls).skip_checks() super(FloatingIPNegativeTestJSON, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
if not CONF.network.public_network_id: if not CONF.network.public_network_id:

View File

@ -18,12 +18,12 @@ import testtools
from tempest.api.network import base from tempest.api.network import base
from tempest.common import custom_matchers from tempest.common import custom_matchers
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -209,7 +209,7 @@ class NetworksTest(BaseNetworkTestResources):
def test_show_network_fields(self): def test_show_network_fields(self):
# Verify specific fields of a network # Verify specific fields of a network
fields = ['id', 'name'] fields = ['id', 'name']
if test.is_extension_enabled('net-mtu', 'network'): if utils.is_extension_enabled('net-mtu', 'network'):
fields.append('mtu') fields.append('mtu')
body = self.networks_client.show_network(self.network['id'], body = self.networks_client.show_network(self.network['id'],
fields=fields) fields=fields)
@ -233,7 +233,7 @@ class NetworksTest(BaseNetworkTestResources):
def test_list_networks_fields(self): def test_list_networks_fields(self):
# Verify specific fields of the networks # Verify specific fields of the networks
fields = ['id', 'name'] fields = ['id', 'name']
if test.is_extension_enabled('net-mtu', 'network'): if utils.is_extension_enabled('net-mtu', 'network'):
fields.append('mtu') fields.append('mtu')
body = self.networks_client.list_networks(fields=fields) body = self.networks_client.list_networks(fields=fields)
networks = body['networks'] networks = body['networks']
@ -370,7 +370,7 @@ class NetworksTest(BaseNetworkTestResources):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('af774677-42a9-4e4b-bb58-16fe6a5bc1ec') @decorators.idempotent_id('af774677-42a9-4e4b-bb58-16fe6a5bc1ec')
@test.requires_ext(extension='external-net', service='network') @utils.requires_ext(extension='external-net', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
def test_external_network_visibility(self): def test_external_network_visibility(self):
@ -392,8 +392,8 @@ class NetworksTest(BaseNetworkTestResources):
self.assertEmpty(body['subnets'], "Public subnets visible") self.assertEmpty(body['subnets'], "Public subnets visible")
@decorators.idempotent_id('c72c1c0c-2193-4aca-ccc4-b1442640bbbb') @decorators.idempotent_id('c72c1c0c-2193-4aca-ccc4-b1442640bbbb')
@test.requires_ext(extension="standard-attr-description", @utils.requires_ext(extension="standard-attr-description",
service="network") service="network")
def test_create_update_network_description(self): def test_create_update_network_description(self):
body = self.create_network(description='d1') body = self.create_network(description='d1')
self.assertEqual('d1', body['description']) self.assertEqual('d1', body['description'])

View File

@ -18,11 +18,11 @@ import testtools
from tempest.api.network import base_security_groups as sec_base from tempest.api.network import base_security_groups as sec_base
from tempest.common import custom_matchers from tempest.common import custom_matchers
from tempest.common import utils
from tempest import config 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 from tempest.lib import exceptions
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -307,7 +307,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
@decorators.idempotent_id('58091b66-4ff4-4cc1-a549-05d60c7acd1a') @decorators.idempotent_id('58091b66-4ff4-4cc1-a549-05d60c7acd1a')
@testtools.skipUnless( @testtools.skipUnless(
test.is_extension_enabled('security-group', 'network'), utils.is_extension_enabled('security-group', 'network'),
'security-group extension not enabled.') 'security-group extension not enabled.')
def test_update_port_with_security_group_and_extra_attributes(self): def test_update_port_with_security_group_and_extra_attributes(self):
self._update_port_with_security_groups( self._update_port_with_security_groups(
@ -315,7 +315,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
@decorators.idempotent_id('edf6766d-3d40-4621-bc6e-2521a44c257d') @decorators.idempotent_id('edf6766d-3d40-4621-bc6e-2521a44c257d')
@testtools.skipUnless( @testtools.skipUnless(
test.is_extension_enabled('security-group', 'network'), utils.is_extension_enabled('security-group', 'network'),
'security-group extension not enabled.') 'security-group extension not enabled.')
def test_update_port_with_two_security_groups_and_extra_attributes(self): def test_update_port_with_two_security_groups_and_extra_attributes(self):
self._update_port_with_security_groups( self._update_port_with_security_groups(
@ -342,7 +342,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('4179dcb9-1382-4ced-84fe-1b91c54f5735') @decorators.idempotent_id('4179dcb9-1382-4ced-84fe-1b91c54f5735')
@testtools.skipUnless( @testtools.skipUnless(
test.is_extension_enabled('security-group', 'network'), utils.is_extension_enabled('security-group', 'network'),
'security-group extension not enabled.') 'security-group extension not enabled.')
def test_create_port_with_no_securitygroups(self): def test_create_port_with_no_securitygroups(self):
network = self.create_network() network = self.create_network()

View File

@ -17,10 +17,10 @@ import netaddr
import testtools import testtools
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest import config 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 import test
CONF = config.CONF CONF = config.CONF
@ -55,7 +55,7 @@ class RoutersTest(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(RoutersTest, cls).skip_checks() super(RoutersTest, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
@ -167,7 +167,7 @@ class RoutersTest(base.BaseNetworkTest):
self.assertIn(subnet_id, public_subnet_ids) self.assertIn(subnet_id, public_subnet_ids)
@decorators.idempotent_id('cbe42f84-04c2-11e7-8adb-fa163e4fa634') @decorators.idempotent_id('cbe42f84-04c2-11e7-8adb-fa163e4fa634')
@test.requires_ext(extension='ext-gw-mode', service='network') @utils.requires_ext(extension='ext-gw-mode', service='network')
@testtools.skipUnless(CONF.network.public_network_id, @testtools.skipUnless(CONF.network.public_network_id,
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
@decorators.skip_because(bug='1676207') @decorators.skip_because(bug='1676207')
@ -198,7 +198,7 @@ class RoutersTest(base.BaseNetworkTest):
fixed_ip['ip_address']) fixed_ip['ip_address'])
@decorators.idempotent_id('c86ac3a8-50bd-4b00-a6b8-62af84a0765c') @decorators.idempotent_id('c86ac3a8-50bd-4b00-a6b8-62af84a0765c')
@test.requires_ext(extension='extraroute', service='network') @utils.requires_ext(extension='extraroute', service='network')
def test_update_delete_extra_route(self): def test_update_delete_extra_route(self):
# Create different cidr for each subnet to avoid cidr duplicate # Create different cidr for each subnet to avoid cidr duplicate
# The cidr starts from project_cidr # The cidr starts from project_cidr

View File

@ -16,11 +16,11 @@
import netaddr import netaddr
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -30,7 +30,7 @@ class RoutersNegativeTest(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(RoutersNegativeTest, cls).skip_checks() super(RoutersNegativeTest, cls).skip_checks()
if not test.is_extension_enabled('router', 'network'): if not utils.is_extension_enabled('router', 'network'):
msg = "router extension not enabled." msg = "router extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
@ -124,7 +124,7 @@ class DvrRoutersNegativeTest(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(DvrRoutersNegativeTest, cls).skip_checks() super(DvrRoutersNegativeTest, cls).skip_checks()
if not test.is_extension_enabled('dvr', 'network'): if not utils.is_extension_enabled('dvr', 'network'):
msg = "DVR extension not enabled." msg = "DVR extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
from tempest.api.network import base_security_groups as base from tempest.api.network import base_security_groups as base
from tempest.common import utils
from tempest import config 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 import test
CONF = config.CONF CONF = config.CONF
@ -28,7 +28,7 @@ class SecGroupTest(base.BaseSecGroupTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(SecGroupTest, cls).skip_checks() super(SecGroupTest, cls).skip_checks()
if not test.is_extension_enabled('security-group', 'network'): if not utils.is_extension_enabled('security-group', 'network'):
msg = "security-group extension not enabled." msg = "security-group extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,11 +14,11 @@
# under the License. # under the License.
from tempest.api.network import base_security_groups as base from tempest.api.network import base_security_groups as base
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -29,7 +29,7 @@ class NegativeSecGroupTest(base.BaseSecGroupTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(NegativeSecGroupTest, cls).skip_checks() super(NegativeSecGroupTest, cls).skip_checks()
if not test.is_extension_enabled('security-group', 'network'): if not utils.is_extension_enabled('security-group', 'network'):
msg = "security-group extension not enabled." msg = "security-group extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -13,15 +13,15 @@
import testtools import testtools
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class ServiceProvidersTest(base.BaseNetworkTest): class ServiceProvidersTest(base.BaseNetworkTest):
@decorators.idempotent_id('2cbbeea9-f010-40f6-8df5-4eaa0c918ea6') @decorators.idempotent_id('2cbbeea9-f010-40f6-8df5-4eaa0c918ea6')
@testtools.skipUnless( @testtools.skipUnless(
test.is_extension_enabled('service-type', 'network'), utils.is_extension_enabled('service-type', 'network'),
'service-type extension not enabled.') 'service-type extension not enabled.')
def test_service_providers_list(self): def test_service_providers_list(self):
body = self.service_providers_client.list_service_providers() body = self.service_providers_client.list_service_providers()

View File

@ -13,12 +13,12 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -42,7 +42,7 @@ class SubnetPoolsTestJSON(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(SubnetPoolsTestJSON, cls).skip_checks() super(SubnetPoolsTestJSON, cls).skip_checks()
if not test.is_extension_enabled('subnet_allocation', 'network'): if not utils.is_extension_enabled('subnet_allocation', 'network'):
msg = "subnet_allocation extension not enabled." msg = "subnet_allocation extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -14,11 +14,11 @@
# under the License. # under the License.
from tempest.api.network import base from tempest.api.network import base
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -40,7 +40,7 @@ class TagsTest(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(TagsTest, cls).skip_checks() super(TagsTest, cls).skip_checks()
if not test.is_extension_enabled('tag', 'network'): if not utils.is_extension_enabled('tag', 'network'):
msg = "tag extension not enabled." msg = "tag extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
@ -115,7 +115,7 @@ class TagsExtTest(base.BaseNetworkTest):
@classmethod @classmethod
def skip_checks(cls): def skip_checks(cls):
super(TagsExtTest, cls).skip_checks() super(TagsExtTest, cls).skip_checks()
if not test.is_extension_enabled('tag-ext', 'network'): if not utils.is_extension_enabled('tag-ext', 'network'):
msg = "tag-ext extension not enabled." msg = "tag-ext extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)

View File

@ -17,8 +17,8 @@ import tempfile
from tempest.api.object_storage import base from tempest.api.object_storage import base
from tempest.common import custom_matchers from tempest.common import custom_matchers
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class BulkTest(base.BaseObjectTest): class BulkTest(base.BaseObjectTest):
@ -69,7 +69,7 @@ class BulkTest(base.BaseObjectTest):
self.assertNotIn(container_name, body) self.assertNotIn(container_name, body)
@decorators.idempotent_id('a407de51-1983-47cc-9f14-47c2b059413c') @decorators.idempotent_id('a407de51-1983-47cc-9f14-47c2b059413c')
@test.requires_ext(extension='bulk_upload', service='object') @utils.requires_ext(extension='bulk_upload', service='object')
def test_extract_archive(self): def test_extract_archive(self):
# Test bulk operation of file upload with an archived file # Test bulk operation of file upload with an archived file
filepath, container_name, object_name = self._create_archive() filepath, container_name, object_name = self._create_archive()
@ -104,7 +104,7 @@ class BulkTest(base.BaseObjectTest):
self.assertIn(object_name, [c['name'] for c in contents_list]) self.assertIn(object_name, [c['name'] for c in contents_list])
@decorators.idempotent_id('c075e682-0d2a-43b2-808d-4116200d736d') @decorators.idempotent_id('c075e682-0d2a-43b2-808d-4116200d736d')
@test.requires_ext(extension='bulk_delete', service='object') @utils.requires_ext(extension='bulk_delete', service='object')
def test_bulk_delete(self): def test_bulk_delete(self):
# Test bulk operation of deleting multiple files # Test bulk operation of deleting multiple files
filepath, container_name, object_name = self._create_archive() filepath, container_name, object_name = self._create_archive()
@ -129,7 +129,7 @@ class BulkTest(base.BaseObjectTest):
self._check_contents_deleted(container_name) self._check_contents_deleted(container_name)
@decorators.idempotent_id('dbea2bcb-efbb-4674-ac8a-a5a0e33d1d79') @decorators.idempotent_id('dbea2bcb-efbb-4674-ac8a-a5a0e33d1d79')
@test.requires_ext(extension='bulk_delete', service='object') @utils.requires_ext(extension='bulk_delete', service='object')
def test_bulk_delete_by_POST(self): def test_bulk_delete_by_POST(self):
# Test bulk operation of deleting multiple files # Test bulk operation of deleting multiple files
filepath, container_name, object_name = self._create_archive() filepath, container_name, object_name = self._create_archive()

View File

@ -13,10 +13,10 @@
# under the License. # under the License.
from tempest.api.object_storage import base from tempest.api.object_storage import base
from tempest.common import utils
from tempest import config 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 import test
CONF = config.CONF CONF = config.CONF
@ -77,7 +77,7 @@ class AccountQuotasTest(base.BaseObjectTest):
@decorators.attr(type="smoke") @decorators.attr(type="smoke")
@decorators.idempotent_id('a22ef352-a342-4587-8f47-3bbdb5b039c4') @decorators.idempotent_id('a22ef352-a342-4587-8f47-3bbdb5b039c4')
@test.requires_ext(extension='account_quotas', service='object') @utils.requires_ext(extension='account_quotas', service='object')
def test_upload_valid_object(self): def test_upload_valid_object(self):
object_name = data_utils.rand_name(name="TestObject") object_name = data_utils.rand_name(name="TestObject")
data = data_utils.arbitrary_string() data = data_utils.arbitrary_string()
@ -88,7 +88,7 @@ class AccountQuotasTest(base.BaseObjectTest):
@decorators.attr(type=["smoke"]) @decorators.attr(type=["smoke"])
@decorators.idempotent_id('63f51f9f-5f1d-4fc6-b5be-d454d70949d6') @decorators.idempotent_id('63f51f9f-5f1d-4fc6-b5be-d454d70949d6')
@test.requires_ext(extension='account_quotas', service='object') @utils.requires_ext(extension='account_quotas', service='object')
def test_admin_modify_quota(self): def test_admin_modify_quota(self):
"""Test ResellerAdmin can modify/remove the quota on a user's account """Test ResellerAdmin can modify/remove the quota on a user's account

View File

@ -13,10 +13,10 @@
# under the License. # under the License.
from tempest.api.object_storage import base from tempest.api.object_storage 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
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -76,7 +76,7 @@ class AccountQuotasNegativeTest(base.BaseObjectTest):
@decorators.attr(type=["negative"]) @decorators.attr(type=["negative"])
@decorators.idempotent_id('d1dc5076-555e-4e6d-9697-28f1fe976324') @decorators.idempotent_id('d1dc5076-555e-4e6d-9697-28f1fe976324')
@test.requires_ext(extension='account_quotas', service='object') @utils.requires_ext(extension='account_quotas', service='object')
def test_user_modify_quota(self): def test_user_modify_quota(self):
"""Test that a user cannot modify or remove a quota on its account.""" """Test that a user cannot modify or remove a quota on its account."""

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
from tempest.api.object_storage import base from tempest.api.object_storage 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
from tempest import test
QUOTA_BYTES = 10 QUOTA_BYTES = 10
QUOTA_COUNT = 3 QUOTA_COUNT = 3
@ -49,7 +49,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
super(ContainerQuotasTest, self).tearDown() super(ContainerQuotasTest, self).tearDown()
@decorators.idempotent_id('9a0fb034-86af-4df0-86fa-f8bd7db21ae0') @decorators.idempotent_id('9a0fb034-86af-4df0-86fa-f8bd7db21ae0')
@test.requires_ext(extension='container_quotas', service='object') @utils.requires_ext(extension='container_quotas', service='object')
@decorators.attr(type="smoke") @decorators.attr(type="smoke")
def test_upload_valid_object(self): def test_upload_valid_object(self):
"""Attempts to uploads an object smaller than the bytes quota.""" """Attempts to uploads an object smaller than the bytes quota."""
@ -66,7 +66,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
self.assertEqual(nbefore + len(data), nafter) self.assertEqual(nbefore + len(data), nafter)
@decorators.idempotent_id('22eeeb2b-3668-4160-baef-44790f65a5a0') @decorators.idempotent_id('22eeeb2b-3668-4160-baef-44790f65a5a0')
@test.requires_ext(extension='container_quotas', service='object') @utils.requires_ext(extension='container_quotas', service='object')
@decorators.attr(type="smoke") @decorators.attr(type="smoke")
def test_upload_large_object(self): def test_upload_large_object(self):
"""Attempts to upload an object larger than the bytes quota.""" """Attempts to upload an object larger than the bytes quota."""
@ -83,7 +83,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
self.assertEqual(nbefore, nafter) self.assertEqual(nbefore, nafter)
@decorators.idempotent_id('3a387039-697a-44fc-a9c0-935de31f426b') @decorators.idempotent_id('3a387039-697a-44fc-a9c0-935de31f426b')
@test.requires_ext(extension='container_quotas', service='object') @utils.requires_ext(extension='container_quotas', service='object')
@decorators.attr(type="smoke") @decorators.attr(type="smoke")
def test_upload_too_many_objects(self): def test_upload_too_many_objects(self):
"""Attempts to upload many objects that exceeds the count limit.""" """Attempts to upload many objects that exceeds the count limit."""

View File

@ -14,10 +14,10 @@
from tempest.api.object_storage import base from tempest.api.object_storage import base
from tempest.common import custom_matchers from tempest.common import custom_matchers
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
from tempest import test
class StaticWebTest(base.BaseObjectTest): class StaticWebTest(base.BaseObjectTest):
@ -45,7 +45,7 @@ class StaticWebTest(base.BaseObjectTest):
super(StaticWebTest, cls).resource_cleanup() super(StaticWebTest, cls).resource_cleanup()
@decorators.idempotent_id('c1f055ab-621d-4a6a-831f-846fcb578b8b') @decorators.idempotent_id('c1f055ab-621d-4a6a-831f-846fcb578b8b')
@test.requires_ext(extension='staticweb', service='object') @utils.requires_ext(extension='staticweb', service='object')
def test_web_index(self): def test_web_index(self):
headers = {'web-index': self.object_name} headers = {'web-index': self.object_name}
@ -76,7 +76,7 @@ class StaticWebTest(base.BaseObjectTest):
self.assertNotIn('x-container-meta-web-index', body) self.assertNotIn('x-container-meta-web-index', body)
@decorators.idempotent_id('941814cf-db9e-4b21-8112-2b6d0af10ee5') @decorators.idempotent_id('941814cf-db9e-4b21-8112-2b6d0af10ee5')
@test.requires_ext(extension='staticweb', service='object') @utils.requires_ext(extension='staticweb', service='object')
def test_web_listing(self): def test_web_listing(self):
headers = {'web-listings': 'true'} headers = {'web-listings': 'true'}
@ -108,7 +108,7 @@ class StaticWebTest(base.BaseObjectTest):
self.assertNotIn('x-container-meta-web-listings', body) self.assertNotIn('x-container-meta-web-listings', body)
@decorators.idempotent_id('bc37ec94-43c8-4990-842e-0e5e02fc8926') @decorators.idempotent_id('bc37ec94-43c8-4990-842e-0e5e02fc8926')
@test.requires_ext(extension='staticweb', service='object') @utils.requires_ext(extension='staticweb', service='object')
def test_web_listing_css(self): def test_web_listing_css(self):
headers = {'web-listings': 'true', headers = {'web-listings': 'true',
'web-listings-css': 'listings.css'} 'web-listings-css': 'listings.css'}
@ -131,7 +131,7 @@ class StaticWebTest(base.BaseObjectTest):
self.assertIn(css, body.decode()) self.assertIn(css, body.decode())
@decorators.idempotent_id('f18b4bef-212e-45e7-b3ca-59af3a465f82') @decorators.idempotent_id('f18b4bef-212e-45e7-b3ca-59af3a465f82')
@test.requires_ext(extension='staticweb', service='object') @utils.requires_ext(extension='staticweb', service='object')
def test_web_error(self): def test_web_error(self):
headers = {'web-listings': 'true', headers = {'web-listings': 'true',
'web-error': self.object_name} 'web-error': self.object_name}

View File

@ -13,9 +13,9 @@
# under the License. # under the License.
from tempest.api.object_storage import test_container_sync from tempest.api.object_storage import test_container_sync
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -39,7 +39,7 @@ class ContainerSyncMiddlewareTest(test_container_sync.ContainerSyncTest):
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('ea4645a1-d147-4976-82f7-e5a7a3065f80') @decorators.idempotent_id('ea4645a1-d147-4976-82f7-e5a7a3065f80')
@test.requires_ext(extension='container_sync', service='object') @utils.requires_ext(extension='container_sync', service='object')
def test_container_synchronization(self): def test_container_synchronization(self):
def make_headers(cont, cont_client): def make_headers(cont, cont_client):
# tell first container to synchronize to a second # tell first container to synchronize to a second

View File

@ -14,8 +14,8 @@
from tempest.api.object_storage import base from tempest.api.object_storage import base
from tempest.common import custom_matchers from tempest.common import custom_matchers
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
class CrossdomainTest(base.BaseObjectTest): class CrossdomainTest(base.BaseObjectTest):
@ -38,7 +38,7 @@ class CrossdomainTest(base.BaseObjectTest):
self.account_client.skip_path() self.account_client.skip_path()
@decorators.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7') @decorators.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7')
@test.requires_ext(extension='crossdomain', service='object') @utils.requires_ext(extension='crossdomain', service='object')
def test_get_crossdomain_policy(self): def test_get_crossdomain_policy(self):
resp, body = self.account_client.get("crossdomain.xml", {}) resp, body = self.account_client.get("crossdomain.xml", {})
body = body.decode() body = body.decode()

View File

@ -19,9 +19,9 @@ import time
from six.moves.urllib import parse as urlparse from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base from tempest.api.object_storage 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 import test
class ObjectFormPostTest(base.BaseObjectTest): class ObjectFormPostTest(base.BaseObjectTest):
@ -108,7 +108,7 @@ class ObjectFormPostTest(base.BaseObjectTest):
return body, content_type return body, content_type
@decorators.idempotent_id('80fac02b-6e54-4f7b-be0d-a965b5cbef76') @decorators.idempotent_id('80fac02b-6e54-4f7b-be0d-a965b5cbef76')
@test.requires_ext(extension='formpost', service='object') @utils.requires_ext(extension='formpost', service='object')
def test_post_object_using_form(self): def test_post_object_using_form(self):
body, content_type = self.get_multipart_form() body, content_type = self.get_multipart_form()

View File

@ -19,10 +19,10 @@ import time
from six.moves.urllib import parse as urlparse from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base from tempest.api.object_storage 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
from tempest import test
class ObjectFormPostNegativeTest(base.BaseObjectTest): class ObjectFormPostNegativeTest(base.BaseObjectTest):
@ -109,7 +109,7 @@ class ObjectFormPostNegativeTest(base.BaseObjectTest):
return body, content_type return body, content_type
@decorators.idempotent_id('d3fb3c4d-e627-48ce-9379-a1631f21336d') @decorators.idempotent_id('d3fb3c4d-e627-48ce-9379-a1631f21336d')
@test.requires_ext(extension='formpost', service='object') @utils.requires_ext(extension='formpost', service='object')
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
def test_post_object_using_form_expired(self): def test_post_object_using_form_expired(self):
body, content_type = self.get_multipart_form(expires=1) body, content_type = self.get_multipart_form(expires=1)
@ -126,7 +126,7 @@ class ObjectFormPostNegativeTest(base.BaseObjectTest):
self.assertIn('FormPost: Form Expired', str(exc)) self.assertIn('FormPost: Form Expired', str(exc))
@decorators.idempotent_id('b277257f-113c-4499-b8d1-5fead79f7360') @decorators.idempotent_id('b277257f-113c-4499-b8d1-5fead79f7360')
@test.requires_ext(extension='formpost', service='object') @utils.requires_ext(extension='formpost', service='object')
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
def test_post_object_using_form_invalid_signature(self): def test_post_object_using_form_invalid_signature(self):
self.key = "Wrong" self.key = "Wrong"

View File

@ -18,10 +18,10 @@ from oslo_serialization import jsonutils as json
from tempest.api.object_storage import base from tempest.api.object_storage import base
from tempest.common import custom_matchers from tempest.common import custom_matchers
from tempest.common import utils
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
# Each segment, except for the final one, must be at least 1 megabyte # Each segment, except for the final one, must be at least 1 megabyte
MIN_SEGMENT_SIZE = 1024 * 1024 MIN_SEGMENT_SIZE = 1024 * 1024
@ -107,7 +107,7 @@ class ObjectSloTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', method) self.assertHeaders(resp, 'Object', method)
@decorators.idempotent_id('2c3f24a6-36e8-4711-9aa2-800ee1fc7b5b') @decorators.idempotent_id('2c3f24a6-36e8-4711-9aa2-800ee1fc7b5b')
@test.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_upload_manifest(self): def test_upload_manifest(self):
# create static large object from multipart manifest # create static large object from multipart manifest
manifest = self._create_manifest() manifest = self._create_manifest()
@ -122,7 +122,7 @@ class ObjectSloTest(base.BaseObjectTest):
self._assertHeadersSLO(resp, 'PUT') self._assertHeadersSLO(resp, 'PUT')
@decorators.idempotent_id('e69ad766-e1aa-44a2-bdd2-bf62c09c1456') @decorators.idempotent_id('e69ad766-e1aa-44a2-bdd2-bf62c09c1456')
@test.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_list_large_object_metadata(self): def test_list_large_object_metadata(self):
# list static large object metadata using multipart manifest # list static large object metadata using multipart manifest
object_name = self._create_large_object() object_name = self._create_large_object()
@ -134,7 +134,7 @@ class ObjectSloTest(base.BaseObjectTest):
self._assertHeadersSLO(resp, 'HEAD') self._assertHeadersSLO(resp, 'HEAD')
@decorators.idempotent_id('49bc49bc-dd1b-4c0f-904e-d9f10b830ee8') @decorators.idempotent_id('49bc49bc-dd1b-4c0f-904e-d9f10b830ee8')
@test.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_retrieve_large_object(self): def test_retrieve_large_object(self):
# list static large object using multipart manifest # list static large object using multipart manifest
object_name = self._create_large_object() object_name = self._create_large_object()
@ -149,7 +149,7 @@ class ObjectSloTest(base.BaseObjectTest):
self.assertEqual(body, sum_data) self.assertEqual(body, sum_data)
@decorators.idempotent_id('87b6dfa1-abe9-404d-8bf0-6c3751e6aa77') @decorators.idempotent_id('87b6dfa1-abe9-404d-8bf0-6c3751e6aa77')
@test.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_delete_large_object(self): def test_delete_large_object(self):
# delete static large object using multipart manifest # delete static large object using multipart manifest
object_name = self._create_large_object() object_name = self._create_large_object()

View File

@ -19,9 +19,9 @@ import time
from six.moves.urllib import parse as urlparse from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base from tempest.api.object_storage 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 import test
class ObjectTempUrlTest(base.BaseObjectTest): class ObjectTempUrlTest(base.BaseObjectTest):
@ -88,7 +88,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
return url return url
@decorators.idempotent_id('f91c96d4-1230-4bba-8eb9-84476d18d991') @decorators.idempotent_id('f91c96d4-1230-4bba-8eb9-84476d18d991')
@test.requires_ext(extension='tempurl', service='object') @utils.requires_ext(extension='tempurl', service='object')
def test_get_object_using_temp_url(self): def test_get_object_using_temp_url(self):
expires = self._get_expiry_date() expires = self._get_expiry_date()
@ -107,7 +107,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'HEAD') self.assertHeaders(resp, 'Object', 'HEAD')
@decorators.idempotent_id('671f9583-86bd-4128-a034-be282a68c5d8') @decorators.idempotent_id('671f9583-86bd-4128-a034-be282a68c5d8')
@test.requires_ext(extension='tempurl', service='object') @utils.requires_ext(extension='tempurl', service='object')
def test_get_object_using_temp_url_key_2(self): def test_get_object_using_temp_url_key_2(self):
key2 = 'Meta2-' key2 = 'Meta2-'
metadata = {'Temp-URL-Key-2': key2} metadata = {'Temp-URL-Key-2': key2}
@ -132,7 +132,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
self.assertEqual(body, self.content) self.assertEqual(body, self.content)
@decorators.idempotent_id('9b08dade-3571-4152-8a4f-a4f2a873a735') @decorators.idempotent_id('9b08dade-3571-4152-8a4f-a4f2a873a735')
@test.requires_ext(extension='tempurl', service='object') @utils.requires_ext(extension='tempurl', service='object')
def test_put_object_using_temp_url(self): def test_put_object_using_temp_url(self):
new_data = data_utils.random_bytes(size=len(self.object_name)) new_data = data_utils.random_bytes(size=len(self.object_name))
@ -158,7 +158,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
self.assertEqual(body, new_data) self.assertEqual(body, new_data)
@decorators.idempotent_id('249a0111-5ad3-4534-86a7-1993d55f9185') @decorators.idempotent_id('249a0111-5ad3-4534-86a7-1993d55f9185')
@test.requires_ext(extension='tempurl', service='object') @utils.requires_ext(extension='tempurl', service='object')
def test_head_object_using_temp_url(self): def test_head_object_using_temp_url(self):
expires = self._get_expiry_date() expires = self._get_expiry_date()
@ -172,7 +172,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'HEAD') self.assertHeaders(resp, 'Object', 'HEAD')
@decorators.idempotent_id('9d9cfd90-708b-465d-802c-e4a8090b823d') @decorators.idempotent_id('9d9cfd90-708b-465d-802c-e4a8090b823d')
@test.requires_ext(extension='tempurl', service='object') @utils.requires_ext(extension='tempurl', service='object')
def test_get_object_using_temp_url_with_inline_query_parameter(self): def test_get_object_using_temp_url_with_inline_query_parameter(self):
expires = self._get_expiry_date() expires = self._get_expiry_date()

View File

@ -19,10 +19,10 @@ import time
from six.moves.urllib import parse as urlparse from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base from tempest.api.object_storage 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
from tempest import test
class ObjectTempUrlNegativeTest(base.BaseObjectTest): class ObjectTempUrlNegativeTest(base.BaseObjectTest):
@ -94,7 +94,7 @@ class ObjectTempUrlNegativeTest(base.BaseObjectTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('5a583aca-c804-41ba-9d9a-e7be132bdf0b') @decorators.idempotent_id('5a583aca-c804-41ba-9d9a-e7be132bdf0b')
@test.requires_ext(extension='tempurl', service='object') @utils.requires_ext(extension='tempurl', service='object')
def test_get_object_after_expiration_time(self): def test_get_object_after_expiration_time(self):
expires = self._get_expiry_date(1) expires = self._get_expiry_date(1)

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -67,7 +67,7 @@ class VolumesActionsTest(base.BaseVolumeAdminTest):
self._create_reset_and_force_delete_temp_volume('maintenance') self._create_reset_and_force_delete_temp_volume('maintenance')
@decorators.idempotent_id('d38285d9-929d-478f-96a5-00e66a115b81') @decorators.idempotent_id('d38285d9-929d-478f-96a5-00e66a115b81')
@test.services('compute') @utils.services('compute')
def test_force_detach_volume(self): def test_force_detach_volume(self):
# Create a server and a volume # Create a server and a volume
server_id = self.create_server()['id'] server_id = self.create_server()['id']

View File

@ -16,9 +16,9 @@
from testtools import matchers from testtools import matchers
from tempest.api.volume import base from tempest.api.volume 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -39,7 +39,7 @@ class VolumesImageMetadata(base.BaseVolumeTest):
cls.volume = cls.create_volume(imageRef=CONF.compute.image_ref) cls.volume = cls.create_volume(imageRef=CONF.compute.image_ref)
@decorators.idempotent_id('03efff0b-5c75-4822-8f10-8789ac15b13e') @decorators.idempotent_id('03efff0b-5c75-4822-8f10-8789ac15b13e')
@test.services('image') @utils.services('image')
def test_update_show_delete_image_metadata(self): def test_update_show_delete_image_metadata(self):
# Update image metadata # Update image metadata
image_metadata = {'image_id': '5137a025-3c5f-43c1-bc64-5f41270040a5', image_metadata = {'image_id': '5137a025-3c5f-43c1-bc64-5f41270040a5',

View File

@ -14,12 +14,12 @@
# under the License. # under the License.
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.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -35,7 +35,7 @@ class VolumesActionsTest(base.BaseVolumeTest):
@decorators.idempotent_id('fff42874-7db5-4487-a8e1-ddda5fb5288d') @decorators.idempotent_id('fff42874-7db5-4487-a8e1-ddda5fb5288d')
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@test.services('compute') @utils.services('compute')
def test_attach_detach_volume_to_instance(self): def test_attach_detach_volume_to_instance(self):
# Create a server # Create a server
server = self.create_server() server = self.create_server()
@ -66,7 +66,7 @@ class VolumesActionsTest(base.BaseVolumeTest):
fetched_volume['bootable']) fetched_volume['bootable'])
@decorators.idempotent_id('9516a2c8-9135-488c-8dd6-5677a7e5f371') @decorators.idempotent_id('9516a2c8-9135-488c-8dd6-5677a7e5f371')
@test.services('compute') @utils.services('compute')
def test_get_volume_attachment(self): def test_get_volume_attachment(self):
# Create a server # Create a server
server = self.create_server() server = self.create_server()
@ -94,7 +94,7 @@ class VolumesActionsTest(base.BaseVolumeTest):
self.assertEqual(self.volume['id'], attachment['volume_id']) self.assertEqual(self.volume['id'], attachment['volume_id'])
@decorators.idempotent_id('d8f1ca95-3d5b-44a3-b8ca-909691c9532d') @decorators.idempotent_id('d8f1ca95-3d5b-44a3-b8ca-909691c9532d')
@test.services('image') @utils.services('image')
def test_volume_upload(self): def test_volume_upload(self):
# NOTE(gfidente): the volume uploaded in Glance comes from setUpClass, # NOTE(gfidente): the volume uploaded in Glance comes from setUpClass,
# it is shared with the other tests. After it is uploaded in Glance, # it is shared with the other tests. After it is uploaded in Glance,

View File

@ -17,11 +17,11 @@ import testtools
from testtools import matchers from testtools import matchers
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.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 import test
CONF = config.CONF CONF = config.CONF
@ -97,7 +97,7 @@ class VolumesBackupsTest(base.BaseVolumeTest):
matchers.ContainsAll(metadata.items())) matchers.ContainsAll(metadata.items()))
@decorators.idempotent_id('07af8f6d-80af-44c9-a5dc-c8427b1b62e6') @decorators.idempotent_id('07af8f6d-80af-44c9-a5dc-c8427b1b62e6')
@test.services('compute') @utils.services('compute')
def test_backup_create_attached_volume(self): def test_backup_create_attached_volume(self):
"""Test backup create using force flag. """Test backup create using force flag.
@ -119,7 +119,7 @@ class VolumesBackupsTest(base.BaseVolumeTest):
self.assertEqual(backup_name, backup['name']) self.assertEqual(backup_name, backup['name'])
@decorators.idempotent_id('2a8ba340-dff2-4511-9db7-646f07156b15') @decorators.idempotent_id('2a8ba340-dff2-4511-9db7-646f07156b15')
@test.services('image') @utils.services('image')
def test_bootable_volume_backup_and_restore(self): def test_bootable_volume_backup_and_restore(self):
# Create volume from image # Create volume from image
img_uuid = CONF.compute.image_ref img_uuid = CONF.compute.image_ref

View File

@ -14,9 +14,9 @@
# under the License. # under the License.
from tempest.api.volume import base from tempest.api.volume 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -56,7 +56,7 @@ class VolumesCloneTest(base.BaseVolumeTest):
self._verify_volume_clone(src_vol, dst_vol, extra_size=1) self._verify_volume_clone(src_vol, dst_vol, extra_size=1)
@decorators.idempotent_id('cbbcd7c6-5a6c-481a-97ac-ca55ab715d16') @decorators.idempotent_id('cbbcd7c6-5a6c-481a-97ac-ca55ab715d16')
@test.services('image') @utils.services('image')
def test_create_from_bootable_volume(self): def test_create_from_bootable_volume(self):
# Create volume from image # Create volume from image
img_uuid = CONF.compute.image_ref img_uuid = CONF.compute.image_ref

View File

@ -17,11 +17,11 @@ import testtools
from testtools import matchers from testtools import matchers
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.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 import test
CONF = config.CONF CONF = config.CONF
@ -122,7 +122,7 @@ class VolumesGetTest(base.BaseVolumeTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('54a01030-c7fc-447c-86ee-c1182beae638') @decorators.idempotent_id('54a01030-c7fc-447c-86ee-c1182beae638')
@test.services('image') @utils.services('image')
def test_volume_create_get_update_delete_from_image(self): def test_volume_create_get_update_delete_from_image(self):
image = self.images_client.show_image(CONF.compute.image_ref) image = self.images_client.show_image(CONF.compute.image_ref)
min_disk = image['min_disk'] min_disk = image['min_disk']

View File

@ -16,13 +16,13 @@
import six import six
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.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -168,7 +168,7 @@ class VolumesNegativeTest(base.BaseVolumeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('f5e56b0a-5d02-43c1-a2a7-c9b792c2e3f6') @decorators.idempotent_id('f5e56b0a-5d02-43c1-a2a7-c9b792c2e3f6')
@test.services('compute') @utils.services('compute')
def test_attach_volumes_with_nonexistent_volume_id(self): def test_attach_volumes_with_nonexistent_volume_id(self):
server = self.create_server() server = self.create_server()
@ -292,7 +292,7 @@ class VolumesNegativeTest(base.BaseVolumeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('5b810c91-0ad1-47ce-aee8-615f789be78f') @decorators.idempotent_id('5b810c91-0ad1-47ce-aee8-615f789be78f')
@test.services('image') @utils.services('image')
def test_create_volume_from_image_with_decreasing_size(self): def test_create_volume_from_image_with_decreasing_size(self):
# Create image # Create image
image = self.create_image() image = self.create_image()
@ -307,7 +307,7 @@ class VolumesNegativeTest(base.BaseVolumeTest):
@decorators.attr(type=['negative']) @decorators.attr(type=['negative'])
@decorators.idempotent_id('d15e7f35-2cfc-48c8-9418-c8223a89bcbb') @decorators.idempotent_id('d15e7f35-2cfc-48c8-9418-c8223a89bcbb')
@test.services('image') @utils.services('image')
def test_create_volume_from_deactivated_image(self): def test_create_volume_from_deactivated_image(self):
# Create image # Create image
image = self.create_image() image = self.create_image()

View File

@ -14,11 +14,11 @@ import testtools
from testtools import matchers from testtools import matchers
from tempest.api.volume import base from tempest.api.volume import base
from tempest.common import utils
from tempest import config 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
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -37,7 +37,7 @@ class VolumesSnapshotTestJSON(base.BaseVolumeTest):
cls.volume_origin = cls.create_volume() cls.volume_origin = cls.create_volume()
@decorators.idempotent_id('8567b54c-4455-446d-a1cf-651ddeaa3ff2') @decorators.idempotent_id('8567b54c-4455-446d-a1cf-651ddeaa3ff2')
@test.services('compute') @utils.services('compute')
def test_snapshot_create_delete_with_volume_in_use(self): def test_snapshot_create_delete_with_volume_in_use(self):
# Create a test instance # Create a test instance
server = self.create_server() server = self.create_server()
@ -59,7 +59,7 @@ class VolumesSnapshotTestJSON(base.BaseVolumeTest):
self.delete_snapshot(snapshot2['id']) self.delete_snapshot(snapshot2['id'])
@decorators.idempotent_id('5210a1de-85a0-11e6-bb21-641c676a5d61') @decorators.idempotent_id('5210a1de-85a0-11e6-bb21-641c676a5d61')
@test.services('compute') @utils.services('compute')
def test_snapshot_create_offline_delete_online(self): def test_snapshot_create_offline_delete_online(self):
# Create a snapshot while it is not attached # Create a snapshot while it is not attached

View File

@ -19,9 +19,9 @@ from oslo_log import log as logging
from tempest import clients from tempest import clients
from tempest.common import credentials_factory as credentials from tempest.common import credentials_factory as credentials
from tempest.common import identity from tempest.common import identity
from tempest.common import utils
from tempest.common.utils import net_info from tempest.common.utils import net_info
from tempest import config from tempest import config
from tempest import test
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
CONF = config.CONF CONF = config.CONF
@ -964,7 +964,7 @@ def get_tenant_cleanup_services():
tenant_services.append(StackService) tenant_services.append(StackService)
if IS_NEUTRON: if IS_NEUTRON:
tenant_services.append(NetworkFloatingIpService) tenant_services.append(NetworkFloatingIpService)
if test.is_extension_enabled('metering', 'network'): if utils.is_extension_enabled('metering', 'network'):
tenant_services.append(NetworkMeteringLabelRuleService) tenant_services.append(NetworkMeteringLabelRuleService)
tenant_services.append(NetworkMeteringLabelService) tenant_services.append(NetworkMeteringLabelService)
tenant_services.append(NetworkRouterService) tenant_services.append(NetworkRouterService)

View File

@ -12,10 +12,16 @@
# 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 functools
from functools import partial from functools import partial
import testtools
from tempest import config from tempest import config
from tempest.exceptions import InvalidServiceTag
from tempest.lib.common.utils import data_utils as lib_data_utils from tempest.lib.common.utils import data_utils as lib_data_utils
from tempest.lib import decorators
CONF = config.CONF CONF = config.CONF
@ -36,3 +42,89 @@ class DataUtils(object):
return attr_obj return attr_obj
data_utils = DataUtils() data_utils = DataUtils()
def get_service_list():
service_list = {
'compute': CONF.service_available.nova,
'image': CONF.service_available.glance,
'volume': CONF.service_available.cinder,
# NOTE(masayukig): We have two network services which are neutron and
# nova-network. And we have no way to know whether nova-network is
# available or not. After the pending removal of nova-network from
# nova, we can treat the network/neutron case in the same manner as
# the other services.
'network': True,
# NOTE(masayukig): Tempest tests always require the identity service.
# So we should set this True here.
'identity': True,
'object_storage': CONF.service_available.swift,
}
return service_list
def services(*args):
"""A decorator used to set an attr for each service used in a test case
This decorator applies a testtools attr for each service that gets
exercised by a test case.
"""
def decorator(f):
known_services = get_service_list()
for service in args:
if service not in known_services:
raise InvalidServiceTag('%s is not a valid service' % service)
decorators.attr(type=list(args))(f)
@functools.wraps(f)
def wrapper(self, *func_args, **func_kwargs):
service_list = get_service_list()
for service in args:
if not service_list[service]:
msg = 'Skipped because the %s service is not available' % (
service)
raise testtools.TestCase.skipException(msg)
return f(self, *func_args, **func_kwargs)
return wrapper
return decorator
def requires_ext(**kwargs):
"""A decorator to skip tests if an extension is not enabled
@param extension
@param service
"""
def decorator(func):
@functools.wraps(func)
def wrapper(*func_args, **func_kwargs):
if not is_extension_enabled(kwargs['extension'],
kwargs['service']):
msg = "Skipped because %s extension: %s is not enabled" % (
kwargs['service'], kwargs['extension'])
raise testtools.TestCase.skipException(msg)
return func(*func_args, **func_kwargs)
return wrapper
return decorator
def is_extension_enabled(extension_name, service):
"""A function that will check the list of enabled extensions from config
"""
config_dict = {
'compute': CONF.compute_feature_enabled.api_extensions,
'volume': CONF.volume_feature_enabled.api_extensions,
'network': CONF.network_feature_enabled.api_extensions,
'object': CONF.object_storage_feature_enabled.discoverable_apis,
'identity': CONF.identity_feature_enabled.api_extensions
}
if not config_dict[service]:
return False
if config_dict[service][0] == 'all':
return True
if extension_name in config_dict[service]:
return True
return False

View File

@ -54,3 +54,7 @@ class ServerUnreachable(exceptions.TempestException):
class RFCViolation(exceptions.RestClientException): class RFCViolation(exceptions.RestClientException):
message = "RFC Violation" message = "RFC Violation"
class InvalidServiceTag(exceptions.TempestException):
message = "Invalid service tag"

View File

@ -451,7 +451,7 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
creds.username) creds.username)
# NOTE(zhufl): Only when neutron's security_group ext is # NOTE(zhufl): Only when neutron's security_group ext is
# enabled, _cleanup_default_secgroup will not raise error. But # enabled, _cleanup_default_secgroup will not raise error. But
# here cannot use test.is_extension_enabled for it will cause # here cannot use test_utils.is_extension_enabled for it will cause
# "circular dependency". So here just use try...except to # "circular dependency". So here just use try...except to
# ensure tenant deletion without big changes. # ensure tenant deletion without big changes.
try: try:

View File

@ -14,10 +14,10 @@
# under the License. # under the License.
from tempest.common import tempest_fixtures as fixtures from tempest.common import tempest_fixtures as fixtures
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.scenario import manager from tempest.scenario import manager
from tempest import test
class TestAggregatesBasicOps(manager.ScenarioTest): class TestAggregatesBasicOps(manager.ScenarioTest):
@ -97,7 +97,7 @@ class TestAggregatesBasicOps(manager.ScenarioTest):
@decorators.idempotent_id('cb2b4c4f-0c7c-4164-bdde-6285b302a081') @decorators.idempotent_id('cb2b4c4f-0c7c-4164-bdde-6285b302a081')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute') @utils.services('compute')
def test_aggregate_basic_ops(self): def test_aggregate_basic_ops(self):
self.useFixture(fixtures.LockFixture('availability_zone')) self.useFixture(fixtures.LockFixture('availability_zone'))
az = 'foo_zone' az = 'foo_zone'

View File

@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib import decorators from tempest.lib import decorators
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -54,7 +54,7 @@ class TestEncryptedCinderVolumes(manager.EncryptionScenarioTest):
@decorators.idempotent_id('79165fb4-5534-4b9d-8429-97ccffb8f86e') @decorators.idempotent_id('79165fb4-5534-4b9d-8429-97ccffb8f86e')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'volume', 'image') @utils.services('compute', 'volume', 'image')
def test_encrypted_cinder_volumes_luks(self): def test_encrypted_cinder_volumes_luks(self):
server = self.launch_instance() server = self.launch_instance()
volume = self.create_encrypted_volume('nova.volume.encryptors.' volume = self.create_encrypted_volume('nova.volume.encryptors.'
@ -64,7 +64,7 @@ class TestEncryptedCinderVolumes(manager.EncryptionScenarioTest):
@decorators.idempotent_id('cbc752ed-b716-4717-910f-956cce965722') @decorators.idempotent_id('cbc752ed-b716-4717-910f-956cce965722')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'volume', 'image') @utils.services('compute', 'volume', 'image')
def test_encrypted_cinder_volumes_cryptsetup(self): def test_encrypted_cinder_volumes_cryptsetup(self):
server = self.launch_instance() server = self.launch_instance()
volume = self.create_encrypted_volume('nova.volume.encryptors.' volume = self.create_encrypted_volume('nova.volume.encryptors.'

View File

@ -16,13 +16,13 @@
import testtools import testtools
from tempest.common import custom_matchers from tempest.common import custom_matchers
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.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -105,7 +105,7 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
'The public_network_id option must be specified.') 'The public_network_id option must be specified.')
@testtools.skipUnless(CONF.network_feature_enabled.floating_ips, @testtools.skipUnless(CONF.network_feature_enabled.floating_ips,
'Floating ips are not available') 'Floating ips are not available')
@test.services('compute', 'volume', 'image', 'network') @utils.services('compute', 'volume', 'image', 'network')
def test_minimum_basic_scenario(self): def test_minimum_basic_scenario(self):
image = self.glance_image_create() image = self.glance_image_create()
keypair = self.create_keypair() keypair = self.create_keypair()

View File

@ -15,11 +15,11 @@
import testtools import testtools
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
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -59,7 +59,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
def _setup_server(self, keypair): def _setup_server(self, keypair):
security_groups = [] security_groups = []
if test.is_extension_enabled('security-group', 'network'): if utils.is_extension_enabled('security-group', 'network'):
security_group = self._create_security_group() security_group = self._create_security_group()
security_groups = [{'name': security_group['name']}] security_groups = [{'name': security_group['name']}]
network, _, _ = self.create_networks() network, _, _ = self.create_networks()
@ -107,7 +107,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@decorators.idempotent_id('61f1aa9a-1573-410e-9054-afa557cab021') @decorators.idempotent_id('61f1aa9a-1573-410e-9054-afa557cab021')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_stop_start(self): def test_server_connectivity_stop_start(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)
@ -122,7 +122,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
server, keypair, floating_ip) server, keypair, floating_ip)
@decorators.idempotent_id('7b6860c2-afa3-4846-9522-adeb38dfbe08') @decorators.idempotent_id('7b6860c2-afa3-4846-9522-adeb38dfbe08')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_reboot(self): def test_server_connectivity_reboot(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)
@ -133,7 +133,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@decorators.idempotent_id('88a529c2-1daa-4c85-9aec-d541ba3eb699') @decorators.idempotent_id('88a529c2-1daa-4c85-9aec-d541ba3eb699')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_rebuild(self): def test_server_connectivity_rebuild(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)
@ -148,7 +148,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.compute_feature_enabled.pause, @testtools.skipUnless(CONF.compute_feature_enabled.pause,
'Pause is not available.') 'Pause is not available.')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_pause_unpause(self): def test_server_connectivity_pause_unpause(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)
@ -166,7 +166,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.compute_feature_enabled.suspend, @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
'Suspend is not available.') 'Suspend is not available.')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_suspend_resume(self): def test_server_connectivity_suspend_resume(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)
@ -184,7 +184,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.compute_feature_enabled.resize, @testtools.skipUnless(CONF.compute_feature_enabled.resize,
'Resize is not available.') 'Resize is not available.')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_resize(self): def test_server_connectivity_resize(self):
resize_flavor = CONF.compute.flavor_ref_alt resize_flavor = CONF.compute.flavor_ref_alt
keypair = self.create_keypair() keypair = self.create_keypair()
@ -205,7 +205,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
'Less than 2 compute nodes, skipping multinode ' 'Less than 2 compute nodes, skipping multinode '
'tests.') 'tests.')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_cold_migration(self): def test_server_connectivity_cold_migration(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)
@ -231,7 +231,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
'Less than 2 compute nodes, skipping multinode ' 'Less than 2 compute nodes, skipping multinode '
'tests.') 'tests.')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_connectivity_cold_migration_revert(self): def test_server_connectivity_cold_migration_revert(self):
keypair = self.create_keypair() keypair = self.create_keypair()
server = self._setup_server(keypair) server = self._setup_server(keypair)

View File

@ -19,13 +19,13 @@ import re
from oslo_log import log as logging from oslo_log import log as logging
import testtools import testtools
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.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -87,7 +87,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
'public_network_id must be defined.') 'public_network_id must be defined.')
raise cls.skipException(msg) raise cls.skipException(msg)
for ext in ['router', 'security-group']: for ext in ['router', 'security-group']:
if not test.is_extension_enabled(ext, 'network'): if not utils.is_extension_enabled(ext, 'network'):
msg = "%s extension not enabled." % ext msg = "%s extension not enabled." % ext
raise cls.skipException(msg) raise cls.skipException(msg)
if not CONF.network_feature_enabled.floating_ips: if not CONF.network_feature_enabled.floating_ips:
@ -357,7 +357,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('f323b3ba-82f8-4db7-8ea6-6a895869ec49') @decorators.idempotent_id('f323b3ba-82f8-4db7-8ea6-6a895869ec49')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_network_basic_ops(self): def test_network_basic_ops(self):
"""Basic network operation test """Basic network operation test
@ -409,10 +409,10 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
"floating ip") "floating ip")
@decorators.idempotent_id('b158ea55-472e-4086-8fa9-c64ac0c6c1d0') @decorators.idempotent_id('b158ea55-472e-4086-8fa9-c64ac0c6c1d0')
@testtools.skipUnless(test.is_extension_enabled('net-mtu', 'network'), @testtools.skipUnless(utils.is_extension_enabled('net-mtu', 'network'),
'No way to calculate MTU for networks') 'No way to calculate MTU for networks')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_mtu_sized_frames(self): def test_mtu_sized_frames(self):
"""Validate that network MTU sized frames fit through.""" """Validate that network MTU sized frames fit through."""
self._setup_network_and_servers() self._setup_network_and_servers()
@ -425,7 +425,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
'multitenant network environment') 'multitenant network environment')
@decorators.skip_because(bug="1610994") @decorators.skip_because(bug="1610994")
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_connectivity_between_vms_on_different_networks(self): def test_connectivity_between_vms_on_different_networks(self):
"""Test connectivity between VMs on different networks """Test connectivity between VMs on different networks
@ -479,7 +479,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
@testtools.skipIf(CONF.network.port_vnic_type in ['direct', 'macvtap'], @testtools.skipIf(CONF.network.port_vnic_type in ['direct', 'macvtap'],
'NIC hotplug not supported for ' 'NIC hotplug not supported for '
'vnic_type direct or macvtap') 'vnic_type direct or macvtap')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_hotplug_nic(self): def test_hotplug_nic(self):
"""Test hotplug network interface """Test hotplug network interface
@ -501,7 +501,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
'Router state can be altered only with multitenant ' 'Router state can be altered only with multitenant '
'networks capabilities') 'networks capabilities')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_update_router_admin_state(self): def test_update_router_admin_state(self):
"""Test to update admin state up of router """Test to update admin state up of router
@ -535,7 +535,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
@testtools.skipUnless(CONF.scenario.dhcp_client, @testtools.skipUnless(CONF.scenario.dhcp_client,
"DHCP client is not available.") "DHCP client is not available.")
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_subnet_details(self): def test_subnet_details(self):
"""Tests that subnet's extra configuration details are affecting VMs. """Tests that subnet's extra configuration details are affecting VMs.
@ -619,7 +619,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
"Changing a port's admin state is not supported " "Changing a port's admin state is not supported "
"by the test environment") "by the test environment")
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_update_instance_port_admin_state(self): def test_update_instance_port_admin_state(self):
"""Test to update admin_state_up attribute of instance port """Test to update admin_state_up attribute of instance port
@ -666,7 +666,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
@decorators.idempotent_id('759462e1-8535-46b0-ab3a-33aa45c55aaa') @decorators.idempotent_id('759462e1-8535-46b0-ab3a-33aa45c55aaa')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_preserve_preexisting_port(self): def test_preserve_preexisting_port(self):
"""Test preserve pre-existing port """Test preserve pre-existing port
@ -715,10 +715,10 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
'server %s.' % server['id']) 'server %s.' % server['id'])
self.assertEqual(port['id'], port_list[0]['id']) self.assertEqual(port['id'], port_list[0]['id'])
@test.requires_ext(service='network', extension='l3_agent_scheduler') @utils.requires_ext(service='network', extension='l3_agent_scheduler')
@decorators.idempotent_id('2e788c46-fb3f-4ac9-8f82-0561555bea73') @decorators.idempotent_id('2e788c46-fb3f-4ac9-8f82-0561555bea73')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_router_rescheduling(self): def test_router_rescheduling(self):
"""Tests that router can be removed from agent and add to a new agent. """Tests that router can be removed from agent and add to a new agent.
@ -793,12 +793,12 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
should_connect=True, should_connect=True,
msg='After router rescheduling') msg='After router rescheduling')
@test.requires_ext(service='network', extension='port-security') @utils.requires_ext(service='network', extension='port-security')
@testtools.skipUnless(CONF.compute_feature_enabled.interface_attach, @testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
'NIC hotplug not available') 'NIC hotplug not available')
@decorators.idempotent_id('7c0bb1a2-d053-49a4-98f9-ca1a1d849f63') @decorators.idempotent_id('7c0bb1a2-d053-49a4-98f9-ca1a1d849f63')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_port_security_macspoofing_port(self): def test_port_security_macspoofing_port(self):
"""Tests port_security extension enforces mac spoofing """Tests port_security extension enforces mac spoofing

View File

@ -14,11 +14,11 @@
# under the License. # under the License.
import functools import functools
from tempest.common import utils
from tempest import config from tempest import config
from tempest.lib.common.utils import test_utils from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -210,49 +210,49 @@ class TestGettingAddress(manager.NetworkScenarioTest):
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('2c92df61-29f0-4eaa-bee3-7c65bef62a43') @decorators.idempotent_id('2c92df61-29f0-4eaa-bee3-7c65bef62a43')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_slaac_from_os(self): def test_slaac_from_os(self):
self._prepare_and_test(address6_mode='slaac') self._prepare_and_test(address6_mode='slaac')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('d7e1f858-187c-45a6-89c9-bdafde619a9f') @decorators.idempotent_id('d7e1f858-187c-45a6-89c9-bdafde619a9f')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_dhcp6_stateless_from_os(self): def test_dhcp6_stateless_from_os(self):
self._prepare_and_test(address6_mode='dhcpv6-stateless') self._prepare_and_test(address6_mode='dhcpv6-stateless')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('7ab23f41-833b-4a16-a7c9-5b42fe6d4123') @decorators.idempotent_id('7ab23f41-833b-4a16-a7c9-5b42fe6d4123')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_multi_prefix_dhcpv6_stateless(self): def test_multi_prefix_dhcpv6_stateless(self):
self._prepare_and_test(address6_mode='dhcpv6-stateless', n_subnets6=2) self._prepare_and_test(address6_mode='dhcpv6-stateless', n_subnets6=2)
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('dec222b1-180c-4098-b8c5-cc1b8342d611') @decorators.idempotent_id('dec222b1-180c-4098-b8c5-cc1b8342d611')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_multi_prefix_slaac(self): def test_multi_prefix_slaac(self):
self._prepare_and_test(address6_mode='slaac', n_subnets6=2) self._prepare_and_test(address6_mode='slaac', n_subnets6=2)
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('b6399d76-4438-4658-bcf5-0d6c8584fde2') @decorators.idempotent_id('b6399d76-4438-4658-bcf5-0d6c8584fde2')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_dualnet_slaac_from_os(self): def test_dualnet_slaac_from_os(self):
self._prepare_and_test(address6_mode='slaac', dualnet=True) self._prepare_and_test(address6_mode='slaac', dualnet=True)
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('76f26acd-9688-42b4-bc3e-cd134c4cb09e') @decorators.idempotent_id('76f26acd-9688-42b4-bc3e-cd134c4cb09e')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_dualnet_dhcp6_stateless_from_os(self): def test_dualnet_dhcp6_stateless_from_os(self):
self._prepare_and_test(address6_mode='dhcpv6-stateless', dualnet=True) self._prepare_and_test(address6_mode='dhcpv6-stateless', dualnet=True)
@decorators.attr(type='slow') @decorators.attr(type='slow')
@decorators.idempotent_id('cf1c4425-766b-45b8-be35-e2959728eb00') @decorators.idempotent_id('cf1c4425-766b-45b8-be35-e2959728eb00')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_dualnet_multi_prefix_dhcpv6_stateless(self): def test_dualnet_multi_prefix_dhcpv6_stateless(self):
self._prepare_and_test(address6_mode='dhcpv6-stateless', n_subnets6=2, self._prepare_and_test(address6_mode='dhcpv6-stateless', n_subnets6=2,
dualnet=True) dualnet=True)
@decorators.idempotent_id('9178ad42-10e4-47e9-8987-e02b170cc5cd') @decorators.idempotent_id('9178ad42-10e4-47e9-8987-e02b170cc5cd')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_dualnet_multi_prefix_slaac(self): def test_dualnet_multi_prefix_slaac(self):
self._prepare_and_test(address6_mode='slaac', n_subnets6=2, self._prepare_and_test(address6_mode='slaac', n_subnets6=2,
dualnet=True) dualnet=True)

View File

@ -13,14 +13,14 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from tempest.common import utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
class TestObjectStorageBasicOps(manager.ObjectStorageScenarioTest): class TestObjectStorageBasicOps(manager.ObjectStorageScenarioTest):
@decorators.idempotent_id('b920faf1-7b8a-4657-b9fe-9c4512bfb381') @decorators.idempotent_id('b920faf1-7b8a-4657-b9fe-9c4512bfb381')
@test.services('object_storage') @utils.services('object_storage')
def test_swift_basic_ops(self): def test_swift_basic_ops(self):
"""Test swift basic ops. """Test swift basic ops.
@ -47,7 +47,7 @@ class TestObjectStorageBasicOps(manager.ObjectStorageScenarioTest):
@decorators.idempotent_id('916c7111-cb1f-44b2-816d-8f760e4ea910') @decorators.idempotent_id('916c7111-cb1f-44b2-816d-8f760e4ea910')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('object_storage') @utils.services('object_storage')
def test_swift_acl_anonymous_download(self): def test_swift_acl_anonymous_download(self):
"""This test will cover below steps: """This test will cover below steps:

View File

@ -16,12 +16,12 @@ from oslo_log import log
import testtools import testtools
from tempest.common import compute from tempest.common import compute
from tempest.common import utils
from tempest.common.utils import net_info from tempest.common.utils import net_info
from tempest import config 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.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
LOG = log.getLogger(__name__) LOG = log.getLogger(__name__)
@ -142,7 +142,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
msg = ('Either project_networks_reachable must be "true", or ' msg = ('Either project_networks_reachable must be "true", or '
'public_network_id must be defined.') 'public_network_id must be defined.')
raise cls.skipException(msg) raise cls.skipException(msg)
if not test.is_extension_enabled('security-group', 'network'): if not utils.is_extension_enabled('security-group', 'network'):
msg = "security-group extension not enabled." msg = "security-group extension not enabled."
raise cls.skipException(msg) raise cls.skipException(msg)
if CONF.network.shared_physical_network: if CONF.network.shared_physical_network:
@ -471,7 +471,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
servers=[tenant.access_point], client=client) servers=[tenant.access_point], client=client)
@decorators.idempotent_id('e79f879e-debb-440c-a7e4-efeda05b6848') @decorators.idempotent_id('e79f879e-debb-440c-a7e4-efeda05b6848')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_cross_tenant_traffic(self): def test_cross_tenant_traffic(self):
if not self.credentials_provider.is_multi_tenant(): if not self.credentials_provider.is_multi_tenant():
raise self.skipException("No secondary tenant defined") raise self.skipException("No secondary tenant defined")
@ -491,7 +491,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
raise raise
@decorators.idempotent_id('63163892-bbf6-4249-aa12-d5ea1f8f421b') @decorators.idempotent_id('63163892-bbf6-4249-aa12-d5ea1f8f421b')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_in_tenant_traffic(self): def test_in_tenant_traffic(self):
try: try:
self._create_tenant_servers(self.primary_tenant, num=1) self._create_tenant_servers(self.primary_tenant, num=1)
@ -505,7 +505,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
@decorators.idempotent_id('f4d556d7-1526-42ad-bafb-6bebf48568f6') @decorators.idempotent_id('f4d556d7-1526-42ad-bafb-6bebf48568f6')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_port_update_new_security_group(self): def test_port_update_new_security_group(self):
"""Verifies the traffic after updating the vm port """Verifies the traffic after updating the vm port
@ -559,7 +559,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
@decorators.idempotent_id('d2f77418-fcc4-439d-b935-72eca704e293') @decorators.idempotent_id('d2f77418-fcc4-439d-b935-72eca704e293')
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_multiple_security_groups(self): def test_multiple_security_groups(self):
"""Verify multiple security groups and checks that rules """Verify multiple security groups and checks that rules
@ -591,9 +591,9 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
should_connect=True) should_connect=True)
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.requires_ext(service='network', extension='port-security') @utils.requires_ext(service='network', extension='port-security')
@decorators.idempotent_id('7c811dcc-263b-49a3-92d2-1b4d8405f50c') @decorators.idempotent_id('7c811dcc-263b-49a3-92d2-1b4d8405f50c')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_port_security_disable_security_group(self): def test_port_security_disable_security_group(self):
"""Verify the default security group rules is disabled.""" """Verify the default security group rules is disabled."""
new_tenant = self.primary_tenant new_tenant = self.primary_tenant
@ -631,7 +631,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
raise raise
@decorators.attr(type='slow') @decorators.attr(type='slow')
@test.requires_ext(service='network', extension='port-security') @utils.requires_ext(service='network', extension='port-security')
@decorators.idempotent_id('13ccf253-e5ad-424b-9c4a-97b88a026699') @decorators.idempotent_id('13ccf253-e5ad-424b-9c4a-97b88a026699')
# TODO(mriedem): We shouldn't actually need to check this since neutron # TODO(mriedem): We shouldn't actually need to check this since neutron
# disables the port_security extension by default, but the problem is nova # disables the port_security extension by default, but the problem is nova
@ -641,7 +641,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
@testtools.skipUnless( @testtools.skipUnless(
CONF.network_feature_enabled.port_security, CONF.network_feature_enabled.port_security,
'Port security must be enabled.') 'Port security must be enabled.')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_boot_into_disabled_port_security_network_without_secgroup(self): def test_boot_into_disabled_port_security_network_without_secgroup(self):
tenant = self.primary_tenant tenant = self.primary_tenant
self._create_tenant_network(tenant, port_security_enabled=False) self._create_tenant_network(tenant, port_security_enabled=False)

View File

@ -16,11 +16,11 @@
from oslo_log import log as logging from oslo_log import log as logging
import testtools import testtools
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
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -45,7 +45,7 @@ class TestServerAdvancedOps(manager.ScenarioTest):
@decorators.idempotent_id('e6c28180-7454-4b59-b188-0257af08a63b') @decorators.idempotent_id('e6c28180-7454-4b59-b188-0257af08a63b')
@testtools.skipUnless(CONF.compute_feature_enabled.resize, @testtools.skipUnless(CONF.compute_feature_enabled.resize,
'Resize is not available.') 'Resize is not available.')
@test.services('compute', 'volume') @utils.services('compute', 'volume')
def test_resize_volume_backed_server_confirm(self): def test_resize_volume_backed_server_confirm(self):
# We create an instance for use in this test # We create an instance for use in this test
instance = self.create_server(volume_backed=True) instance = self.create_server(volume_backed=True)
@ -67,7 +67,7 @@ class TestServerAdvancedOps(manager.ScenarioTest):
@decorators.idempotent_id('949da7d5-72c8-4808-8802-e3d70df98e2c') @decorators.idempotent_id('949da7d5-72c8-4808-8802-e3d70df98e2c')
@testtools.skipUnless(CONF.compute_feature_enabled.suspend, @testtools.skipUnless(CONF.compute_feature_enabled.suspend,
'Suspend is not available.') 'Suspend is not available.')
@test.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
instance_id = self.create_server()['id'] instance_id = self.create_server()['id']

View File

@ -16,6 +16,7 @@
import json import json
import re import re
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.common.utils import data_utils from tempest.lib.common.utils import data_utils
@ -23,7 +24,6 @@ from tempest.lib.common.utils import test_utils
from tempest.lib import decorators from tempest.lib import decorators
from tempest.lib import exceptions from tempest.lib import exceptions
from tempest.scenario import manager from tempest.scenario import manager
from tempest import test
CONF = config.CONF CONF = config.CONF
@ -132,7 +132,7 @@ class TestServerBasicOps(manager.ScenarioTest):
@decorators.idempotent_id('7fff3fb3-91d8-4fd0-bd7d-0204f1f180ba') @decorators.idempotent_id('7fff3fb3-91d8-4fd0-bd7d-0204f1f180ba')
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@test.services('compute', 'network') @utils.services('compute', 'network')
def test_server_basic_ops(self): def test_server_basic_ops(self):
keypair = self.create_keypair() keypair = self.create_keypair()
security_group = self._create_security_group() security_group = self._create_security_group()

Some files were not shown because too many files have changed in this diff Show More