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:
parent
ac9500a457
commit
cd36841ca2
@ -358,10 +358,10 @@ to Tempest.
|
||||
|
||||
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
|
||||
this is just as simple as using the @test.requires_ext() decorator to check
|
||||
if the required extension (or discoverable optional API) is enabled or adding
|
||||
a new config option to the appropriate section. If there isn't a method of
|
||||
selecting the new **feature** from the config file then there won't be a
|
||||
this is just as simple as using the @utils.requires_ext() decorator to
|
||||
check if the required extension (or discoverable optional API) is enabled or
|
||||
adding a new config option to the appropriate section. If there isn't a method
|
||||
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
|
||||
be able to merge.
|
||||
|
||||
|
@ -17,11 +17,11 @@ from oslo_log import log
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import credentials_factory as credentials
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_excs
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
@ -53,7 +53,8 @@ class AutoAllocateNetworkTest(base.BaseV2ComputeTest):
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.service_available.neutron:
|
||||
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(
|
||||
'auto-allocated-topology extension is not available')
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -49,17 +49,17 @@ class FixedIPsTestJson(base.BaseV2ComputeAdminTest):
|
||||
break
|
||||
|
||||
@decorators.idempotent_id('16b7d848-2f7c-4709-85a3-2dfb4576cc52')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_fixed_ip_details(self):
|
||||
fixed_ip = self.client.show_fixed_ip(self.ip)
|
||||
self.assertEqual(fixed_ip['fixed_ip']['address'], self.ip)
|
||||
|
||||
@decorators.idempotent_id('5485077b-7e46-4cec-b402-91dc3173433b')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_set_reserve(self):
|
||||
self.client.reserve_fixed_ip(self.ip, reserve="None")
|
||||
|
||||
@decorators.idempotent_id('7476e322-b9ff-4710-bf82-49d51bac6e2e')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_set_unreserve(self):
|
||||
self.client.reserve_fixed_ip(self.ip, unreserve="None")
|
||||
|
@ -13,10 +13,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -51,14 +51,14 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
self.assertRaises(lib_exc.Forbidden,
|
||||
self.non_admin_client.show_fixed_ip, self.ip)
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('ce60042c-fa60-4836-8d43-1c8e3359dc47')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_set_reserve_with_non_admin_user(self):
|
||||
self.assertRaises(lib_exc.Forbidden,
|
||||
self.non_admin_client.reserve_fixed_ip,
|
||||
@ -66,7 +66,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('f1f7a35b-0390-48c5-9803-5f27461439db')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_set_unreserve_with_non_admin_user(self):
|
||||
self.assertRaises(lib_exc.Forbidden,
|
||||
self.non_admin_client.reserve_fixed_ip,
|
||||
@ -74,7 +74,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('f51cf464-7fc5-4352-bc3e-e75cfa2cb717')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_set_reserve_with_invalid_ip(self):
|
||||
# NOTE(maurosr): since this exercises the same code snippet, we do it
|
||||
# only for reserve action
|
||||
@ -87,7 +87,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('fd26ef50-f135-4232-9d32-281aab3f9176')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_fixed_ip_with_invalid_action(self):
|
||||
self.assertRaises(lib_exc.BadRequest,
|
||||
self.client.reserve_fixed_ip,
|
||||
|
@ -16,10 +16,10 @@
|
||||
import uuid
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@ -28,7 +28,7 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,8 +14,8 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@ -27,7 +27,7 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@ -30,7 +30,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@ -29,7 +29,7 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -15,10 +15,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@ -30,7 +30,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -16,11 +16,11 @@
|
||||
import netaddr
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -57,7 +57,7 @@ class FloatingIPsBulkAdminTestJSON(base.BaseV2ComputeAdminTest):
|
||||
return
|
||||
|
||||
@decorators.idempotent_id('2c8f145f-8012-4cb8-ac7e-95a587f0e4ab')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_create_list_delete_floating_ips_bulk(self):
|
||||
# Create, List and delete the Floating IPs Bulk
|
||||
pool = 'test_pool'
|
||||
|
@ -20,10 +20,10 @@ import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
LOG = logging.getLogger(__name__)
|
||||
@ -122,7 +122,7 @@ class LiveMigrationTest(base.BaseV2ComputeAdminTest):
|
||||
|
||||
@decorators.skip_because(bug="1524898")
|
||||
@decorators.idempotent_id('5071cf17-3004-4257-ae61-73a84e28badd')
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
def test_volume_backed_live_migration(self):
|
||||
self._test_live_migration(volume_backed=True)
|
||||
|
||||
|
@ -13,11 +13,11 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -89,7 +89,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
||||
condition=CONF.service_available.neutron)
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('7c6c8f3b-2bf6-4918-b240-57b136a66aa0')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_groups_exceed_limit(self):
|
||||
# Negative test: Creation Security Groups over limit should FAIL
|
||||
# Set the quota to number of used security groups
|
||||
@ -108,7 +108,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
|
||||
condition=CONF.service_available.neutron)
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('6e9f436d-f1ed-4f8e-a493-7275dfaa4b4d')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_groups_rules_exceed_limit(self):
|
||||
# Negative test: Creation of Security Group Rules should FAIL
|
||||
# when we reach limit maxSecurityGroupRules
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest):
|
||||
@ -34,7 +34,7 @@ class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest):
|
||||
self.client.delete_security_group(securitygroup_id)
|
||||
|
||||
@decorators.idempotent_id('49667619-5af9-4c63-ab5d-2cfdd1c8f7f1')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_security_groups_list_all_tenants_filter(self):
|
||||
# Admin can list security groups of all tenants
|
||||
# List of all security groups created
|
||||
|
@ -13,11 +13,11 @@
|
||||
import time
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -80,7 +80,7 @@ class TestVolumeSwap(base.BaseV2ComputeAdminTest):
|
||||
raise lib_exc.TimeoutException(message)
|
||||
|
||||
@decorators.idempotent_id('1769f00d-a693-4d67-a631-6a3496773813')
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
def test_volume_swap(self):
|
||||
# Create two volumes.
|
||||
# NOTE(gmann): Volumes are created before server creation so that
|
||||
|
@ -19,11 +19,11 @@ import six
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import image as common_image
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -43,7 +43,7 @@ class FlavorsV2NegativeTest(base.BaseV2ComputeTest):
|
||||
'[image-feature-enabled].')
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
@decorators.idempotent_id('90f0d93a-91c1-450c-91e6-07d18172cefe')
|
||||
def test_boot_with_low_ram(self):
|
||||
"""Try boot a vm with lower than min ram
|
||||
|
@ -16,11 +16,11 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.compute.floating_ips import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -62,7 +62,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
|
||||
super(FloatingIPsTestJSON, cls).resource_cleanup()
|
||||
|
||||
@decorators.idempotent_id('f7bfb946-297e-41b8-9e8c-aba8e9bb5194')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_allocate_floating_ip(self):
|
||||
# Positive test:Allocation of a new floating IP to a project
|
||||
# should be successful
|
||||
@ -78,7 +78,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
|
||||
self.assertIn(floating_ip_details, body)
|
||||
|
||||
@decorators.idempotent_id('de45e989-b5ca-4a9b-916b-04a52e7bbb8b')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_delete_floating_ip(self):
|
||||
# Positive test:Deletion of valid floating IP from project
|
||||
# should be successful
|
||||
@ -93,7 +93,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
|
||||
self.client.wait_for_resource_deletion(floating_ip_body['id'])
|
||||
|
||||
@decorators.idempotent_id('307efa27-dc6f-48a0-8cd2-162ce3ef0b52')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
@testtools.skipUnless(CONF.network.public_network_id,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_associate_disassociate_floating_ip(self):
|
||||
@ -116,7 +116,7 @@ class FloatingIPsTestJSON(base.BaseFloatingIPsTest):
|
||||
self.server_id)
|
||||
|
||||
@decorators.idempotent_id('6edef4b2-aaf1-4abc-bbe3-993e2561e0fe')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
@testtools.skipUnless(CONF.network.public_network_id,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_associate_already_associated_floating_ip(self):
|
||||
|
@ -16,11 +16,11 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.compute.floating_ips import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -58,7 +58,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('6e0f059b-e4dd-48fb-8207-06e3bba5b074')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_allocate_floating_ip_from_nonexistent_pool(self):
|
||||
# Negative test:Allocation of a new floating IP from a nonexistent_pool
|
||||
# to a project should fail
|
||||
@ -68,7 +68,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('ae1c55a8-552b-44d4-bfb6-2a115a15d0ba')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_delete_nonexistent_floating_ip(self):
|
||||
# Negative test:Deletion of a nonexistent floating IP
|
||||
# from project should fail
|
||||
@ -79,7 +79,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('595fa616-1a71-4670-9614-46564ac49a4c')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_associate_nonexistent_floating_ip(self):
|
||||
# Negative test:Association of a non existent floating IP
|
||||
# to specific server should fail
|
||||
@ -90,7 +90,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('0a081a66-e568-4e6b-aa62-9587a876dca8')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_dissociate_nonexistent_floating_ip(self):
|
||||
# Negative test:Dissociation of a non existent floating IP should fail
|
||||
# Dissociating non existent floating IP
|
||||
@ -100,7 +100,7 @@ class FloatingIPsNegativeTestJSON(base.BaseFloatingIPsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test:Association of empty floating IP to specific server
|
||||
# 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.idempotent_id('58a80596-ffb2-11e6-9393-fa163e4fa634')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
@testtools.skipUnless(CONF.network.public_network_id,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_associate_ip_to_server_with_floating_ip(self):
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -53,7 +53,7 @@ class FloatingIPDetailsTestJSON(base.BaseV2ComputeTest):
|
||||
super(FloatingIPDetailsTestJSON, cls).resource_cleanup()
|
||||
|
||||
@decorators.idempotent_id('16db31c3-fb85-40c9-bbe2-8cf7b67ff99f')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_floating_ips(self):
|
||||
# Positive test:Should return the list of 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)
|
||||
|
||||
@decorators.idempotent_id('eef497e0-8ff7-43c8-85ef-558440574f84')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_get_floating_ip_details(self):
|
||||
# Positive test:Should be able to GET the details of floatingIP
|
||||
# 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'])
|
||||
|
||||
@decorators.idempotent_id('df389fc8-56f5-43cc-b290-20eda39854d3')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_floating_ip_pools(self):
|
||||
# Positive test:Should return the list of floating IP Pools
|
||||
floating_ip_pools = self.pools_client.list_floating_ip_pools()
|
||||
|
@ -14,11 +14,11 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -38,7 +38,7 @@ class FloatingIPDetailsNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('7ab18834-4a4b-4f28-a2c5-440579866695')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_get_nonexistent_floating_ip_details(self):
|
||||
# Negative test:Should not be able to GET the details
|
||||
# of non-existent floating IP
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -32,7 +32,7 @@ class BaseSecurityGroupsTest(base.BaseV2ComputeTest):
|
||||
@staticmethod
|
||||
def generate_random_security_group_id():
|
||||
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()
|
||||
else:
|
||||
return data_utils.rand_int_id(start=999)
|
||||
|
@ -14,8 +14,8 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute.security_groups import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
|
||||
@ -55,7 +55,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('850795d7-d4d3-4e55-b527-a774c0123d3a')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_rules_create(self):
|
||||
# Positive test: Creation of Security Group rule
|
||||
# should be successful
|
||||
@ -73,7 +73,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
|
||||
self._check_expected_response(rule)
|
||||
|
||||
@decorators.idempotent_id('7a01873e-3c38-4f30-80be-31a043cfe2fd')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_rules_create_with_optional_cidr(self):
|
||||
# Positive test: Creation of Security Group rule
|
||||
# with optional argument cidr
|
||||
@ -96,7 +96,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
|
||||
self._check_expected_response(rule)
|
||||
|
||||
@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):
|
||||
# Positive test: Creation of Security Group rule
|
||||
# with optional argument group_id
|
||||
@ -125,7 +125,7 @@ class SecurityGroupRulesTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('a6154130-5a55-4850-8be4-5e9e796dbf17')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_rules_list(self):
|
||||
# Positive test: Created Security Group rules should be
|
||||
# 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])
|
||||
|
||||
@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):
|
||||
# Positive test:rule will delete when peer group deleting
|
||||
# Creating a Security Group to add rules to it
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute.security_groups import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
@ -29,7 +29,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test: Creation of Security Group rule should FAIL
|
||||
# with non existent Parent group id
|
||||
@ -46,7 +46,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('2244d7e4-adb7-4ecb-9930-2d77e123ce4f')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_create_security_group_rule_with_invalid_id(self):
|
||||
# Negative test: Creation of Security Group rule should FAIL
|
||||
# with Parent group id which is not integer
|
||||
@ -63,7 +63,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('8bd56d02-3ffa-4d67-9933-b6b9a01d6089')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_create_security_group_rule_duplicate(self):
|
||||
# Negative test: Create Security Group rule duplicate should fail
|
||||
# Creating a Security Group to add rule to it
|
||||
@ -88,7 +88,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test: Creation of Security Group rule should FAIL
|
||||
# with invalid ip_protocol
|
||||
@ -108,7 +108,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test: Creation of Security Group rule should FAIL
|
||||
# with invalid from_port
|
||||
@ -127,7 +127,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test: Creation of Security Group rule should FAIL
|
||||
# with invalid to_port
|
||||
@ -146,7 +146,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test: Creation of Security Group rule should FAIL
|
||||
# with invalid port range.
|
||||
@ -165,7 +165,7 @@ class SecurityGroupRulesNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Negative test: Deletion of Security Group rule should be FAIL
|
||||
# with non existent id
|
||||
|
@ -14,11 +14,11 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute.security_groups import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
@ -30,7 +30,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('eb2b087d-633d-4d0d-a7bd-9e6ba35b32de')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_groups_create_list_delete(self):
|
||||
# Positive test:Should return the list of Security Groups
|
||||
# Create 3 Security Groups
|
||||
@ -62,7 +62,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
for m_group in deleted_sgs))
|
||||
|
||||
@decorators.idempotent_id('ecc0da4a-2117-48af-91af-993cca39a615')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_create_get_delete(self):
|
||||
# Security Group should be created, fetched and deleted
|
||||
# with char space between name along with
|
||||
@ -83,7 +83,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
self.client.wait_for_resource_deletion(securitygroup['id'])
|
||||
|
||||
@decorators.idempotent_id('fe4abc0d-83f5-4c50-ad11-57a1127297a2')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_server_security_groups(self):
|
||||
# Checks that security groups may be added and linked to a server
|
||||
# and not deleted if the server is active.
|
||||
@ -125,7 +125,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
self.client.delete_security_group(sg2['id'])
|
||||
|
||||
@decorators.idempotent_id('7d4e1d3c-3209-4d6d-b020-986304ebad1f')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_update_security_groups(self):
|
||||
# Update security group name and description
|
||||
# Create a security group
|
||||
@ -144,7 +144,7 @@ class SecurityGroupsTestJSON(base.BaseSecurityGroupsTest):
|
||||
self.assertEqual(s_new_des, fetched_group['description'])
|
||||
|
||||
@decorators.idempotent_id('79517d60-535a-438f-af3d-e6feab1cbea7')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_security_groups_by_server(self):
|
||||
# Create a couple security groups that we will use
|
||||
# for the server resource this test creates
|
||||
|
@ -16,11 +16,11 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.compute.security_groups import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -34,7 +34,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('673eaec1-9b3e-48ed-bdf1-2786c1b9661c')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_get_nonexistent_group(self):
|
||||
# Negative test:Should not be able to GET the details
|
||||
# of non-existent Security Group
|
||||
@ -46,7 +46,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
condition=CONF.service_available.neutron)
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('1759c3cb-b0fc-44b7-86ce-c99236be911d')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_create_with_invalid_group_name(self):
|
||||
# Negative test: Security Group should not be created with group name
|
||||
# as an empty string/with white spaces/chars more than 255
|
||||
@ -69,7 +69,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
condition=CONF.service_available.neutron)
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('777b6f14-aca9-4758-9e84-38783cfa58bc')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_create_with_invalid_group_description(self):
|
||||
# Negative test: Security Group should not be created with description
|
||||
# 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,
|
||||
"Neutron allows duplicate names for security groups")
|
||||
@decorators.attr(type=['negative'])
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_security_group_create_with_duplicate_name(self):
|
||||
# Negative test:Security Group with duplicate name should not
|
||||
# be created
|
||||
@ -99,7 +99,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('36a1629f-c6da-4a26-b8b8-55e7e5d5cd58')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_delete_the_default_security_group(self):
|
||||
# Negative test:Deletion of the "default" Security Group should Fail
|
||||
default_security_group_id = None
|
||||
@ -115,7 +115,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('6727c00b-214c-4f9e-9a52-017ac3e98411')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_delete_nonexistent_security_group(self):
|
||||
# Negative test:Deletion of a non-existent Security Group should fail
|
||||
non_exist_id = self.generate_random_security_group_id()
|
||||
@ -124,7 +124,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('1438f330-8fa4-4aeb-8a94-37c250106d7f')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_delete_security_group_without_passing_id(self):
|
||||
# Negative test:Deletion of a Security Group with out passing ID
|
||||
# should Fail
|
||||
@ -135,7 +135,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
@testtools.skipIf(CONF.service_available.neutron,
|
||||
"Neutron does not check the security group ID")
|
||||
@decorators.attr(type=['negative'])
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_update_security_group_with_invalid_sg_id(self):
|
||||
# Update security_group with invalid sg_id should fail
|
||||
s_name = data_utils.rand_name('sg')
|
||||
@ -150,7 +150,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
@testtools.skipIf(CONF.service_available.neutron,
|
||||
"Neutron does not check the security group name")
|
||||
@decorators.attr(type=['negative'])
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_update_security_group_with_invalid_sg_name(self):
|
||||
# Update security_group with invalid sg_name should fail
|
||||
securitygroup = self.create_security_group()
|
||||
@ -165,7 +165,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
@testtools.skipIf(CONF.service_available.neutron,
|
||||
"Neutron does not check the security group description")
|
||||
@decorators.attr(type=['negative'])
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_update_security_group_with_invalid_sg_des(self):
|
||||
# Update security_group with invalid sg_des should fail
|
||||
securitygroup = self.create_security_group()
|
||||
@ -178,7 +178,7 @@ class SecurityGroupsNegativeTestJSON(base.BaseSecurityGroupsTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('27edee9c-873d-4da6-a68a-3c256efebe8f')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_update_non_existent_security_group(self):
|
||||
# Update a non-existent Security Group should Fail
|
||||
non_exist_id = self.generate_random_security_group_id()
|
||||
|
@ -19,12 +19,12 @@ import six
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils import net_utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -185,7 +185,7 @@ class AttachInterfacesTestJSON(base.BaseV2ComputeTest):
|
||||
self.assertEqual(sorted(list1), sorted(list2))
|
||||
|
||||
@decorators.idempotent_id('73fe8f02-590d-4bf1-b184-e9ca81065051')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_create_list_show_delete_interfaces(self):
|
||||
server, ifs = self._create_server_get_interfaces()
|
||||
interface_count = len(ifs)
|
||||
@ -222,7 +222,7 @@ class AttachInterfacesTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('c7e0e60b-ee45-43d0-abeb-8596fd42a2f9')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_add_remove_fixed_ip(self):
|
||||
# Add and Remove the fixed IP to server.
|
||||
server, ifs = self._create_server_get_interfaces()
|
||||
|
@ -17,11 +17,11 @@ import netaddr
|
||||
import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils.linux import remote_client
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -151,6 +151,6 @@ class ServersTestBootFromVolume(ServersTestJSON):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
super(ServersTestBootFromVolume, cls).skip_checks()
|
||||
if not test.get_service_list()['volume']:
|
||||
if not utils.get_service_list()['volume']:
|
||||
msg = "Volume service not enabled."
|
||||
raise cls.skipException(msg)
|
||||
|
@ -17,10 +17,10 @@ import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -104,7 +104,7 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
|
||||
waiters.wait_for_server_termination(self.client, server['id'])
|
||||
|
||||
@decorators.idempotent_id('d0f3f0d6-d9b6-4a32-8da4-23015dcab23c')
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
def test_delete_server_while_in_attached_volume(self):
|
||||
# Delete a server while a volume is attached to it
|
||||
device = '/dev/%s' % CONF.compute.volume_device_name
|
||||
|
@ -17,13 +17,13 @@ import json
|
||||
from oslo_log import log as logging
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils.linux import remote_client
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
@ -94,7 +94,7 @@ class DeviceTaggingTest(base.BaseV2ComputeTest):
|
||||
'other']))
|
||||
|
||||
@decorators.idempotent_id('a2e65a6c-66f1-4442-aaa8-498c31778d96')
|
||||
@test.services('network', 'volume', 'image')
|
||||
@utils.services('network', 'volume', 'image')
|
||||
def test_device_tagging(self):
|
||||
# Create volumes
|
||||
# The create_volume methods waits for the volumes to be available and
|
||||
|
@ -19,13 +19,13 @@ import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils.linux import remote_client
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -252,7 +252,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
|
||||
self.client.start_server(self.server_id)
|
||||
|
||||
@decorators.idempotent_id('b68bd8d6-855d-4212-b59b-2e704044dace')
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
def test_rebuild_server_with_volume_attached(self):
|
||||
# create a new volume and attach it to the server
|
||||
volume = self.create_volume()
|
||||
@ -333,7 +333,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
|
||||
@decorators.idempotent_id('b963d4f1-94b3-4c40-9e97-7b583f46e470')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.snapshot,
|
||||
'Snapshotting not available, backup not possible.')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_create_backup(self):
|
||||
# Positive test:create backup successfully and rotate backups correctly
|
||||
# create the first and the second backup
|
||||
@ -518,7 +518,7 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
|
||||
@decorators.idempotent_id('77eba8e0-036e-4635-944b-f7a8f3b78dc9')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.shelve,
|
||||
'Shelve is not available.')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_shelve_unshelve_server(self):
|
||||
if CONF.image_feature_enabled.api_v2:
|
||||
glance_client = self.os_primary.image_client_v2
|
||||
|
@ -14,8 +14,8 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
||||
@ -39,7 +39,7 @@ class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('6eb718c0-02d9-4d5e-acd1-4e0c269cef39')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_server_addresses(self):
|
||||
# All public and private addresses for
|
||||
# a server should be returned
|
||||
@ -57,7 +57,7 @@ class ServerAddressesTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('87bbc374-5538-4f64-b673-2b0e4443cc30')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_server_addresses_by_network(self):
|
||||
# Providing a network type should filter
|
||||
# the addresses return by that type
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
@ -38,7 +38,7 @@ class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('02c3f645-2d2e-4417-8525-68c0407d001b')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_server_addresses_invalid_server_id(self):
|
||||
# List addresses request should fail if server id not in system
|
||||
self.assertRaises(lib_exc.NotFound, self.client.list_addresses,
|
||||
@ -46,7 +46,7 @@ class ServerAddressesNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('a2ab5144-78c0-4942-a0ed-cc8edccfd9ba')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_server_addresses_by_network_neg(self):
|
||||
# List addresses by network should fail if network name not valid
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
|
@ -17,9 +17,9 @@ import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||
@ -33,7 +33,7 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -16,12 +16,12 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -109,7 +109,7 @@ class ServerRescueNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
self.image_ref_alt)
|
||||
|
||||
@decorators.idempotent_id('d0ccac79-0091-4cf4-a1ce-26162d0cc55f')
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
@decorators.attr(type=['negative'])
|
||||
def test_rescued_vm_attach_volume(self):
|
||||
volume = self.create_volume()
|
||||
@ -129,7 +129,7 @@ class ServerRescueNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
device='/dev/%s' % self.device)
|
||||
|
||||
@decorators.idempotent_id('f56e465b-fe10-48bf-b75d-646cda3a8bc9')
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
@decorators.attr(type=['negative'])
|
||||
def test_rescued_vm_detach_volume(self):
|
||||
volume = self.create_volume()
|
||||
|
@ -16,9 +16,9 @@
|
||||
import six
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ServerTagsTestJSON(base.BaseV2ComputeTest):
|
||||
@ -29,7 +29,7 @@ class ServerTagsTestJSON(base.BaseV2ComputeTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -19,12 +19,12 @@ import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -217,7 +217,7 @@ class ServersNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.related_bug('1651064', status_code=500)
|
||||
@test.services('volume')
|
||||
@utils.services('volume')
|
||||
@decorators.idempotent_id('12146ac1-d7df-4928-ad25-b1f99e5286cd')
|
||||
def test_create_server_invalid_bdm_in_2nd_dict(self):
|
||||
volume = self.create_volume()
|
||||
@ -512,7 +512,7 @@ class ServersNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
# Create a volume
|
||||
volume = self.create_volume()
|
||||
|
@ -17,10 +17,10 @@ import netaddr
|
||||
import testtools
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -44,7 +44,7 @@ class VirtualInterfacesTestJSON(base.BaseV2ComputeTest):
|
||||
cls.server = cls.create_test_server(wait_until='ACTIVE')
|
||||
|
||||
@decorators.idempotent_id('96c4e2ef-5e4d-4d7f-87f5-fed6dca18016')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_virtual_interfaces(self):
|
||||
# Positive test:Should be able to GET the virtual interfaces list
|
||||
# for a given server_id
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
@ -35,7 +35,7 @@ class VirtualInterfacesNegativeTestJSON(base.BaseV2ComputeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('64ebd03c-1089-4306-93fa-60f5eb5c803c')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_virtual_interfaces_invalid_server_id(self):
|
||||
# Negative test: Should not be able to GET virtual interfaces
|
||||
# for an invalid server_id
|
||||
|
@ -16,9 +16,9 @@
|
||||
from oslo_log import log as logging
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -48,7 +48,7 @@ class ExtensionsTestJSON(base.BaseV2ComputeTest):
|
||||
raise self.skipException('There are not any extensions configured')
|
||||
|
||||
@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):
|
||||
# get the specified extensions
|
||||
extension = self.extensions_client.show_extension('os-consoles')
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import tempest_fixtures as fixtures
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class QuotasTestJSON(base.BaseV2ComputeTest):
|
||||
@ -24,7 +24,7 @@ class QuotasTestJSON(base.BaseV2ComputeTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.compute import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ComputeTenantNetworksTest(base.BaseV2ComputeTest):
|
||||
@ -31,7 +31,7 @@ class ComputeTenantNetworksTest(base.BaseV2ComputeTest):
|
||||
super(ComputeTenantNetworksTest, cls).setup_credentials()
|
||||
|
||||
@decorators.idempotent_id('edfea98e-bbe3-4c7a-9739-87b986baff26')
|
||||
@test.services('network')
|
||||
@utils.services('network')
|
||||
def test_list_show_tenant_networks(self):
|
||||
# Fetch all networks that are visible to the tenant: this may include
|
||||
# shared and external networks
|
||||
|
@ -11,9 +11,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.identity import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class InheritsV3TestJSON(base.BaseIdentityV3AdminTest):
|
||||
@ -21,7 +21,7 @@ class InheritsV3TestJSON(base.BaseIdentityV3AdminTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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")
|
||||
|
||||
@classmethod
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.identity import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class EC2CredentialsTest(base.BaseIdentityV2Test):
|
||||
@ -24,7 +24,7 @@ class EC2CredentialsTest(base.BaseIdentityV2Test):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,8 +14,8 @@
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import tempest_fixtures as fixtures
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class AgentManagementTestJSON(base.BaseAdminNetworkTest):
|
||||
@ -23,7 +23,7 @@ class AgentManagementTestJSON(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -13,8 +13,8 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class DHCPAgentSchedulersTestJSON(base.BaseAdminNetworkTest):
|
||||
@ -22,7 +22,7 @@ class DHCPAgentSchedulersTestJSON(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -28,7 +28,7 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.network.public_network_id:
|
||||
|
@ -13,10 +13,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
AGENT_TYPE = 'L3 agent'
|
||||
@ -41,7 +41,7 @@ class L3AgentSchedulerTestJSON(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -13,9 +13,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class MeteringTestJSON(base.BaseAdminNetworkTest):
|
||||
@ -28,7 +28,7 @@ class MeteringTestJSON(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class QuotasNegativeTest(base.BaseAdminNetworkTest):
|
||||
@ -35,7 +35,7 @@ class QuotasNegativeTest(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
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 test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class QuotasTest(base.BaseAdminNetworkTest):
|
||||
@ -38,7 +38,7 @@ class QuotasTest(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -16,10 +16,10 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -57,7 +57,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
@ -79,7 +79,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
|
||||
self.assertEqual(project_id, create_body['router']['tenant_id'])
|
||||
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_create_router_with_default_snat_value(self):
|
||||
@ -91,7 +91,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
|
||||
'enable_snat': True})
|
||||
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_create_router_with_snat_explicit(self):
|
||||
@ -153,7 +153,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
|
||||
self._verify_gateway_port(router['id'])
|
||||
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_update_router_set_gateway_with_snat_explicit(self):
|
||||
@ -170,7 +170,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
|
||||
self._verify_gateway_port(router['id'])
|
||||
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_update_router_set_gateway_without_snat(self):
|
||||
@ -202,7 +202,7 @@ class RoutersAdminTest(base.BaseAdminNetworkTest):
|
||||
self.assertFalse(list_body['ports'])
|
||||
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_update_router_reset_gateway_without_snat(self):
|
||||
|
@ -16,9 +16,9 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class RoutersTestDVR(base.BaseAdminNetworkTest):
|
||||
@ -27,7 +27,7 @@ class RoutersTestDVR(base.BaseAdminNetworkTest):
|
||||
def skip_checks(cls):
|
||||
super(RoutersTestDVR, cls).skip_checks()
|
||||
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
|
||||
raise cls.skipException(msg)
|
||||
# The check above will pass if api_extensions=all, which does
|
||||
@ -87,7 +87,7 @@ class RoutersTestDVR(base.BaseAdminNetworkTest):
|
||||
self.assertFalse(router['router']['distributed'])
|
||||
|
||||
@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.')
|
||||
def test_centralized_router_update_to_dvr(self):
|
||||
"""Test centralized router update
|
||||
|
@ -16,10 +16,10 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -29,13 +29,13 @@ class RoutersAdminNegativeTest(base.BaseAdminNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_router_set_gateway_used_ip_returns_409(self):
|
||||
|
@ -17,9 +17,9 @@ import netaddr
|
||||
import six
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -44,7 +44,7 @@ class AllowedAddressPairTestJSON(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ExtensionsTestJSON(base.BaseNetworkTest):
|
||||
@ -40,7 +40,7 @@ class ExtensionsTestJSON(base.BaseNetworkTest):
|
||||
'allowed-address-pairs', 'extra_dhcp_opt',
|
||||
'metering', 'dvr']
|
||||
expected_alias = [ext for ext in expected_alias if
|
||||
test.is_extension_enabled(ext, 'network')]
|
||||
utils.is_extension_enabled(ext, 'network')]
|
||||
actual_alias = list()
|
||||
extensions = self.network_extensions_client.list_extensions()
|
||||
list_extensions = extensions['extensions']
|
||||
@ -66,5 +66,5 @@ class ExtensionsTestJSON(base.BaseNetworkTest):
|
||||
# of extensions returned, but only for those that have been
|
||||
# enabled via configuration
|
||||
for e in expected_alias:
|
||||
if test.is_extension_enabled(e, 'network'):
|
||||
if utils.is_extension_enabled(e, 'network'):
|
||||
self.assertIn(e, actual_alias)
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ExtraDHCPOptionsTestJSON(base.BaseNetworkTest):
|
||||
@ -35,7 +35,7 @@ class ExtraDHCPOptionsTestJSON(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils import net_utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -43,7 +43,7 @@ class FloatingIPTestJSON(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.network.public_network_id:
|
||||
|
@ -15,10 +15,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -34,7 +34,7 @@ class FloatingIPNegativeTestJSON(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.network.public_network_id:
|
||||
|
@ -18,12 +18,12 @@ import testtools
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -209,7 +209,7 @@ class NetworksTest(BaseNetworkTestResources):
|
||||
def test_show_network_fields(self):
|
||||
# Verify specific fields of a network
|
||||
fields = ['id', 'name']
|
||||
if test.is_extension_enabled('net-mtu', 'network'):
|
||||
if utils.is_extension_enabled('net-mtu', 'network'):
|
||||
fields.append('mtu')
|
||||
body = self.networks_client.show_network(self.network['id'],
|
||||
fields=fields)
|
||||
@ -233,7 +233,7 @@ class NetworksTest(BaseNetworkTestResources):
|
||||
def test_list_networks_fields(self):
|
||||
# Verify specific fields of the networks
|
||||
fields = ['id', 'name']
|
||||
if test.is_extension_enabled('net-mtu', 'network'):
|
||||
if utils.is_extension_enabled('net-mtu', 'network'):
|
||||
fields.append('mtu')
|
||||
body = self.networks_client.list_networks(fields=fields)
|
||||
networks = body['networks']
|
||||
@ -370,7 +370,7 @@ class NetworksTest(BaseNetworkTestResources):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
def test_external_network_visibility(self):
|
||||
@ -392,8 +392,8 @@ class NetworksTest(BaseNetworkTestResources):
|
||||
self.assertEmpty(body['subnets'], "Public subnets visible")
|
||||
|
||||
@decorators.idempotent_id('c72c1c0c-2193-4aca-ccc4-b1442640bbbb')
|
||||
@test.requires_ext(extension="standard-attr-description",
|
||||
service="network")
|
||||
@utils.requires_ext(extension="standard-attr-description",
|
||||
service="network")
|
||||
def test_create_update_network_description(self):
|
||||
body = self.create_network(description='d1')
|
||||
self.assertEqual('d1', body['description'])
|
||||
|
@ -18,11 +18,11 @@ import testtools
|
||||
|
||||
from tempest.api.network import base_security_groups as sec_base
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -307,7 +307,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
|
||||
@decorators.idempotent_id('58091b66-4ff4-4cc1-a549-05d60c7acd1a')
|
||||
@testtools.skipUnless(
|
||||
test.is_extension_enabled('security-group', 'network'),
|
||||
utils.is_extension_enabled('security-group', 'network'),
|
||||
'security-group extension not enabled.')
|
||||
def test_update_port_with_security_group_and_extra_attributes(self):
|
||||
self._update_port_with_security_groups(
|
||||
@ -315,7 +315,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
|
||||
@decorators.idempotent_id('edf6766d-3d40-4621-bc6e-2521a44c257d')
|
||||
@testtools.skipUnless(
|
||||
test.is_extension_enabled('security-group', 'network'),
|
||||
utils.is_extension_enabled('security-group', 'network'),
|
||||
'security-group extension not enabled.')
|
||||
def test_update_port_with_two_security_groups_and_extra_attributes(self):
|
||||
self._update_port_with_security_groups(
|
||||
@ -342,7 +342,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('4179dcb9-1382-4ced-84fe-1b91c54f5735')
|
||||
@testtools.skipUnless(
|
||||
test.is_extension_enabled('security-group', 'network'),
|
||||
utils.is_extension_enabled('security-group', 'network'),
|
||||
'security-group extension not enabled.')
|
||||
def test_create_port_with_no_securitygroups(self):
|
||||
network = self.create_network()
|
||||
|
@ -17,10 +17,10 @@ import netaddr
|
||||
import testtools
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -55,7 +55,7 @@ class RoutersTest(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
@ -167,7 +167,7 @@ class RoutersTest(base.BaseNetworkTest):
|
||||
self.assertIn(subnet_id, public_subnet_ids)
|
||||
|
||||
@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,
|
||||
'The public_network_id option must be specified.')
|
||||
@decorators.skip_because(bug='1676207')
|
||||
@ -198,7 +198,7 @@ class RoutersTest(base.BaseNetworkTest):
|
||||
fixed_ip['ip_address'])
|
||||
|
||||
@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):
|
||||
# Create different cidr for each subnet to avoid cidr duplicate
|
||||
# The cidr starts from project_cidr
|
||||
|
@ -16,11 +16,11 @@
|
||||
import netaddr
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -30,7 +30,7 @@ class RoutersNegativeTest(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
@ -124,7 +124,7 @@ class DvrRoutersNegativeTest(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base_security_groups as base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -28,7 +28,7 @@ class SecGroupTest(base.BaseSecGroupTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,11 +14,11 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base_security_groups as base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -29,7 +29,7 @@ class NegativeSecGroupTest(base.BaseSecGroupTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -13,15 +13,15 @@
|
||||
import testtools
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ServiceProvidersTest(base.BaseNetworkTest):
|
||||
|
||||
@decorators.idempotent_id('2cbbeea9-f010-40f6-8df5-4eaa0c918ea6')
|
||||
@testtools.skipUnless(
|
||||
test.is_extension_enabled('service-type', 'network'),
|
||||
utils.is_extension_enabled('service-type', 'network'),
|
||||
'service-type extension not enabled.')
|
||||
def test_service_providers_list(self):
|
||||
body = self.service_providers_client.list_service_providers()
|
||||
|
@ -13,12 +13,12 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -42,7 +42,7 @@ class SubnetPoolsTestJSON(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -14,11 +14,11 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.network import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -40,7 +40,7 @@ class TagsTest(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
@ -115,7 +115,7 @@ class TagsExtTest(base.BaseNetworkTest):
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
|
||||
|
@ -17,8 +17,8 @@ import tempfile
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class BulkTest(base.BaseObjectTest):
|
||||
@ -69,7 +69,7 @@ class BulkTest(base.BaseObjectTest):
|
||||
self.assertNotIn(container_name, body)
|
||||
|
||||
@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):
|
||||
# Test bulk operation of file upload with an archived file
|
||||
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])
|
||||
|
||||
@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):
|
||||
# Test bulk operation of deleting multiple files
|
||||
filepath, container_name, object_name = self._create_archive()
|
||||
@ -129,7 +129,7 @@ class BulkTest(base.BaseObjectTest):
|
||||
self._check_contents_deleted(container_name)
|
||||
|
||||
@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):
|
||||
# Test bulk operation of deleting multiple files
|
||||
filepath, container_name, object_name = self._create_archive()
|
||||
|
@ -13,10 +13,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -77,7 +77,7 @@ class AccountQuotasTest(base.BaseObjectTest):
|
||||
|
||||
@decorators.attr(type="smoke")
|
||||
@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):
|
||||
object_name = data_utils.rand_name(name="TestObject")
|
||||
data = data_utils.arbitrary_string()
|
||||
@ -88,7 +88,7 @@ class AccountQuotasTest(base.BaseObjectTest):
|
||||
|
||||
@decorators.attr(type=["smoke"])
|
||||
@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):
|
||||
"""Test ResellerAdmin can modify/remove the quota on a user's account
|
||||
|
||||
|
@ -13,10 +13,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -76,7 +76,7 @@ class AccountQuotasNegativeTest(base.BaseObjectTest):
|
||||
|
||||
@decorators.attr(type=["negative"])
|
||||
@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):
|
||||
"""Test that a user cannot modify or remove a quota on its account."""
|
||||
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
QUOTA_BYTES = 10
|
||||
QUOTA_COUNT = 3
|
||||
@ -49,7 +49,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
|
||||
super(ContainerQuotasTest, self).tearDown()
|
||||
|
||||
@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")
|
||||
def test_upload_valid_object(self):
|
||||
"""Attempts to uploads an object smaller than the bytes quota."""
|
||||
@ -66,7 +66,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
|
||||
self.assertEqual(nbefore + len(data), nafter)
|
||||
|
||||
@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")
|
||||
def test_upload_large_object(self):
|
||||
"""Attempts to upload an object larger than the bytes quota."""
|
||||
@ -83,7 +83,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
|
||||
self.assertEqual(nbefore, nafter)
|
||||
|
||||
@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")
|
||||
def test_upload_too_many_objects(self):
|
||||
"""Attempts to upload many objects that exceeds the count limit."""
|
||||
|
@ -14,10 +14,10 @@
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class StaticWebTest(base.BaseObjectTest):
|
||||
@ -45,7 +45,7 @@ class StaticWebTest(base.BaseObjectTest):
|
||||
super(StaticWebTest, cls).resource_cleanup()
|
||||
|
||||
@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):
|
||||
headers = {'web-index': self.object_name}
|
||||
|
||||
@ -76,7 +76,7 @@ class StaticWebTest(base.BaseObjectTest):
|
||||
self.assertNotIn('x-container-meta-web-index', body)
|
||||
|
||||
@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):
|
||||
headers = {'web-listings': 'true'}
|
||||
|
||||
@ -108,7 +108,7 @@ class StaticWebTest(base.BaseObjectTest):
|
||||
self.assertNotIn('x-container-meta-web-listings', body)
|
||||
|
||||
@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):
|
||||
headers = {'web-listings': 'true',
|
||||
'web-listings-css': 'listings.css'}
|
||||
@ -131,7 +131,7 @@ class StaticWebTest(base.BaseObjectTest):
|
||||
self.assertIn(css, body.decode())
|
||||
|
||||
@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):
|
||||
headers = {'web-listings': 'true',
|
||||
'web-error': self.object_name}
|
||||
|
@ -13,9 +13,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.object_storage import test_container_sync
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -39,7 +39,7 @@ class ContainerSyncMiddlewareTest(test_container_sync.ContainerSyncTest):
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@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 make_headers(cont, cont_client):
|
||||
# tell first container to synchronize to a second
|
||||
|
@ -14,8 +14,8 @@
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class CrossdomainTest(base.BaseObjectTest):
|
||||
@ -38,7 +38,7 @@ class CrossdomainTest(base.BaseObjectTest):
|
||||
self.account_client.skip_path()
|
||||
|
||||
@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):
|
||||
resp, body = self.account_client.get("crossdomain.xml", {})
|
||||
body = body.decode()
|
||||
|
@ -19,9 +19,9 @@ import time
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ObjectFormPostTest(base.BaseObjectTest):
|
||||
@ -108,7 +108,7 @@ class ObjectFormPostTest(base.BaseObjectTest):
|
||||
return body, content_type
|
||||
|
||||
@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):
|
||||
body, content_type = self.get_multipart_form()
|
||||
|
||||
|
@ -19,10 +19,10 @@ import time
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ObjectFormPostNegativeTest(base.BaseObjectTest):
|
||||
@ -109,7 +109,7 @@ class ObjectFormPostNegativeTest(base.BaseObjectTest):
|
||||
return body, content_type
|
||||
|
||||
@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'])
|
||||
def test_post_object_using_form_expired(self):
|
||||
body, content_type = self.get_multipart_form(expires=1)
|
||||
@ -126,7 +126,7 @@ class ObjectFormPostNegativeTest(base.BaseObjectTest):
|
||||
self.assertIn('FormPost: Form Expired', str(exc))
|
||||
|
||||
@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'])
|
||||
def test_post_object_using_form_invalid_signature(self):
|
||||
self.key = "Wrong"
|
||||
|
@ -18,10 +18,10 @@ from oslo_serialization import jsonutils as json
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
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 test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
# Each segment, except for the final one, must be at least 1 megabyte
|
||||
MIN_SEGMENT_SIZE = 1024 * 1024
|
||||
@ -107,7 +107,7 @@ class ObjectSloTest(base.BaseObjectTest):
|
||||
self.assertHeaders(resp, 'Object', method)
|
||||
|
||||
@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):
|
||||
# create static large object from multipart manifest
|
||||
manifest = self._create_manifest()
|
||||
@ -122,7 +122,7 @@ class ObjectSloTest(base.BaseObjectTest):
|
||||
self._assertHeadersSLO(resp, 'PUT')
|
||||
|
||||
@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):
|
||||
# list static large object metadata using multipart manifest
|
||||
object_name = self._create_large_object()
|
||||
@ -134,7 +134,7 @@ class ObjectSloTest(base.BaseObjectTest):
|
||||
self._assertHeadersSLO(resp, 'HEAD')
|
||||
|
||||
@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):
|
||||
# list static large object using multipart manifest
|
||||
object_name = self._create_large_object()
|
||||
@ -149,7 +149,7 @@ class ObjectSloTest(base.BaseObjectTest):
|
||||
self.assertEqual(body, sum_data)
|
||||
|
||||
@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):
|
||||
# delete static large object using multipart manifest
|
||||
object_name = self._create_large_object()
|
||||
|
@ -19,9 +19,9 @@ import time
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ObjectTempUrlTest(base.BaseObjectTest):
|
||||
@ -88,7 +88,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
|
||||
return url
|
||||
|
||||
@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):
|
||||
expires = self._get_expiry_date()
|
||||
|
||||
@ -107,7 +107,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
|
||||
self.assertHeaders(resp, 'Object', 'HEAD')
|
||||
|
||||
@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):
|
||||
key2 = 'Meta2-'
|
||||
metadata = {'Temp-URL-Key-2': key2}
|
||||
@ -132,7 +132,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
|
||||
self.assertEqual(body, self.content)
|
||||
|
||||
@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):
|
||||
new_data = data_utils.random_bytes(size=len(self.object_name))
|
||||
|
||||
@ -158,7 +158,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
|
||||
self.assertEqual(body, new_data)
|
||||
|
||||
@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):
|
||||
expires = self._get_expiry_date()
|
||||
|
||||
@ -172,7 +172,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
|
||||
self.assertHeaders(resp, 'Object', 'HEAD')
|
||||
|
||||
@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):
|
||||
expires = self._get_expiry_date()
|
||||
|
||||
|
@ -19,10 +19,10 @@ import time
|
||||
from six.moves.urllib import parse as urlparse
|
||||
|
||||
from tempest.api.object_storage import base
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
|
||||
class ObjectTempUrlNegativeTest(base.BaseObjectTest):
|
||||
@ -94,7 +94,7 @@ class ObjectTempUrlNegativeTest(base.BaseObjectTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@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):
|
||||
|
||||
expires = self._get_expiry_date(1)
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -67,7 +67,7 @@ class VolumesActionsTest(base.BaseVolumeAdminTest):
|
||||
self._create_reset_and_force_delete_temp_volume('maintenance')
|
||||
|
||||
@decorators.idempotent_id('d38285d9-929d-478f-96a5-00e66a115b81')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_force_detach_volume(self):
|
||||
# Create a server and a volume
|
||||
server_id = self.create_server()['id']
|
||||
|
@ -16,9 +16,9 @@
|
||||
from testtools import matchers
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -39,7 +39,7 @@ class VolumesImageMetadata(base.BaseVolumeTest):
|
||||
cls.volume = cls.create_volume(imageRef=CONF.compute.image_ref)
|
||||
|
||||
@decorators.idempotent_id('03efff0b-5c75-4822-8f10-8789ac15b13e')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_update_show_delete_image_metadata(self):
|
||||
# Update image metadata
|
||||
image_metadata = {'image_id': '5137a025-3c5f-43c1-bc64-5f41270040a5',
|
||||
|
@ -14,12 +14,12 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -35,7 +35,7 @@ class VolumesActionsTest(base.BaseVolumeTest):
|
||||
|
||||
@decorators.idempotent_id('fff42874-7db5-4487-a8e1-ddda5fb5288d')
|
||||
@decorators.attr(type='smoke')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_attach_detach_volume_to_instance(self):
|
||||
# Create a server
|
||||
server = self.create_server()
|
||||
@ -66,7 +66,7 @@ class VolumesActionsTest(base.BaseVolumeTest):
|
||||
fetched_volume['bootable'])
|
||||
|
||||
@decorators.idempotent_id('9516a2c8-9135-488c-8dd6-5677a7e5f371')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_get_volume_attachment(self):
|
||||
# Create a server
|
||||
server = self.create_server()
|
||||
@ -94,7 +94,7 @@ class VolumesActionsTest(base.BaseVolumeTest):
|
||||
self.assertEqual(self.volume['id'], attachment['volume_id'])
|
||||
|
||||
@decorators.idempotent_id('d8f1ca95-3d5b-44a3-b8ca-909691c9532d')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_volume_upload(self):
|
||||
# NOTE(gfidente): the volume uploaded in Glance comes from setUpClass,
|
||||
# it is shared with the other tests. After it is uploaded in Glance,
|
||||
|
@ -17,11 +17,11 @@ import testtools
|
||||
from testtools import matchers
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -97,7 +97,7 @@ class VolumesBackupsTest(base.BaseVolumeTest):
|
||||
matchers.ContainsAll(metadata.items()))
|
||||
|
||||
@decorators.idempotent_id('07af8f6d-80af-44c9-a5dc-c8427b1b62e6')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_backup_create_attached_volume(self):
|
||||
"""Test backup create using force flag.
|
||||
|
||||
@ -119,7 +119,7 @@ class VolumesBackupsTest(base.BaseVolumeTest):
|
||||
self.assertEqual(backup_name, backup['name'])
|
||||
|
||||
@decorators.idempotent_id('2a8ba340-dff2-4511-9db7-646f07156b15')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_bootable_volume_backup_and_restore(self):
|
||||
# Create volume from image
|
||||
img_uuid = CONF.compute.image_ref
|
||||
|
@ -14,9 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
@ -56,7 +56,7 @@ class VolumesCloneTest(base.BaseVolumeTest):
|
||||
self._verify_volume_clone(src_vol, dst_vol, extra_size=1)
|
||||
|
||||
@decorators.idempotent_id('cbbcd7c6-5a6c-481a-97ac-ca55ab715d16')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_create_from_bootable_volume(self):
|
||||
# Create volume from image
|
||||
img_uuid = CONF.compute.image_ref
|
||||
|
@ -17,11 +17,11 @@ import testtools
|
||||
from testtools import matchers
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -122,7 +122,7 @@ class VolumesGetTest(base.BaseVolumeTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('54a01030-c7fc-447c-86ee-c1182beae638')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_volume_create_get_update_delete_from_image(self):
|
||||
image = self.images_client.show_image(CONF.compute.image_ref)
|
||||
min_disk = image['min_disk']
|
||||
|
@ -16,13 +16,13 @@
|
||||
import six
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -168,7 +168,7 @@ class VolumesNegativeTest(base.BaseVolumeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('f5e56b0a-5d02-43c1-a2a7-c9b792c2e3f6')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_attach_volumes_with_nonexistent_volume_id(self):
|
||||
server = self.create_server()
|
||||
|
||||
@ -292,7 +292,7 @@ class VolumesNegativeTest(base.BaseVolumeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('5b810c91-0ad1-47ce-aee8-615f789be78f')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_create_volume_from_image_with_decreasing_size(self):
|
||||
# Create image
|
||||
image = self.create_image()
|
||||
@ -307,7 +307,7 @@ class VolumesNegativeTest(base.BaseVolumeTest):
|
||||
|
||||
@decorators.attr(type=['negative'])
|
||||
@decorators.idempotent_id('d15e7f35-2cfc-48c8-9418-c8223a89bcbb')
|
||||
@test.services('image')
|
||||
@utils.services('image')
|
||||
def test_create_volume_from_deactivated_image(self):
|
||||
# Create image
|
||||
image = self.create_image()
|
||||
|
@ -14,11 +14,11 @@ import testtools
|
||||
from testtools import matchers
|
||||
|
||||
from tempest.api.volume import base
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -37,7 +37,7 @@ class VolumesSnapshotTestJSON(base.BaseVolumeTest):
|
||||
cls.volume_origin = cls.create_volume()
|
||||
|
||||
@decorators.idempotent_id('8567b54c-4455-446d-a1cf-651ddeaa3ff2')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_snapshot_create_delete_with_volume_in_use(self):
|
||||
# Create a test instance
|
||||
server = self.create_server()
|
||||
@ -59,7 +59,7 @@ class VolumesSnapshotTestJSON(base.BaseVolumeTest):
|
||||
self.delete_snapshot(snapshot2['id'])
|
||||
|
||||
@decorators.idempotent_id('5210a1de-85a0-11e6-bb21-641c676a5d61')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_snapshot_create_offline_delete_online(self):
|
||||
|
||||
# Create a snapshot while it is not attached
|
||||
|
@ -19,9 +19,9 @@ from oslo_log import log as logging
|
||||
from tempest import clients
|
||||
from tempest.common import credentials_factory as credentials
|
||||
from tempest.common import identity
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils import net_info
|
||||
from tempest import config
|
||||
from tempest import test
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
CONF = config.CONF
|
||||
@ -964,7 +964,7 @@ def get_tenant_cleanup_services():
|
||||
tenant_services.append(StackService)
|
||||
if IS_NEUTRON:
|
||||
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(NetworkMeteringLabelService)
|
||||
tenant_services.append(NetworkRouterService)
|
||||
|
@ -12,10 +12,16 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import functools
|
||||
from functools import partial
|
||||
|
||||
import testtools
|
||||
|
||||
from tempest import config
|
||||
from tempest.exceptions import InvalidServiceTag
|
||||
from tempest.lib.common.utils import data_utils as lib_data_utils
|
||||
from tempest.lib import decorators
|
||||
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -36,3 +42,89 @@ class DataUtils(object):
|
||||
return attr_obj
|
||||
|
||||
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
|
||||
|
@ -54,3 +54,7 @@ class ServerUnreachable(exceptions.TempestException):
|
||||
|
||||
class RFCViolation(exceptions.RestClientException):
|
||||
message = "RFC Violation"
|
||||
|
||||
|
||||
class InvalidServiceTag(exceptions.TempestException):
|
||||
message = "Invalid service tag"
|
||||
|
@ -451,7 +451,7 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||
creds.username)
|
||||
# NOTE(zhufl): Only when neutron's security_group ext is
|
||||
# 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
|
||||
# ensure tenant deletion without big changes.
|
||||
try:
|
||||
|
@ -14,10 +14,10 @@
|
||||
# under the License.
|
||||
|
||||
from tempest.common import tempest_fixtures as fixtures
|
||||
from tempest.common import utils
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
|
||||
class TestAggregatesBasicOps(manager.ScenarioTest):
|
||||
@ -97,7 +97,7 @@ class TestAggregatesBasicOps(manager.ScenarioTest):
|
||||
|
||||
@decorators.idempotent_id('cb2b4c4f-0c7c-4164-bdde-6285b302a081')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_aggregate_basic_ops(self):
|
||||
self.useFixture(fixtures.LockFixture('availability_zone'))
|
||||
az = 'foo_zone'
|
||||
|
@ -13,10 +13,10 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -54,7 +54,7 @@ class TestEncryptedCinderVolumes(manager.EncryptionScenarioTest):
|
||||
|
||||
@decorators.idempotent_id('79165fb4-5534-4b9d-8429-97ccffb8f86e')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'volume', 'image')
|
||||
@utils.services('compute', 'volume', 'image')
|
||||
def test_encrypted_cinder_volumes_luks(self):
|
||||
server = self.launch_instance()
|
||||
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.attr(type='slow')
|
||||
@test.services('compute', 'volume', 'image')
|
||||
@utils.services('compute', 'volume', 'image')
|
||||
def test_encrypted_cinder_volumes_cryptsetup(self):
|
||||
server = self.launch_instance()
|
||||
volume = self.create_encrypted_volume('nova.volume.encryptors.'
|
||||
|
@ -16,13 +16,13 @@
|
||||
import testtools
|
||||
|
||||
from tempest.common import custom_matchers
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -105,7 +105,7 @@ class TestMinimumBasicScenario(manager.ScenarioTest):
|
||||
'The public_network_id option must be specified.')
|
||||
@testtools.skipUnless(CONF.network_feature_enabled.floating_ips,
|
||||
'Floating ips are not available')
|
||||
@test.services('compute', 'volume', 'image', 'network')
|
||||
@utils.services('compute', 'volume', 'image', 'network')
|
||||
def test_minimum_basic_scenario(self):
|
||||
image = self.glance_image_create()
|
||||
keypair = self.create_keypair()
|
||||
|
@ -15,11 +15,11 @@
|
||||
|
||||
import testtools
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -59,7 +59,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
|
||||
def _setup_server(self, keypair):
|
||||
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_groups = [{'name': security_group['name']}]
|
||||
network, _, _ = self.create_networks()
|
||||
@ -107,7 +107,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
|
||||
@decorators.idempotent_id('61f1aa9a-1573-410e-9054-afa557cab021')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_stop_start(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
@ -122,7 +122,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
server, keypair, floating_ip)
|
||||
|
||||
@decorators.idempotent_id('7b6860c2-afa3-4846-9522-adeb38dfbe08')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_reboot(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
@ -133,7 +133,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
|
||||
@decorators.idempotent_id('88a529c2-1daa-4c85-9aec-d541ba3eb699')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_rebuild(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
@ -148,7 +148,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.pause,
|
||||
'Pause is not available.')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_pause_unpause(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
@ -166,7 +166,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.suspend,
|
||||
'Suspend is not available.')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_suspend_resume(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
@ -184,7 +184,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.resize,
|
||||
'Resize is not available.')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_resize(self):
|
||||
resize_flavor = CONF.compute.flavor_ref_alt
|
||||
keypair = self.create_keypair()
|
||||
@ -205,7 +205,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
'Less than 2 compute nodes, skipping multinode '
|
||||
'tests.')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_cold_migration(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
@ -231,7 +231,7 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
|
||||
'Less than 2 compute nodes, skipping multinode '
|
||||
'tests.')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_connectivity_cold_migration_revert(self):
|
||||
keypair = self.create_keypair()
|
||||
server = self._setup_server(keypair)
|
||||
|
@ -19,13 +19,13 @@ import re
|
||||
from oslo_log import log as logging
|
||||
import testtools
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.lib import exceptions
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
LOG = logging.getLogger(__name__)
|
||||
@ -87,7 +87,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
'public_network_id must be defined.')
|
||||
raise cls.skipException(msg)
|
||||
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
|
||||
raise cls.skipException(msg)
|
||||
if not CONF.network_feature_enabled.floating_ips:
|
||||
@ -357,7 +357,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
|
||||
@decorators.attr(type='smoke')
|
||||
@decorators.idempotent_id('f323b3ba-82f8-4db7-8ea6-6a895869ec49')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_network_basic_ops(self):
|
||||
"""Basic network operation test
|
||||
|
||||
@ -409,10 +409,10 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
"floating ip")
|
||||
|
||||
@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')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_mtu_sized_frames(self):
|
||||
"""Validate that network MTU sized frames fit through."""
|
||||
self._setup_network_and_servers()
|
||||
@ -425,7 +425,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
'multitenant network environment')
|
||||
@decorators.skip_because(bug="1610994")
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_connectivity_between_vms_on_different_networks(self):
|
||||
"""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'],
|
||||
'NIC hotplug not supported for '
|
||||
'vnic_type direct or macvtap')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_hotplug_nic(self):
|
||||
"""Test hotplug network interface
|
||||
|
||||
@ -501,7 +501,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
'Router state can be altered only with multitenant '
|
||||
'networks capabilities')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_update_router_admin_state(self):
|
||||
"""Test to update admin state up of router
|
||||
|
||||
@ -535,7 +535,7 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
@testtools.skipUnless(CONF.scenario.dhcp_client,
|
||||
"DHCP client is not available.")
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_subnet_details(self):
|
||||
"""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 "
|
||||
"by the test environment")
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_update_instance_port_admin_state(self):
|
||||
"""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.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_preserve_preexisting_port(self):
|
||||
"""Test preserve pre-existing port
|
||||
|
||||
@ -715,10 +715,10 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
||||
'server %s.' % server['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.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_router_rescheduling(self):
|
||||
"""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,
|
||||
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,
|
||||
'NIC hotplug not available')
|
||||
@decorators.idempotent_id('7c0bb1a2-d053-49a4-98f9-ca1a1d849f63')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_port_security_macspoofing_port(self):
|
||||
"""Tests port_security extension enforces mac spoofing
|
||||
|
||||
|
@ -14,11 +14,11 @@
|
||||
# under the License.
|
||||
import functools
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import test_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -210,49 +210,49 @@ class TestGettingAddress(manager.NetworkScenarioTest):
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('2c92df61-29f0-4eaa-bee3-7c65bef62a43')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_slaac_from_os(self):
|
||||
self._prepare_and_test(address6_mode='slaac')
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('d7e1f858-187c-45a6-89c9-bdafde619a9f')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_dhcp6_stateless_from_os(self):
|
||||
self._prepare_and_test(address6_mode='dhcpv6-stateless')
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('7ab23f41-833b-4a16-a7c9-5b42fe6d4123')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_multi_prefix_dhcpv6_stateless(self):
|
||||
self._prepare_and_test(address6_mode='dhcpv6-stateless', n_subnets6=2)
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('dec222b1-180c-4098-b8c5-cc1b8342d611')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_multi_prefix_slaac(self):
|
||||
self._prepare_and_test(address6_mode='slaac', n_subnets6=2)
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('b6399d76-4438-4658-bcf5-0d6c8584fde2')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_dualnet_slaac_from_os(self):
|
||||
self._prepare_and_test(address6_mode='slaac', dualnet=True)
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('76f26acd-9688-42b4-bc3e-cd134c4cb09e')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_dualnet_dhcp6_stateless_from_os(self):
|
||||
self._prepare_and_test(address6_mode='dhcpv6-stateless', dualnet=True)
|
||||
|
||||
@decorators.attr(type='slow')
|
||||
@decorators.idempotent_id('cf1c4425-766b-45b8-be35-e2959728eb00')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_dualnet_multi_prefix_dhcpv6_stateless(self):
|
||||
self._prepare_and_test(address6_mode='dhcpv6-stateless', n_subnets6=2,
|
||||
dualnet=True)
|
||||
|
||||
@decorators.idempotent_id('9178ad42-10e4-47e9-8987-e02b170cc5cd')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_dualnet_multi_prefix_slaac(self):
|
||||
self._prepare_and_test(address6_mode='slaac', n_subnets6=2,
|
||||
dualnet=True)
|
||||
|
@ -13,14 +13,14 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
|
||||
class TestObjectStorageBasicOps(manager.ObjectStorageScenarioTest):
|
||||
@decorators.idempotent_id('b920faf1-7b8a-4657-b9fe-9c4512bfb381')
|
||||
@test.services('object_storage')
|
||||
@utils.services('object_storage')
|
||||
def test_swift_basic_ops(self):
|
||||
"""Test swift basic ops.
|
||||
|
||||
@ -47,7 +47,7 @@ class TestObjectStorageBasicOps(manager.ObjectStorageScenarioTest):
|
||||
|
||||
@decorators.idempotent_id('916c7111-cb1f-44b2-816d-8f760e4ea910')
|
||||
@decorators.attr(type='slow')
|
||||
@test.services('object_storage')
|
||||
@utils.services('object_storage')
|
||||
def test_swift_acl_anonymous_download(self):
|
||||
"""This test will cover below steps:
|
||||
|
||||
|
@ -16,12 +16,12 @@ from oslo_log import log
|
||||
import testtools
|
||||
|
||||
from tempest.common import compute
|
||||
from tempest.common import utils
|
||||
from tempest.common.utils import net_info
|
||||
from tempest import config
|
||||
from tempest.lib.common.utils import data_utils
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
@ -142,7 +142,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
msg = ('Either project_networks_reachable must be "true", or '
|
||||
'public_network_id must be defined.')
|
||||
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."
|
||||
raise cls.skipException(msg)
|
||||
if CONF.network.shared_physical_network:
|
||||
@ -471,7 +471,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
servers=[tenant.access_point], client=client)
|
||||
|
||||
@decorators.idempotent_id('e79f879e-debb-440c-a7e4-efeda05b6848')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_cross_tenant_traffic(self):
|
||||
if not self.credentials_provider.is_multi_tenant():
|
||||
raise self.skipException("No secondary tenant defined")
|
||||
@ -491,7 +491,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
raise
|
||||
|
||||
@decorators.idempotent_id('63163892-bbf6-4249-aa12-d5ea1f8f421b')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_in_tenant_traffic(self):
|
||||
try:
|
||||
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.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_port_update_new_security_group(self):
|
||||
"""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.attr(type='slow')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_multiple_security_groups(self):
|
||||
"""Verify multiple security groups and checks that rules
|
||||
|
||||
@ -591,9 +591,9 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
should_connect=True)
|
||||
|
||||
@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')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_port_security_disable_security_group(self):
|
||||
"""Verify the default security group rules is disabled."""
|
||||
new_tenant = self.primary_tenant
|
||||
@ -631,7 +631,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
raise
|
||||
|
||||
@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')
|
||||
# TODO(mriedem): We shouldn't actually need to check this since neutron
|
||||
# disables the port_security extension by default, but the problem is nova
|
||||
@ -641,7 +641,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
@testtools.skipUnless(
|
||||
CONF.network_feature_enabled.port_security,
|
||||
'Port security must be enabled.')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_boot_into_disabled_port_security_network_without_secgroup(self):
|
||||
tenant = self.primary_tenant
|
||||
self._create_tenant_network(tenant, port_security_enabled=False)
|
||||
|
@ -16,11 +16,11 @@
|
||||
from oslo_log import log as logging
|
||||
import testtools
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
from tempest.lib import decorators
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -45,7 +45,7 @@ class TestServerAdvancedOps(manager.ScenarioTest):
|
||||
@decorators.idempotent_id('e6c28180-7454-4b59-b188-0257af08a63b')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.resize,
|
||||
'Resize is not available.')
|
||||
@test.services('compute', 'volume')
|
||||
@utils.services('compute', 'volume')
|
||||
def test_resize_volume_backed_server_confirm(self):
|
||||
# We create an instance for use in this test
|
||||
instance = self.create_server(volume_backed=True)
|
||||
@ -67,7 +67,7 @@ class TestServerAdvancedOps(manager.ScenarioTest):
|
||||
@decorators.idempotent_id('949da7d5-72c8-4808-8802-e3d70df98e2c')
|
||||
@testtools.skipUnless(CONF.compute_feature_enabled.suspend,
|
||||
'Suspend is not available.')
|
||||
@test.services('compute')
|
||||
@utils.services('compute')
|
||||
def test_server_sequence_suspend_resume(self):
|
||||
# We create an instance for use in this test
|
||||
instance_id = self.create_server()['id']
|
||||
|
@ -16,6 +16,7 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
from tempest.common import utils
|
||||
from tempest.common import waiters
|
||||
from tempest import config
|
||||
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 exceptions
|
||||
from tempest.scenario import manager
|
||||
from tempest import test
|
||||
|
||||
CONF = config.CONF
|
||||
|
||||
@ -132,7 +132,7 @@ class TestServerBasicOps(manager.ScenarioTest):
|
||||
|
||||
@decorators.idempotent_id('7fff3fb3-91d8-4fd0-bd7d-0204f1f180ba')
|
||||
@decorators.attr(type='smoke')
|
||||
@test.services('compute', 'network')
|
||||
@utils.services('compute', 'network')
|
||||
def test_server_basic_ops(self):
|
||||
keypair = self.create_keypair()
|
||||
security_group = self._create_security_group()
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user