Merge "Split resource_setup for compute tests"
diff --git a/tempest/api_schema/response/compute/v2/servers.py b/tempest/api_schema/response/compute/v2/servers.py
index 0132350..83dbb4f 100644
--- a/tempest/api_schema/response/compute/v2/servers.py
+++ b/tempest/api_schema/response/compute/v2/servers.py
@@ -93,6 +93,15 @@
# these attributes. So they are not 'required'.
'hostId'
)
+# NOTE(gmann): Update OS-EXT-IPS:type and OS-EXT-IPS-MAC:mac_addr
+# attributes in server address. Those are API extension,
+# and some environments return a response without
+# these attributes. So they are not 'required'.
+get_server['response_body']['properties']['server']['properties'][
+ 'addresses']['patternProperties']['^[a-zA-Z0-9-_.]+$']['items'][
+ 'properties'].update({
+ 'OS-EXT-IPS:type': {'type': 'string'},
+ 'OS-EXT-IPS-MAC:mac_addr': parameter_types.mac_address})
list_virtual_interfaces = {
'status_code': [200],
@@ -293,11 +302,21 @@
'accessIPv4': parameter_types.access_ip_v4,
'accessIPv6': parameter_types.access_ip_v6
})
-# NOTE(GMann): OS-DCF:diskConfig, security_groups and accessIPv4/v6 are API
-# extensions, and some environments return a response
+# NOTE(GMann): OS-DCF:diskConfig, security_groups and accessIPv4/v6
+# are API extensions, and some environments return a response
# without these attributes. So they are not 'required'.
list_servers_detail['response_body']['properties']['servers']['items'][
'required'].append('hostId')
+# NOTE(gmann): Update OS-EXT-IPS:type and OS-EXT-IPS-MAC:mac_addr
+# attributes in server address. Those are API extension,
+# and some environments return a response without
+# these attributes. So they are not 'required'.
+list_servers_detail['response_body']['properties']['servers']['items'][
+ 'properties']['addresses']['patternProperties']['^[a-zA-Z0-9-_.]+$'][
+ 'items']['properties'].update({
+ 'OS-EXT-IPS:type': {'type': 'string'},
+ 'OS-EXT-IPS-MAC:mac_addr': parameter_types.mac_address})
+
rebuild_server = copy.deepcopy(update_server)
rebuild_server['status_code'] = [202]
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index 45c7ddd..55d4a52 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -41,8 +41,8 @@
"""Base class for scenario tests. Uses tempest own clients. """
@classmethod
- def resource_setup(cls):
- super(ScenarioTest, cls).resource_setup()
+ def setup_credentials(cls):
+ super(ScenarioTest, cls).setup_credentials()
# TODO(andreaf) Some of the code from this resource_setup could be
# moved into `BaseTestCase`
cls.isolated_creds = credentials.get_isolated_credentials(
@@ -51,6 +51,10 @@
credentials=cls.credentials()
)
cls.admin_manager = clients.Manager(cls.admin_credentials())
+
+ @classmethod
+ def setup_clients(cls):
+ super(ScenarioTest, cls).setup_clients()
# Clients (in alphabetical order)
cls.flavors_client = cls.manager.flavors_client
cls.floating_ips_client = cls.manager.floating_ips_client
@@ -534,13 +538,13 @@
"""
@classmethod
- def check_preconditions(cls):
+ def skip_checks(cls):
+ super(NetworkScenarioTest, cls).skip_checks()
if not CONF.service_available.neutron:
raise cls.skipException('Neutron not available')
@classmethod
def resource_setup(cls):
- cls.check_preconditions()
super(NetworkScenarioTest, cls).resource_setup()
cls.tenant_id = cls.manager.identity_client.tenant_id
@@ -1141,12 +1145,16 @@
class BaremetalScenarioTest(ScenarioTest):
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(BaremetalScenarioTest, cls).skip_checks()
if (not CONF.service_available.ironic or
not CONF.baremetal.driver_enabled):
msg = 'Ironic not available or Ironic compute driver not enabled'
raise cls.skipException(msg)
- super(BaremetalScenarioTest, cls).resource_setup()
+
+ @classmethod
+ def setup_credentials(cls):
+ super(BaremetalScenarioTest, cls).setup_credentials()
# use an admin client manager for baremetal client
manager = clients.Manager(
@@ -1154,6 +1162,9 @@
)
cls.baremetal_client = manager.baremetal_client
+ @classmethod
+ def resource_setup(cls):
+ super(BaremetalScenarioTest, cls).resource_setup()
# allow any issues obtaining the node list to raise early
cls.baremetal_client.list_nodes()
@@ -1272,8 +1283,8 @@
"""
@classmethod
- def resource_setup(cls):
- super(EncryptionScenarioTest, cls).resource_setup()
+ def setup_clients(cls):
+ super(EncryptionScenarioTest, cls).setup_clients()
cls.admin_volume_types_client = cls.admin_manager.volume_types_client
def _wait_for_volume_status(self, status):
@@ -1319,10 +1330,10 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(OrchestrationScenarioTest, cls).skip_checks()
if not CONF.service_available.heat:
raise cls.skipException("Heat support is required")
- super(OrchestrationScenarioTest, cls).resource_setup()
@classmethod
def credentials(cls):
@@ -1365,13 +1376,17 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(SwiftScenarioTest, cls).skip_checks()
if not CONF.service_available.swift:
skip_msg = ("%s skipped as swift is not available" %
cls.__name__)
raise cls.skipException(skip_msg)
+
+ @classmethod
+ def setup_credentials(cls):
cls.set_network_resources()
- super(SwiftScenarioTest, cls).resource_setup()
+ super(SwiftScenarioTest, cls).setup_credentials()
operator_role = CONF.object_storage.operator_role
if not cls.isolated_creds.is_role_available(operator_role):
skip_msg = ("%s skipped because the configured credential provider"
@@ -1382,6 +1397,10 @@
cls.os_operator = clients.Manager(
cls.isolated_creds.get_creds_by_roles(
[operator_role]))
+
+ @classmethod
+ def setup_clients(cls):
+ super(SwiftScenarioTest, cls).setup_clients()
# Clients for Swift
cls.account_client = cls.os_operator.account_client
cls.container_client = cls.os_operator.container_client
diff --git a/tempest/scenario/test_aggregates_basic_ops.py b/tempest/scenario/test_aggregates_basic_ops.py
index ff450de..c94a787 100644
--- a/tempest/scenario/test_aggregates_basic_ops.py
+++ b/tempest/scenario/test_aggregates_basic_ops.py
@@ -33,8 +33,8 @@
Deletes aggregate
"""
@classmethod
- def resource_setup(cls):
- super(TestAggregatesBasicOps, cls).resource_setup()
+ def setup_clients(cls):
+ super(TestAggregatesBasicOps, cls).setup_clients()
cls.aggregates_client = cls.manager.aggregates_client
cls.hosts_client = cls.manager.hosts_client
diff --git a/tempest/scenario/test_dashboard_basic_ops.py b/tempest/scenario/test_dashboard_basic_ops.py
index 4c4dc94..dd7376a 100644
--- a/tempest/scenario/test_dashboard_basic_ops.py
+++ b/tempest/scenario/test_dashboard_basic_ops.py
@@ -57,11 +57,15 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(TestDashboardBasicOps, cls).skip_checks()
if not CONF.service_available.horizon:
raise cls.skipException("Horizon support is required")
+
+ @classmethod
+ def setup_credentials(cls):
cls.set_network_resources()
- super(TestDashboardBasicOps, cls).resource_setup()
+ super(TestDashboardBasicOps, cls).setup_credentials()
def check_login_page(self):
response = urllib2.urlopen(CONF.dashboard.dashboard_url)
diff --git a/tempest/scenario/test_large_ops.py b/tempest/scenario/test_large_ops.py
index af2b4cb..613732a 100644
--- a/tempest/scenario/test_large_ops.py
+++ b/tempest/scenario/test_large_ops.py
@@ -39,11 +39,19 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(TestLargeOpsScenario, cls).skip_checks()
if CONF.scenario.large_ops_number < 1:
raise cls.skipException("large_ops_number not set to multiple "
"instances")
+
+ @classmethod
+ def setup_credentials(cls):
cls.set_network_resources()
+ super(TestLargeOpsScenario, cls).setup_credentials()
+
+ @classmethod
+ def resource_setup(cls):
super(TestLargeOpsScenario, cls).resource_setup()
# list of cleanup calls to be executed in reverse order
cls._cleanup_resources = []
diff --git a/tempest/scenario/test_load_balancer_basic.py b/tempest/scenario/test_load_balancer_basic.py
index 2dfabe3..0d17048 100644
--- a/tempest/scenario/test_load_balancer_basic.py
+++ b/tempest/scenario/test_load_balancer_basic.py
@@ -43,8 +43,8 @@
"""
@classmethod
- def check_preconditions(cls):
- super(TestLoadBalancerBasic, cls).check_preconditions()
+ def skip_checks(cls):
+ super(TestLoadBalancerBasic, cls).skip_checks()
cfg = config.network
if not test.is_extension_enabled('lbaas', 'network'):
msg = 'LBaaS Extension is not enabled'
@@ -57,7 +57,6 @@
@classmethod
def resource_setup(cls):
super(TestLoadBalancerBasic, cls).resource_setup()
- cls.check_preconditions()
cls.servers_keypairs = {}
cls.members = []
cls.floating_ips = {}
diff --git a/tempest/scenario/test_network_advanced_server_ops.py b/tempest/scenario/test_network_advanced_server_ops.py
index 19a8716..1d4f915 100644
--- a/tempest/scenario/test_network_advanced_server_ops.py
+++ b/tempest/scenario/test_network_advanced_server_ops.py
@@ -41,8 +41,8 @@
"""
@classmethod
- def check_preconditions(cls):
- super(TestNetworkAdvancedServerOps, cls).check_preconditions()
+ def skip_checks(cls):
+ super(TestNetworkAdvancedServerOps, cls).skip_checks()
if not (CONF.network.tenant_networks_reachable
or CONF.network.public_network_id):
msg = ('Either tenant_networks_reachable must be "true", or '
@@ -50,10 +50,10 @@
raise cls.skipException(msg)
@classmethod
- def resource_setup(cls):
+ def setup_credentials(cls):
# Create no network resources for these tests.
cls.set_network_resources()
- super(TestNetworkAdvancedServerOps, cls).resource_setup()
+ super(TestNetworkAdvancedServerOps, cls).setup_credentials()
def _setup_network_and_servers(self):
self.keypair = self.create_keypair()
diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py
index 81bec51..f4db878 100644
--- a/tempest/scenario/test_network_basic_ops.py
+++ b/tempest/scenario/test_network_basic_ops.py
@@ -77,23 +77,23 @@
"""
@classmethod
- def check_preconditions(cls):
- super(TestNetworkBasicOps, cls).check_preconditions()
+ def skip_checks(cls):
+ super(TestNetworkBasicOps, cls).skip_checks()
if not (CONF.network.tenant_networks_reachable
or CONF.network.public_network_id):
msg = ('Either tenant_networks_reachable must be "true", or '
'public_network_id must be defined.')
raise cls.skipException(msg)
-
- @classmethod
- def resource_setup(cls):
for ext in ['router', 'security-group']:
if not test.is_extension_enabled(ext, 'network'):
msg = "%s extension not enabled." % ext
raise cls.skipException(msg)
+
+ @classmethod
+ def setup_credentials(cls):
# Create no network resources for these tests.
cls.set_network_resources()
- super(TestNetworkBasicOps, cls).resource_setup()
+ super(TestNetworkBasicOps, cls).setup_credentials()
def setUp(self):
super(TestNetworkBasicOps, self).setUp()
diff --git a/tempest/scenario/test_network_v6.py b/tempest/scenario/test_network_v6.py
index d5d2d77..7b2bdd5 100644
--- a/tempest/scenario/test_network_v6.py
+++ b/tempest/scenario/test_network_v6.py
@@ -34,13 +34,8 @@
"""
@classmethod
- def resource_setup(cls):
- # Create no network resources for these tests.
- cls.set_network_resources()
- super(TestGettingAddress, cls).resource_setup()
-
- @classmethod
- def check_preconditions(cls):
+ def skip_checks(cls):
+ super(TestGettingAddress, cls).skip_checks()
if not (CONF.network_feature_enabled.ipv6
and CONF.network_feature_enabled.ipv6_subnet_attributes):
raise cls.skipException('IPv6 or its attributes not supported')
@@ -53,7 +48,11 @@
msg = ('Baremetal does not currently support network isolation')
raise cls.skipException(msg)
- super(TestGettingAddress, cls).check_preconditions()
+ @classmethod
+ def setup_credentials(cls):
+ # Create no network resources for these tests.
+ cls.set_network_resources()
+ super(TestGettingAddress, cls).setup_credentials()
def setUp(self):
super(TestGettingAddress, self).setUp()
diff --git a/tempest/scenario/test_security_groups_basic_ops.py b/tempest/scenario/test_security_groups_basic_ops.py
index 4fbadb0..f9667a5 100644
--- a/tempest/scenario/test_security_groups_basic_ops.py
+++ b/tempest/scenario/test_security_groups_basic_ops.py
@@ -119,11 +119,11 @@
self.router = router
@classmethod
- def check_preconditions(cls):
+ def skip_checks(cls):
+ super(TestSecurityGroupsBasicOps, cls).skip_checks()
if CONF.baremetal.driver_enabled:
msg = ('Not currently supported by baremetal.')
raise cls.skipException(msg)
- super(TestSecurityGroupsBasicOps, cls).check_preconditions()
if not (CONF.network.tenant_networks_reachable or
CONF.network.public_network_id):
msg = ('Either tenant_networks_reachable must be "true", or '
@@ -131,10 +131,10 @@
raise cls.skipException(msg)
@classmethod
- def resource_setup(cls):
+ def setup_credentials(cls):
# Create no network resources for these tests.
cls.set_network_resources()
- super(TestSecurityGroupsBasicOps, cls).resource_setup()
+ super(TestSecurityGroupsBasicOps, cls).setup_credentials()
# TODO(mnewby) Consider looking up entities as needed instead
# of storing them as collections on the class.
@@ -144,6 +144,9 @@
# Credentials from the manager are filled with both IDs and Names
cls.alt_creds = cls.alt_manager.credentials
+ @classmethod
+ def resource_setup(cls):
+ super(TestSecurityGroupsBasicOps, cls).resource_setup()
cls.floating_ips = {}
cls.tenants = {}
creds = cls.credentials()
@@ -151,6 +154,7 @@
cls.alt_tenant = cls.TenantProperties(cls.alt_creds)
for tenant in [cls.primary_tenant, cls.alt_tenant]:
cls.tenants[tenant.creds.tenant_id] = tenant
+
cls.floating_ip_access = not CONF.network.public_router_id
def cleanup_wrapper(self, resource):
diff --git a/tempest/scenario/test_server_advanced_ops.py b/tempest/scenario/test_server_advanced_ops.py
index d0b595a..8cbc388 100644
--- a/tempest/scenario/test_server_advanced_ops.py
+++ b/tempest/scenario/test_server_advanced_ops.py
@@ -35,12 +35,16 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(TestServerAdvancedOps, cls).skip_checks()
if CONF.compute.flavor_ref_alt == CONF.compute.flavor_ref:
msg = "Skipping test - flavor_ref and flavor_ref_alt are identical"
raise cls.skipException(msg)
+
+ @classmethod
+ def setup_credentials(cls):
cls.set_network_resources()
- super(TestServerAdvancedOps, cls).resource_setup()
+ super(TestServerAdvancedOps, cls).setup_credentials()
@test.idempotent_id('e6c28180-7454-4b59-b188-0257af08a63b')
@testtools.skipUnless(CONF.compute_feature_enabled.resize,
diff --git a/tempest/scenario/test_stamp_pattern.py b/tempest/scenario/test_stamp_pattern.py
index bd3cefa..3614e97 100644
--- a/tempest/scenario/test_stamp_pattern.py
+++ b/tempest/scenario/test_stamp_pattern.py
@@ -54,10 +54,10 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(TestStampPattern, cls).skip_checks()
if not CONF.volume_feature_enabled.snapshot:
raise cls.skipException("Cinder volume snapshots are disabled")
- super(TestStampPattern, cls).resource_setup()
def _wait_for_volume_snapshot_status(self, volume_snapshot, status):
self.snapshots_client.wait_for_snapshot_status(volume_snapshot['id'],
diff --git a/tempest/scenario/test_swift_telemetry_middleware.py b/tempest/scenario/test_swift_telemetry_middleware.py
index 16c3976..fc9a6e3 100644
--- a/tempest/scenario/test_swift_telemetry_middleware.py
+++ b/tempest/scenario/test_swift_telemetry_middleware.py
@@ -44,7 +44,8 @@
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(TestSwiftTelemetry, cls).skip_checks()
if not CONF.service_available.ceilometer:
skip_msg = ("%s skipped as ceilometer is not available" %
cls.__name__)
@@ -52,7 +53,10 @@
elif CONF.telemetry.too_slow_to_test:
skip_msg = "Ceilometer feature for fast work mysql is disabled"
raise cls.skipException(skip_msg)
- super(TestSwiftTelemetry, cls).resource_setup()
+
+ @classmethod
+ def setup_clients(cls):
+ super(TestSwiftTelemetry, cls).setup_clients()
cls.telemetry_client = cls.os_operator.telemetry_client
def _confirm_notifications(self, container_name, obj_name):
diff --git a/tempest/scenario/test_volume_boot_pattern.py b/tempest/scenario/test_volume_boot_pattern.py
index d1ea270..95edbd2 100644
--- a/tempest/scenario/test_volume_boot_pattern.py
+++ b/tempest/scenario/test_volume_boot_pattern.py
@@ -38,10 +38,10 @@
* Check written content in the instance booted from snapshot
"""
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(TestVolumeBootPattern, cls).skip_checks()
if not CONF.volume_feature_enabled.snapshot:
raise cls.skipException("Cinder volume snapshots are disabled")
- super(TestVolumeBootPattern, cls).resource_setup()
def _create_volume_from_image(self):
img_uuid = CONF.compute.image_ref