summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/source/configuration.rst25
-rw-r--r--etc/tempest.conf.sample16
-rw-r--r--requirements.txt2
-rw-r--r--tempest/api/baremetal/admin/base.py3
-rw-r--r--tempest/api/baremetal/admin/test_chassis.py2
-rw-r--r--tempest/api/baremetal/admin/test_nodes.py2
-rw-r--r--tempest/api/baremetal/admin/test_ports.py2
-rw-r--r--tempest/api/baremetal/admin/test_ports_negative.py2
-rw-r--r--tempest/api/compute/admin/test_agents.py6
-rw-r--r--tempest/api/compute/admin/test_aggregates.py8
-rw-r--r--tempest/api/compute/admin/test_aggregates_negative.py22
-rw-r--r--tempest/api/compute/admin/test_availability_zone.py4
-rw-r--r--tempest/api/compute/admin/test_availability_zone_negative.py6
-rw-r--r--tempest/api/compute/admin/test_fixed_ips.py12
-rw-r--r--tempest/api/compute/admin/test_fixed_ips_negative.py18
-rw-r--r--tempest/api/compute/admin/test_flavors.py17
-rw-r--r--tempest/api/compute/admin/test_flavors_access.py16
-rw-r--r--tempest/api/compute/admin/test_flavors_access_negative.py21
-rw-r--r--tempest/api/compute/admin/test_flavors_extra_specs.py14
-rw-r--r--tempest/api/compute/admin/test_flavors_extra_specs_negative.py20
-rw-r--r--tempest/api/compute/admin/test_flavors_negative.py17
-rw-r--r--tempest/api/compute/admin/test_floating_ips_bulk.py6
-rw-r--r--tempest/api/compute/admin/test_hosts.py4
-rw-r--r--tempest/api/compute/admin/test_hosts_negative.py18
-rw-r--r--tempest/api/compute/admin/test_hypervisor.py4
-rw-r--r--tempest/api/compute/admin/test_hypervisor_negative.py23
-rw-r--r--tempest/api/compute/admin/test_instance_usage_audit_log.py4
-rw-r--r--tempest/api/compute/admin/test_instance_usage_audit_log_negative.py8
-rw-r--r--tempest/api/compute/admin/test_migrations.py4
-rw-r--r--tempest/api/compute/admin/test_networks.py4
-rw-r--r--tempest/api/compute/admin/test_quotas.py8
-rw-r--r--tempest/api/compute/admin/test_quotas_negative.py21
-rw-r--r--tempest/api/compute/admin/test_security_groups.py6
-rw-r--r--tempest/api/compute/admin/test_servers.py10
-rw-r--r--tempest/api/compute/admin/test_servers_negative.py16
-rw-r--r--tempest/api/compute/admin/test_services.py4
-rw-r--r--tempest/api/compute/admin/test_services_negative.py6
-rw-r--r--tempest/api/compute/admin/test_simple_tenant_usage.py8
-rw-r--r--tempest/api/compute/admin/test_simple_tenant_usage_negative.py11
-rw-r--r--tempest/api/compute/base.py5
-rw-r--r--tempest/api/compute/flavors/test_flavors.py4
-rw-r--r--tempest/api/compute/floating_ips/test_floating_ips_actions.py2
-rw-r--r--tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py2
-rw-r--r--tempest/api/compute/floating_ips/test_list_floating_ips_negative.py2
-rw-r--r--tempest/api/compute/images/test_image_metadata.py14
-rw-r--r--tempest/api/compute/images/test_image_metadata_negative.py6
-rw-r--r--tempest/api/compute/images/test_images.py11
-rw-r--r--tempest/api/compute/images/test_images_negative.py10
-rw-r--r--tempest/api/compute/images/test_images_oneserver.py15
-rw-r--r--tempest/api/compute/images/test_images_oneserver_negative.py15
-rw-r--r--tempest/api/compute/images/test_list_image_filters.py14
-rw-r--r--tempest/api/compute/images/test_list_image_filters_negative.py10
-rw-r--r--tempest/api/compute/images/test_list_images.py8
-rw-r--r--tempest/api/compute/keypairs/test_keypairs.py7
-rw-r--r--tempest/api/compute/keypairs/test_keypairs_negative.py6
-rw-r--r--tempest/api/compute/limits/test_absolute_limits_negative.py2
-rw-r--r--tempest/api/compute/security_groups/test_security_group_rules_negative.py2
-rw-r--r--tempest/api/compute/security_groups/test_security_groups.py2
-rw-r--r--tempest/api/compute/security_groups/test_security_groups_negative.py2
-rw-r--r--tempest/api/compute/servers/test_availability_zone.py4
-rw-r--r--tempest/api/compute/servers/test_create_server.py24
-rw-r--r--tempest/api/compute/servers/test_delete_server.py8
-rw-r--r--tempest/api/compute/servers/test_disk_config.py12
-rw-r--r--tempest/api/compute/servers/test_instance_actions.py6
-rw-r--r--tempest/api/compute/servers/test_instance_actions_negative.py8
-rw-r--r--tempest/api/compute/servers/test_list_server_filters.py2
-rw-r--r--tempest/api/compute/servers/test_list_servers_negative.py6
-rw-r--r--tempest/api/compute/servers/test_multiple_create.py3
-rw-r--r--tempest/api/compute/servers/test_multiple_create_negative.py2
-rw-r--r--tempest/api/compute/servers/test_server_actions.py8
-rw-r--r--tempest/api/compute/servers/test_server_group.py14
-rw-r--r--tempest/api/compute/servers/test_server_metadata.py8
-rw-r--r--tempest/api/compute/servers/test_server_metadata_negative.py14
-rw-r--r--tempest/api/compute/servers/test_server_password.py6
-rw-r--r--tempest/api/compute/servers/test_server_personality.py6
-rw-r--r--tempest/api/compute/servers/test_server_rescue.py3
-rw-r--r--tempest/api/compute/servers/test_server_rescue_negative.py2
-rw-r--r--tempest/api/compute/servers/test_servers.py7
-rw-r--r--tempest/api/compute/servers/test_servers_negative.py16
-rw-r--r--tempest/api/compute/test_authorization.py2
-rw-r--r--tempest/api/compute/test_live_block_migration.py9
-rw-r--r--tempest/api/compute/test_live_block_migration_negative.py10
-rw-r--r--tempest/api/compute/test_networks.py8
-rw-r--r--tempest/api/compute/test_quotas.py6
-rw-r--r--tempest/api/compute/volumes/test_volumes_get.py2
-rw-r--r--tempest/api/compute/volumes/test_volumes_list.py3
-rw-r--r--tempest/api/compute/volumes/test_volumes_negative.py2
-rw-r--r--tempest/api/data_processing/test_cluster_templates.py3
-rw-r--r--tempest/api/data_processing/test_data_sources.py3
-rw-r--r--tempest/api/data_processing/test_job_binaries.py3
-rw-r--r--tempest/api/data_processing/test_job_binary_internals.py3
-rw-r--r--tempest/api/data_processing/test_jobs.py3
-rw-r--r--tempest/api/data_processing/test_node_group_templates.py3
-rw-r--r--tempest/api/identity/admin/v2/test_roles.py2
-rw-r--r--tempest/api/identity/admin/v2/test_roles_negative.py17
-rw-r--r--tempest/api/identity/admin/v2/test_services.py2
-rw-r--r--tempest/api/identity/admin/v2/test_tenant_negative.py13
-rw-r--r--tempest/api/identity/admin/v2/test_tenants.py2
-rw-r--r--tempest/api/identity/admin/v2/test_tokens.py3
-rw-r--r--tempest/api/identity/admin/v2/test_users.py2
-rw-r--r--tempest/api/identity/admin/v2/test_users_negative.py13
-rw-r--r--tempest/api/identity/admin/v3/test_credentials.py3
-rw-r--r--tempest/api/identity/admin/v3/test_default_project_id.py3
-rw-r--r--tempest/api/identity/admin/v3/test_domains.py2
-rw-r--r--tempest/api/identity/admin/v3/test_endpoints.py3
-rw-r--r--tempest/api/identity/admin/v3/test_endpoints_negative.py2
-rw-r--r--tempest/api/identity/admin/v3/test_groups.py3
-rw-r--r--tempest/api/identity/admin/v3/test_list_projects.py3
-rw-r--r--tempest/api/identity/admin/v3/test_list_users.py3
-rw-r--r--tempest/api/identity/admin/v3/test_policies.py3
-rw-r--r--tempest/api/identity/admin/v3/test_projects.py3
-rw-r--r--tempest/api/identity/admin/v3/test_projects_negative.py8
-rw-r--r--tempest/api/identity/admin/v3/test_regions.py2
-rw-r--r--tempest/api/identity/admin/v3/test_roles.py3
-rw-r--r--tempest/api/identity/admin/v3/test_services.py2
-rw-r--r--tempest/api/identity/admin/v3/test_tokens.py2
-rw-r--r--tempest/api/identity/admin/v3/test_trusts.py2
-rw-r--r--tempest/api/identity/admin/v3/test_users.py3
-rw-r--r--tempest/api/identity/base.py2
-rw-r--r--tempest/api/image/base.py3
-rw-r--r--tempest/api/image/v1/test_image_members_negative.py2
-rw-r--r--tempest/api/image/v1/test_images.py3
-rw-r--r--tempest/api/image/v2/test_images.py3
-rw-r--r--tempest/api/image/v2/test_images_member_negative.py2
-rw-r--r--tempest/api/image/v2/test_images_tags.py3
-rw-r--r--tempest/api/image/v2/test_images_tags_negative.py2
-rw-r--r--tempest/api/messaging/base.py3
-rw-r--r--tempest/api/messaging/test_claims.py2
-rw-r--r--tempest/api/messaging/test_messages.py3
-rw-r--r--tempest/api/messaging/test_queues.py2
-rw-r--r--tempest/api/network/admin/test_external_network_extension.py3
-rw-r--r--tempest/api/network/admin/test_floating_ips_admin_actions.py3
-rw-r--r--tempest/api/network/admin/test_l3_agent_scheduler.py3
-rw-r--r--tempest/api/network/admin/test_lbaas_agent_scheduler.py3
-rw-r--r--tempest/api/network/admin/test_load_balancer_admin_actions.py3
-rw-r--r--tempest/api/network/admin/test_quotas.py2
-rw-r--r--tempest/api/network/admin/test_routers_dvr.py3
-rw-r--r--tempest/api/network/base.py2
-rw-r--r--tempest/api/network/base_security_groups.py3
-rw-r--r--tempest/api/network/test_dhcp_ipv6.py2
-rw-r--r--tempest/api/network/test_extra_dhcp_options.py3
-rw-r--r--tempest/api/network/test_floating_ips.py2
-rw-r--r--tempest/api/network/test_floating_ips_negative.py2
-rw-r--r--tempest/api/network/test_fwaas_extensions.py2
-rw-r--r--tempest/api/network/test_load_balancer.py2
-rw-r--r--tempest/api/network/test_metering_extensions.py3
-rw-r--r--tempest/api/network/test_networks.py2
-rw-r--r--tempest/api/network/test_networks_negative.py2
-rw-r--r--tempest/api/network/test_ports.py5
-rw-r--r--tempest/api/network/test_routers.py2
-rw-r--r--tempest/api/network/test_routers_negative.py2
-rw-r--r--tempest/api/network/test_security_groups.py2
-rw-r--r--tempest/api/network/test_vpnaas_extensions.py2
-rw-r--r--tempest/api/object_storage/base.py53
-rw-r--r--tempest/api/object_storage/test_account_quotas.py15
-rw-r--r--tempest/api/object_storage/test_account_quotas_negative.py18
-rw-r--r--tempest/api/object_storage/test_account_services.py15
-rw-r--r--tempest/api/object_storage/test_account_services_negative.py17
-rw-r--r--tempest/api/object_storage/test_container_acl.py23
-rw-r--r--tempest/api/object_storage/test_container_acl_negative.py34
-rw-r--r--tempest/api/object_storage/test_container_quotas.py2
-rw-r--r--tempest/api/object_storage/test_container_services.py3
-rw-r--r--tempest/api/object_storage/test_container_staticweb.py2
-rw-r--r--tempest/api/object_storage/test_container_sync.py21
-rw-r--r--tempest/api/object_storage/test_object_expiry.py2
-rw-r--r--tempest/api/object_storage/test_object_formpost.py3
-rw-r--r--tempest/api/object_storage/test_object_formpost_negative.py2
-rw-r--r--tempest/api/object_storage/test_object_services.py20
-rw-r--r--tempest/api/object_storage/test_object_slo.py2
-rw-r--r--tempest/api/object_storage/test_object_temp_url.py3
-rw-r--r--tempest/api/object_storage/test_object_temp_url_negative.py2
-rw-r--r--tempest/api/object_storage/test_object_version.py3
-rw-r--r--tempest/api/orchestration/base.py2
-rw-r--r--tempest/api/orchestration/stacks/templates/neutron_basic.yaml6
-rw-r--r--tempest/api/orchestration/stacks/test_environment.py3
-rw-r--r--tempest/api/orchestration/stacks/test_limits.py3
-rw-r--r--tempest/api/orchestration/stacks/test_neutron_resources.py18
-rw-r--r--tempest/api/orchestration/stacks/test_non_empty_stack.py5
-rw-r--r--tempest/api/orchestration/stacks/test_nova_keypair_resources.py3
-rw-r--r--tempest/api/orchestration/stacks/test_soft_conf.py2
-rw-r--r--tempest/api/orchestration/stacks/test_stacks.py3
-rw-r--r--tempest/api/orchestration/stacks/test_swift_resources.py4
-rw-r--r--tempest/api/orchestration/stacks/test_templates.py3
-rw-r--r--tempest/api/orchestration/stacks/test_volumes.py2
-rw-r--r--tempest/api/telemetry/base.py2
-rw-r--r--tempest/api/telemetry/test_telemetry_alarming_api.py2
-rw-r--r--tempest/api/volume/admin/test_multi_backend.py3
-rw-r--r--tempest/api/volume/admin/test_snapshots_actions.py3
-rw-r--r--tempest/api/volume/admin/test_volume_quotas.py3
-rw-r--r--tempest/api/volume/admin/test_volume_types.py3
-rw-r--r--tempest/api/volume/admin/test_volume_types_extra_specs.py3
-rw-r--r--tempest/api/volume/admin/test_volume_types_extra_specs_negative.py2
-rw-r--r--tempest/api/volume/admin/test_volumes_actions.py3
-rw-r--r--tempest/api/volume/admin/test_volumes_backup.py3
-rw-r--r--tempest/api/volume/base.py2
-rw-r--r--tempest/api/volume/test_qos.py3
-rw-r--r--tempest/api/volume/test_volumes_actions.py3
-rw-r--r--tempest/api/volume/test_volumes_get.py2
-rw-r--r--tempest/api/volume/test_volumes_list.py2
-rw-r--r--tempest/api/volume/test_volumes_negative.py2
-rw-r--r--tempest/api/volume/test_volumes_snapshots.py3
-rw-r--r--tempest/api/volume/test_volumes_snapshots_negative.py2
-rw-r--r--tempest/api_schema/response/compute/v2/servers.py23
-rwxr-xr-xtempest/cmd/verify_tempest_config.py7
-rw-r--r--tempest/common/accounts.py12
-rw-r--r--tempest/common/cred_provider.py4
-rw-r--r--tempest/common/isolated_creds.py21
-rw-r--r--tempest/common/service_client.py19
-rw-r--r--tempest/common/utils/data_utils.py101
-rw-r--r--tempest/common/utils/misc.py87
-rw-r--r--tempest/common/waiters.py3
-rw-r--r--tempest/config.py3
-rw-r--r--tempest/scenario/manager.py61
-rw-r--r--tempest/scenario/orchestration/__init__.py0
-rw-r--r--tempest/scenario/orchestration/cfn_init_signal.yaml82
-rw-r--r--tempest/scenario/orchestration/test_server_cfn_init.py134
-rw-r--r--tempest/scenario/test_aggregates_basic_ops.py7
-rw-r--r--tempest/scenario/test_dashboard_basic_ops.py8
-rw-r--r--tempest/scenario/test_large_ops.py13
-rw-r--r--tempest/scenario/test_load_balancer_basic.py5
-rw-r--r--tempest/scenario/test_network_advanced_server_ops.py13
-rw-r--r--tempest/scenario/test_network_basic_ops.py97
-rw-r--r--tempest/scenario/test_network_v6.py15
-rw-r--r--tempest/scenario/test_security_groups_basic_ops.py15
-rw-r--r--tempest/scenario/test_server_advanced_ops.py8
-rw-r--r--tempest/scenario/test_stamp_pattern.py6
-rw-r--r--tempest/scenario/test_swift_telemetry_middleware.py22
-rw-r--r--tempest/scenario/test_volume_boot_pattern.py6
-rw-r--r--tempest/scenario/utils.py2
-rw-r--r--tempest/services/image/v1/json/image_client.py2
-rw-r--r--tempest/services/network/json/network_client.py2
-rw-r--r--tempest/stress/actions/server_create_destroy.py3
-rw-r--r--tempest/stress/actions/ssh_floating.py3
-rw-r--r--tempest/stress/actions/volume_attach_delete.py3
-rw-r--r--tempest/stress/actions/volume_attach_verify.py6
-rw-r--r--tempest/stress/actions/volume_create_delete.py3
-rw-r--r--tempest/stress/driver.py2
-rw-r--r--tempest/tests/cmd/test_verify_tempest_config.py35
-rw-r--r--tempest/tests/common/utils/test_data_utils.py77
-rw-r--r--tempest/tests/common/utils/test_misc.py88
-rw-r--r--tempest/tests/test_tenant_isolation.py4
-rw-r--r--tempest/thirdparty/boto/test_ec2_instance_run.py3
-rw-r--r--tempest/thirdparty/boto/test_ec2_keys.py3
-rw-r--r--tempest/thirdparty/boto/test_ec2_security_groups.py3
-rw-r--r--tempest/thirdparty/boto/test_s3_buckets.py3
-rw-r--r--tempest/thirdparty/boto/test_s3_ec2_images.py3
-rw-r--r--tempest/thirdparty/boto/test_s3_objects.py2
247 files changed, 1106 insertions, 1203 deletions
diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst
index 08f37cc7c..f772aa3ad 100644
--- a/doc/source/configuration.rst
+++ b/doc/source/configuration.rst
@@ -45,6 +45,8 @@ To enable and use tenant isolation you only need to configure 2 things:
#. To enable tenant_isolation in the auth section with the
allow_tenant_isolation option.
+This is also the currently the default credential provider enabled by tempest,
+due to it's common use and ease of configuration.
Locking Test Accounts
"""""""""""""""""""""
@@ -58,9 +60,8 @@ test accounts each test class will reserve a set of credentials from the
accounts.yaml before executing any of its tests so that each class is isolated
like in tenant isolation.
-Currently, this mechanism has some limitations, first only non-admin users with
-the same role set can be used at one time. The second limitation is around
-networking, locking test accounts will only work with a single flat network as
+Currently, this mechanism has some limitations, mostly around networking. The
+locking test accounts provider will only work with a single flat network as
the default for each tenant/project. If another network configuration is used
in your cloud you might face unexpected failures.
@@ -73,6 +74,8 @@ To enable and use locking test accounts you need do a few things:
starvation issue when running in parallel make sure you have at least 2
times the number of parallel workers you are using to execute tempest
available in the file.
+
+ You can check the sample file packaged in tempest for the yaml format
#. Provide tempest with the location of you accounts.yaml file with the
test_accounts_file option in the auth section
@@ -85,8 +88,7 @@ This mechanism is the non-locking test accounts provider. It only makes sense
to use it if parallel execution isn't needed. If the role restrictions were too
limiting with the locking accounts provider and tenant isolation is not wanted
then you can use the non-locking test accounts credential provider without the
-accounts.yaml file. This is also the currently the default configuration for
-tempest, since it doesn't require elevated permissions or the extra file.
+accounts.yaml file.
To use the non-locking test accounts provider you have 2 ways to configure it.
First you can specify the sets of credentials in the configuration file like
@@ -102,14 +104,19 @@ detailed above with following 9 options in the identity section:
#. alt_password
#. alt_tenant_name
-You should use this if you need to specify credentials with different roles.
-(i.e. you want to use admin credentials) However, this isn't a requirement for
-its usage.
+The only restriction with using the traditional config options for credentials
+is that if a test requires specific roles on accounts these tests can not be
+run. This is because the config options do not give sufficient flexibility to
+describe the roles assigned to a user for running the tests.
You also can use the accounts.yaml file to specify the credentials used for
testing. This will just allocate them serially so you only need to provide
a pair of credentials. Do note that all the restrictions associated with
-locking test accounts applies to using the accounts.yaml file this way too.
+locking test accounts applies to using the accounts.yaml file this way too,
+except since you can't run in parallel only 2 of each type of credential is
+required to run. However, the limitation on tests which require specific roles
+does not apply here.
+
The procedure for doing this is very similar to with the locking accounts
provider just don't set the locking_credentials_provider to true and you
only should need a single pair of credentials.
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index d81d3bb5d..7ece127c2 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -156,6 +156,7 @@
# The endpoint type to use for the baremetal provisioning service
# (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# Timeout for Ironic node to completely provision (integer value)
@@ -341,6 +342,7 @@
#region =
# The endpoint type to use for the compute service. (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# Path to a private key file for SSH access to remote hosts (string
@@ -467,6 +469,7 @@
# The endpoint type to use for the data processing service. (string
# value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
@@ -550,6 +553,7 @@
#region = RegionOne
# The endpoint type to use for the identity service. (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# Username to use for Nova API requests. (string value)
@@ -631,6 +635,7 @@
#region =
# The endpoint type to use for the image service. (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# http accessible image (string value)
@@ -739,6 +744,7 @@
#region =
# The endpoint type to use for the network service. (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# The cidr block to allocate tenant ipv4 subnets from (string value)
@@ -781,6 +787,7 @@
# vnic_type to use when Launching instances with pre-configured ports.
# Supported ports are: ['normal','direct','macvtap'] (string value)
+# Allowed values: <None>, normal, direct, macvtap
#port_vnic_type = <None>
@@ -819,6 +826,7 @@
# The endpoint type to use for the object-store service. (string
# value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# Number of seconds to time on waiting for a container to container
@@ -884,6 +892,7 @@
# The endpoint type to use for the orchestration service. (string
# value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# Time in seconds between build status checks. (integer value)
@@ -896,10 +905,6 @@
# the test workload (string value)
#instance_type = m1.micro
-# Name of heat-cfntools enabled image to use when launching test
-# instances. (string value)
-#image_ref = <None>
-
# Name of existing keypair to launch servers with. (string value)
#keypair_name = <None>
@@ -950,6 +955,7 @@
# DHCP client used by images to renew DCHP lease. If left empty,
# update operation will be skipped. Supported clients: "udhcpc",
# "dhclient" (string value)
+# Allowed values: udhcpc, dhclient
#dhcp_client = udhcpc
@@ -1049,6 +1055,7 @@
#catalog_type = metering
# The endpoint type to use for the telemetry service. (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# This variable is used as flag to enable notification tests (boolean
@@ -1078,6 +1085,7 @@
#region =
# The endpoint type to use for the volume service. (string value)
+# Allowed values: public, admin, internal, publicURL, adminURL, internalURL
#endpoint_type = publicURL
# Name of the backend1 (must be declared in cinder.conf) (string
diff --git a/requirements.txt b/requirements.txt
index 4690329aa..b14af9dff 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -24,4 +24,4 @@ six>=1.9.0
iso8601>=0.1.9
fixtures>=0.3.14
testscenarios>=0.4
-tempest-lib>=0.2.0
+tempest-lib>=0.3.0
diff --git a/tempest/api/baremetal/admin/base.py b/tempest/api/baremetal/admin/base.py
index c93dfb8bc..2834b2bb5 100644
--- a/tempest/api/baremetal/admin/base.py
+++ b/tempest/api/baremetal/admin/base.py
@@ -11,10 +11,11 @@
# under the License.
import functools
+
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/baremetal/admin/test_chassis.py b/tempest/api/baremetal/admin/test_chassis.py
index da32f7105..ef2113ce2 100644
--- a/tempest/api/baremetal/admin/test_chassis.py
+++ b/tempest/api/baremetal/admin/test_chassis.py
@@ -11,10 +11,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.baremetal.admin import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/baremetal/admin/test_nodes.py b/tempest/api/baremetal/admin/test_nodes.py
index f031614f6..fb5590e59 100644
--- a/tempest/api/baremetal/admin/test_nodes.py
+++ b/tempest/api/baremetal/admin/test_nodes.py
@@ -11,10 +11,10 @@
# under the License.
import six
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.baremetal.admin import base
-from tempest.common.utils import data_utils
from tempest.common import waiters
from tempest import test
diff --git a/tempest/api/baremetal/admin/test_ports.py b/tempest/api/baremetal/admin/test_ports.py
index bbd280142..f6615fe9d 100644
--- a/tempest/api/baremetal/admin/test_ports.py
+++ b/tempest/api/baremetal/admin/test_ports.py
@@ -10,11 +10,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
from tempest.api.baremetal.admin import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/baremetal/admin/test_ports_negative.py b/tempest/api/baremetal/admin/test_ports_negative.py
index 2e79883b5..9db77db07 100644
--- a/tempest/api/baremetal/admin/test_ports_negative.py
+++ b/tempest/api/baremetal/admin/test_ports_negative.py
@@ -10,10 +10,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.baremetal.admin import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/compute/admin/test_agents.py b/tempest/api/compute/admin/test_agents.py
index 2bd15acc1..f801f8a17 100644
--- a/tempest/api/compute/admin/test_agents.py
+++ b/tempest/api/compute/admin/test_agents.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest.openstack.common import log
from tempest import test
@@ -28,8 +28,8 @@ class AgentsAdminTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(AgentsAdminTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(AgentsAdminTestJSON, cls).setup_clients()
cls.client = cls.os_adm.agents_client
def setUp(self):
diff --git a/tempest/api/compute/admin/test_aggregates.py b/tempest/api/compute/admin/test_aggregates.py
index e3b01517a..b5e969eaf 100644
--- a/tempest/api/compute/admin/test_aggregates.py
+++ b/tempest/api/compute/admin/test_aggregates.py
@@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
from tempest.common import tempest_fixtures as fixtures
-from tempest.common.utils import data_utils
from tempest import test
@@ -30,9 +30,13 @@ class AggregatesAdminTestJSON(base.BaseV2ComputeAdminTest):
_host_key = 'OS-EXT-SRV-ATTR:host'
@classmethod
+ def setup_clients(cls):
+ super(AggregatesAdminTestJSON, cls).setup_clients()
+ cls.client = cls.os_adm.aggregates_client
+
+ @classmethod
def resource_setup(cls):
super(AggregatesAdminTestJSON, cls).resource_setup()
- cls.client = cls.os_adm.aggregates_client
cls.aggregate_name_prefix = 'test_aggregate_'
cls.az_name_prefix = 'test_az_'
diff --git a/tempest/api/compute/admin/test_aggregates_negative.py b/tempest/api/compute/admin/test_aggregates_negative.py
index 02e2b0b78..07c8c4e8a 100644
--- a/tempest/api/compute/admin/test_aggregates_negative.py
+++ b/tempest/api/compute/admin/test_aggregates_negative.py
@@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
from tempest.common import tempest_fixtures as fixtures
-from tempest.common.utils import data_utils
from tempest import test
@@ -28,10 +28,14 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(AggregatesAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(AggregatesAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.aggregates_client
cls.user_client = cls.aggregates_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(AggregatesAdminNegativeTestJSON, cls).resource_setup()
cls.aggregate_name_prefix = 'test_aggregate_'
cls.az_name_prefix = 'test_az_'
@@ -45,7 +49,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_aggregate_create_as_user(self):
# Regular user is not allowed to create an aggregate.
aggregate_name = data_utils.rand_name(self.aggregate_name_prefix)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.create_aggregate,
name=aggregate_name)
@@ -86,7 +90,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
aggregate = self.client.create_aggregate(name=aggregate_name)
self.addCleanup(self.client.delete_aggregate, aggregate['id'])
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.delete_aggregate,
aggregate['id'])
@@ -94,7 +98,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
@test.idempotent_id('b7d475a6-5dcd-4ff4-b70a-cd9de66a6672')
def test_aggregate_list_as_user(self):
# Regular user is not allowed to list aggregates.
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.list_aggregates)
@test.attr(type=['negative', 'gate'])
@@ -105,7 +109,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
aggregate = self.client.create_aggregate(name=aggregate_name)
self.addCleanup(self.client.delete_aggregate, aggregate['id'])
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.get_aggregate,
aggregate['id'])
@@ -149,7 +153,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
aggregate = self.client.create_aggregate(name=aggregate_name)
self.addCleanup(self.client.delete_aggregate, aggregate['id'])
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.add_host,
aggregate['id'], self.host)
@@ -178,7 +182,7 @@ class AggregatesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.client.add_host(aggregate['id'], self.host)
self.addCleanup(self.client.remove_host, aggregate['id'], self.host)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.remove_host,
aggregate['id'], self.host)
diff --git a/tempest/api/compute/admin/test_availability_zone.py b/tempest/api/compute/admin/test_availability_zone.py
index 9d24b00f8..eadc15a8c 100644
--- a/tempest/api/compute/admin/test_availability_zone.py
+++ b/tempest/api/compute/admin/test_availability_zone.py
@@ -24,8 +24,8 @@ class AZAdminV2TestJSON(base.BaseComputeAdminTest):
_api_version = 2
@classmethod
- def resource_setup(cls):
- super(AZAdminV2TestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(AZAdminV2TestJSON, cls).setup_clients()
cls.client = cls.availability_zone_admin_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/admin/test_availability_zone_negative.py b/tempest/api/compute/admin/test_availability_zone_negative.py
index caecddcb2..d6e577e6b 100644
--- a/tempest/api/compute/admin/test_availability_zone_negative.py
+++ b/tempest/api/compute/admin/test_availability_zone_negative.py
@@ -25,8 +25,8 @@ class AZAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(AZAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(AZAdminNegativeTestJSON, cls).setup_clients()
cls.non_adm_client = cls.availability_zone_client
@test.attr(type=['negative', 'gate'])
@@ -35,5 +35,5 @@ class AZAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
# List of availability zones and available services with
# non-administrator user
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_availability_zone_list_detail)
diff --git a/tempest/api/compute/admin/test_fixed_ips.py b/tempest/api/compute/admin/test_fixed_ips.py
index 820b9b008..acfd659fb 100644
--- a/tempest/api/compute/admin/test_fixed_ips.py
+++ b/tempest/api/compute/admin/test_fixed_ips.py
@@ -23,12 +23,20 @@ CONF = config.CONF
class FixedIPsTestJson(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(FixedIPsTestJson, cls).resource_setup()
+ def skip_checks(cls):
+ super(FixedIPsTestJson, cls).skip_checks()
if CONF.service_available.neutron:
msg = ("%s skipped as neutron is available" % cls.__name__)
raise cls.skipException(msg)
+
+ @classmethod
+ def setup_clients(cls):
+ super(FixedIPsTestJson, cls).setup_clients()
cls.client = cls.os_adm.fixed_ips_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FixedIPsTestJson, cls).resource_setup()
server = cls.create_test_server(wait_until='ACTIVE')
server = cls.servers_client.get_server(server['id'])
for ip_set in server['addresses']:
diff --git a/tempest/api/compute/admin/test_fixed_ips_negative.py b/tempest/api/compute/admin/test_fixed_ips_negative.py
index df3c39009..052ed71ff 100644
--- a/tempest/api/compute/admin/test_fixed_ips_negative.py
+++ b/tempest/api/compute/admin/test_fixed_ips_negative.py
@@ -24,13 +24,21 @@ CONF = config.CONF
class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(FixedIPsNegativeTestJson, cls).resource_setup()
+ def skip_checks(cls):
+ super(FixedIPsNegativeTestJson, cls).skip_checks()
if CONF.service_available.neutron:
msg = ("%s skipped as neutron is available" % cls.__name__)
raise cls.skipException(msg)
+
+ @classmethod
+ def setup_clients(cls):
+ super(FixedIPsNegativeTestJson, cls).setup_clients()
cls.client = cls.os_adm.fixed_ips_client
cls.non_admin_client = cls.fixed_ips_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FixedIPsNegativeTestJson, cls).resource_setup()
server = cls.create_test_server(wait_until='ACTIVE')
server = cls.servers_client.get_server(server['id'])
for ip_set in server['addresses']:
@@ -45,7 +53,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@test.idempotent_id('9f17f47d-daad-4adc-986e-12370c93e407')
@test.services('network')
def test_list_fixed_ip_details_with_non_admin_user(self):
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.get_fixed_ip_details, self.ip)
@test.attr(type=['negative', 'gate'])
@@ -53,7 +61,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@test.services('network')
def test_set_reserve_with_non_admin_user(self):
body = {"reserve": "None"}
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.reserve_fixed_ip,
self.ip, body)
@@ -62,7 +70,7 @@ class FixedIPsNegativeTestJson(base.BaseV2ComputeAdminTest):
@test.services('network')
def test_set_unreserve_with_non_admin_user(self):
body = {"unreserve": "None"}
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.reserve_fixed_ip,
self.ip, body)
diff --git a/tempest/api/compute/admin/test_flavors.py b/tempest/api/compute/admin/test_flavors.py
index cd3a4f1bb..df4624c73 100644
--- a/tempest/api/compute/admin/test_flavors.py
+++ b/tempest/api/compute/admin/test_flavors.py
@@ -13,11 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import uuid
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -28,14 +29,22 @@ class FlavorsAdminTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(FlavorsAdminTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(FlavorsAdminTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg)
+ @classmethod
+ def setup_clients(cls):
+ super(FlavorsAdminTestJSON, cls).setup_clients()
cls.client = cls.os_adm.flavors_client
cls.user_client = cls.os.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorsAdminTestJSON, cls).resource_setup()
+
cls.flavor_name_prefix = 'test_flavor_'
cls.ram = 512
cls.vcpus = 1
diff --git a/tempest/api/compute/admin/test_flavors_access.py b/tempest/api/compute/admin/test_flavors_access.py
index aaa96ac80..b7edcab75 100644
--- a/tempest/api/compute/admin/test_flavors_access.py
+++ b/tempest/api/compute/admin/test_flavors_access.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -26,14 +27,21 @@ class FlavorsAccessTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(FlavorsAccessTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(FlavorsAccessTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg)
- # Compute admin flavor client
+ @classmethod
+ def setup_clients(cls):
+ super(FlavorsAccessTestJSON, cls).setup_clients()
cls.client = cls.os_adm.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorsAccessTestJSON, cls).resource_setup()
+
# Non admin tenant ID
cls.tenant_id = cls.flavors_client.tenant_id
# Compute admin tenant ID
diff --git a/tempest/api/compute/admin/test_flavors_access_negative.py b/tempest/api/compute/admin/test_flavors_access_negative.py
index af53985c5..97930c1c9 100644
--- a/tempest/api/compute/admin/test_flavors_access_negative.py
+++ b/tempest/api/compute/admin/test_flavors_access_negative.py
@@ -13,11 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import uuid
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -29,13 +30,21 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(FlavorsAccessNegativeTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(FlavorsAccessNegativeTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg)
+ @classmethod
+ def setup_clients(cls):
+ super(FlavorsAccessNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorsAccessNegativeTestJSON, cls).resource_setup()
+
cls.tenant_id = cls.flavors_client.tenant_id
cls.flavor_name_prefix = 'test_flavor_access_'
cls.ram = 512
@@ -70,7 +79,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
new_flavor_id,
is_public='False')
self.addCleanup(self.client.delete_flavor, new_flavor['id'])
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.flavors_client.add_flavor_access,
new_flavor['id'],
self.tenant_id)
@@ -91,7 +100,7 @@ class FlavorsAccessNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.client.add_flavor_access(new_flavor['id'], self.tenant_id)
self.addCleanup(self.client.remove_flavor_access,
new_flavor['id'], self.tenant_id)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.flavors_client.remove_flavor_access,
new_flavor['id'],
self.tenant_id)
diff --git a/tempest/api/compute/admin/test_flavors_extra_specs.py b/tempest/api/compute/admin/test_flavors_extra_specs.py
index 5847a6466..b83a06393 100644
--- a/tempest/api/compute/admin/test_flavors_extra_specs.py
+++ b/tempest/api/compute/admin/test_flavors_extra_specs.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -27,13 +28,20 @@ class FlavorsExtraSpecsTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(FlavorsExtraSpecsTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(FlavorsExtraSpecsTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg)
+ @classmethod
+ def setup_clients(cls):
+ super(FlavorsExtraSpecsTestJSON, cls).setup_clients()
cls.client = cls.os_adm.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorsExtraSpecsTestJSON, cls).resource_setup()
flavor_name = data_utils.rand_name('test_flavor')
ram = 512
vcpus = 1
diff --git a/tempest/api/compute/admin/test_flavors_extra_specs_negative.py b/tempest/api/compute/admin/test_flavors_extra_specs_negative.py
index 979fdd34c..2236a8a2c 100644
--- a/tempest/api/compute/admin/test_flavors_extra_specs_negative.py
+++ b/tempest/api/compute/admin/test_flavors_extra_specs_negative.py
@@ -14,10 +14,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -29,13 +29,21 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(FlavorsExtraSpecsNegativeTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(FlavorsExtraSpecsNegativeTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg)
+ @classmethod
+ def setup_clients(cls):
+ super(FlavorsExtraSpecsNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorsExtraSpecsNegativeTestJSON, cls).resource_setup()
+
flavor_name = data_utils.rand_name('test_flavor')
ram = 512
vcpus = 1
@@ -63,7 +71,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_flavor_non_admin_set_keys(self):
# Test to SET flavor extra spec as a user without admin privileges.
specs = {"key1": "value1", "key2": "value2"}
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.flavors_client.set_flavor_extra_spec,
self.flavor['id'],
specs)
@@ -76,7 +84,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
body = self.client.set_flavor_extra_spec(
self.flavor['id'], specs)
self.assertEqual(body['key1'], 'value1')
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.flavors_client.
update_flavor_extra_spec,
self.flavor['id'],
@@ -89,7 +97,7 @@ class FlavorsExtraSpecsNegativeTestJSON(base.BaseV2ComputeAdminTest):
specs = {"key1": "value1", "key2": "value2"}
self.client.set_flavor_extra_spec(self.flavor['id'], specs)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.flavors_client.unset_flavor_extra_spec,
self.flavor['id'],
'key1')
diff --git a/tempest/api/compute/admin/test_flavors_negative.py b/tempest/api/compute/admin/test_flavors_negative.py
index 042c270ef..c7eb9ae40 100644
--- a/tempest/api/compute/admin/test_flavors_negative.py
+++ b/tempest/api/compute/admin/test_flavors_negative.py
@@ -15,11 +15,11 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
from tempest.api_schema.request.compute.v2 import flavors
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -36,14 +36,21 @@ class FlavorsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(FlavorsAdminNegativeTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(FlavorsAdminNegativeTestJSON, cls).skip_checks()
if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
msg = "OS-FLV-EXT-DATA extension not enabled."
raise cls.skipException(msg)
+ @classmethod
+ def setup_clients(cls):
+ super(FlavorsAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.flavors_client
cls.user_client = cls.os.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(FlavorsAdminNegativeTestJSON, cls).resource_setup()
cls.flavor_name_prefix = 'test_flavor_'
cls.ram = 512
cls.vcpus = 1
@@ -91,7 +98,7 @@ class FlavorsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
flavor_name = data_utils.rand_name(self.flavor_name_prefix)
new_flavor_id = str(uuid.uuid4())
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.create_flavor,
flavor_name, self.ram, self.vcpus, self.disk,
new_flavor_id, ephemeral=self.ephemeral,
@@ -101,7 +108,7 @@ class FlavorsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
@test.idempotent_id('a9a6dc02-8c14-4e05-a1ca-3468d4214882')
def test_delete_flavor_as_user(self):
# only admin user can delete a flavor
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.user_client.delete_flavor,
self.flavor_ref_alt)
diff --git a/tempest/api/compute/admin/test_floating_ips_bulk.py b/tempest/api/compute/admin/test_floating_ips_bulk.py
index 7ca081aa0..3c5f5071c 100644
--- a/tempest/api/compute/admin/test_floating_ips_bulk.py
+++ b/tempest/api/compute/admin/test_floating_ips_bulk.py
@@ -31,9 +31,13 @@ class FloatingIPsBulkAdminTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
+ def setup_clients(cls):
+ super(FloatingIPsBulkAdminTestJSON, cls).setup_clients()
+ cls.client = cls.os_adm.floating_ips_client
+
+ @classmethod
def resource_setup(cls):
super(FloatingIPsBulkAdminTestJSON, cls).resource_setup()
- cls.client = cls.os_adm.floating_ips_client
cls.ip_range = CONF.compute.floating_ip_range
cls.verify_unallocated_floating_ip_range(cls.ip_range)
diff --git a/tempest/api/compute/admin/test_hosts.py b/tempest/api/compute/admin/test_hosts.py
index bef5d1fed..e525358e5 100644
--- a/tempest/api/compute/admin/test_hosts.py
+++ b/tempest/api/compute/admin/test_hosts.py
@@ -24,8 +24,8 @@ class HostsAdminTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(HostsAdminTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(HostsAdminTestJSON, cls).setup_clients()
cls.client = cls.os_adm.hosts_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/admin/test_hosts_negative.py b/tempest/api/compute/admin/test_hosts_negative.py
index 3c070ce26..95be59efc 100644
--- a/tempest/api/compute/admin/test_hosts_negative.py
+++ b/tempest/api/compute/admin/test_hosts_negative.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -26,8 +26,8 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(HostsAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(HostsAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.hosts_client
cls.non_admin_client = cls.os.hosts_client
@@ -40,7 +40,7 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
@test.attr(type=['negative', 'gate'])
@test.idempotent_id('dd032027-0210-4d9c-860e-69b1b8deed5f')
def test_list_hosts_with_non_admin_user(self):
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.list_hosts)
@test.attr(type=['negative', 'gate'])
@@ -55,7 +55,7 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_show_host_detail_with_non_admin_user(self):
hostname = self._get_host_name()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.show_host_detail,
hostname)
@@ -64,7 +64,7 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_update_host_with_non_admin_user(self):
hostname = self._get_host_name()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.update_host,
hostname,
status='enable',
@@ -142,7 +142,7 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_startup_host_with_non_admin_user(self):
hostname = self._get_host_name()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.startup_host,
hostname)
@@ -160,7 +160,7 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_shutdown_host_with_non_admin_user(self):
hostname = self._get_host_name()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.shutdown_host,
hostname)
@@ -178,6 +178,6 @@ class HostsAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_reboot_host_with_non_admin_user(self):
hostname = self._get_host_name()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.reboot_host,
hostname)
diff --git a/tempest/api/compute/admin/test_hypervisor.py b/tempest/api/compute/admin/test_hypervisor.py
index c65bded40..5e83e9545 100644
--- a/tempest/api/compute/admin/test_hypervisor.py
+++ b/tempest/api/compute/admin/test_hypervisor.py
@@ -24,8 +24,8 @@ class HypervisorAdminTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(HypervisorAdminTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(HypervisorAdminTestJSON, cls).setup_clients()
cls.client = cls.os_adm.hypervisor_client
def _list_hypervisors(self):
diff --git a/tempest/api/compute/admin/test_hypervisor_negative.py b/tempest/api/compute/admin/test_hypervisor_negative.py
index 556424a41..c7de6be91 100644
--- a/tempest/api/compute/admin/test_hypervisor_negative.py
+++ b/tempest/api/compute/admin/test_hypervisor_negative.py
@@ -13,11 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import uuid
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -28,8 +29,8 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(HypervisorAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(HypervisorAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.hypervisor_client
cls.non_adm_client = cls.hypervisor_client
@@ -55,7 +56,7 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertTrue(len(hypers) > 0)
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_hypervisor_show_details,
hypers[0]['id'])
@@ -66,7 +67,7 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertTrue(len(hypers) > 0)
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_hypervisor_servers,
hypers[0]['id'])
@@ -84,7 +85,7 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
@test.idempotent_id('e2b061bb-13f9-40d8-9d6e-d5bf17595849')
def test_get_hypervisor_stats_with_non_admin_user(self):
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_hypervisor_stats)
@test.attr(type=['negative', 'gate'])
@@ -104,7 +105,7 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertTrue(len(hypers) > 0)
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_hypervisor_uptime,
hypers[0]['id'])
@@ -113,7 +114,7 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_get_hypervisor_list_with_non_admin_user(self):
# List of hypervisor and available services with non admin user
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_hypervisor_list)
@test.attr(type=['negative', 'gate'])
@@ -121,7 +122,7 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
def test_get_hypervisor_list_details_with_non_admin_user(self):
# List of hypervisor details and available services with non admin user
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.get_hypervisor_list_details)
@test.attr(type=['negative', 'gate'])
@@ -141,6 +142,6 @@ class HypervisorAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.assertTrue(len(hypers) > 0)
self.assertRaises(
- lib_exc.Unauthorized,
+ lib_exc.Forbidden,
self.non_adm_client.search_hypervisor,
hypers[0]['hypervisor_hostname'])
diff --git a/tempest/api/compute/admin/test_instance_usage_audit_log.py b/tempest/api/compute/admin/test_instance_usage_audit_log.py
index 1a86b2d7c..656581003 100644
--- a/tempest/api/compute/admin/test_instance_usage_audit_log.py
+++ b/tempest/api/compute/admin/test_instance_usage_audit_log.py
@@ -23,8 +23,8 @@ from tempest import test
class InstanceUsageAuditLogTestJSON(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(InstanceUsageAuditLogTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(InstanceUsageAuditLogTestJSON, cls).setup_clients()
cls.adm_client = cls.os_adm.instance_usages_audit_log_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/admin/test_instance_usage_audit_log_negative.py b/tempest/api/compute/admin/test_instance_usage_audit_log_negative.py
index 6b5a82f87..e9f337139 100644
--- a/tempest/api/compute/admin/test_instance_usage_audit_log_negative.py
+++ b/tempest/api/compute/admin/test_instance_usage_audit_log_negative.py
@@ -25,19 +25,19 @@ from tempest import test
class InstanceUsageAuditLogNegativeTestJSON(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(InstanceUsageAuditLogNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(InstanceUsageAuditLogNegativeTestJSON, cls).setup_clients()
cls.adm_client = cls.os_adm.instance_usages_audit_log_client
@test.attr(type=['negative', 'gate'])
@test.idempotent_id('a9d33178-d2c9-4131-ad3b-f4ca8d0308a2')
def test_instance_usage_audit_logs_with_nonadmin_user(self):
# the instance_usage_audit_logs API just can be accessed by admin user
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.instance_usages_audit_log_client.
list_instance_usage_audit_logs)
now = datetime.datetime.now()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.instance_usages_audit_log_client.
get_instance_usage_audit_log,
urllib.quote(now.strftime("%Y-%m-%d %H:%M:%S")))
diff --git a/tempest/api/compute/admin/test_migrations.py b/tempest/api/compute/admin/test_migrations.py
index 67e4fe382..3c31e77c7 100644
--- a/tempest/api/compute/admin/test_migrations.py
+++ b/tempest/api/compute/admin/test_migrations.py
@@ -24,8 +24,8 @@ CONF = config.CONF
class MigrationsAdminTest(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(MigrationsAdminTest, cls).resource_setup()
+ def setup_clients(cls):
+ super(MigrationsAdminTest, cls).setup_clients()
cls.client = cls.os_adm.migrations_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/admin/test_networks.py b/tempest/api/compute/admin/test_networks.py
index fa72c0155..c20d4837a 100644
--- a/tempest/api/compute/admin/test_networks.py
+++ b/tempest/api/compute/admin/test_networks.py
@@ -30,8 +30,8 @@ class NetworksTest(base.BaseComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(NetworksTest, cls).resource_setup()
+ def setup_clients(cls):
+ super(NetworksTest, cls).setup_clients()
cls.client = cls.os_adm.networks_client
@test.idempotent_id('d206d211-8912-486f-86e2-a9d090d1f416')
diff --git a/tempest/api/compute/admin/test_quotas.py b/tempest/api/compute/admin/test_quotas.py
index 35e682e52..773f23e29 100644
--- a/tempest/api/compute/admin/test_quotas.py
+++ b/tempest/api/compute/admin/test_quotas.py
@@ -14,11 +14,11 @@
# under the License.
import six
+from tempest_lib.common.utils import data_utils
from testtools import matchers
from tempest.api.compute import base
from tempest.common import tempest_fixtures as fixtures
-from tempest.common.utils import data_utils
from tempest.openstack.common import log as logging
from tempest import test
@@ -34,9 +34,13 @@ class QuotasAdminTestJSON(base.BaseV2ComputeAdminTest):
super(QuotasAdminTestJSON, self).setUp()
@classmethod
+ def setup_clients(cls):
+ super(QuotasAdminTestJSON, cls).setup_clients()
+ cls.adm_client = cls.os_adm.quotas_client
+
+ @classmethod
def resource_setup(cls):
super(QuotasAdminTestJSON, cls).resource_setup()
- cls.adm_client = cls.os_adm.quotas_client
# NOTE(afazekas): these test cases should always create and use a new
# tenant most of them should be skipped if we can't do that
diff --git a/tempest/api/compute/admin/test_quotas_negative.py b/tempest/api/compute/admin/test_quotas_negative.py
index 73428dfb7..caa329ed0 100644
--- a/tempest/api/compute/admin/test_quotas_negative.py
+++ b/tempest/api/compute/admin/test_quotas_negative.py
@@ -12,11 +12,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -27,12 +27,15 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
force_tenant_isolation = True
@classmethod
- def resource_setup(cls):
- super(QuotasAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(QuotasAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os.quotas_client
cls.adm_client = cls.os_adm.quotas_client
cls.sg_client = cls.security_groups_client
+ @classmethod
+ def resource_setup(cls):
+ super(QuotasAdminNegativeTestJSON, cls).resource_setup()
# NOTE(afazekas): these test cases should always create and use a new
# tenant most of them should be skipped if we can't do that
cls.demo_tenant_id = cls.client.tenant_id
@@ -40,7 +43,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
@test.attr(type=['negative', 'gate'])
@test.idempotent_id('733abfe8-166e-47bb-8363-23dbd7ff3476')
def test_update_quota_normal_user(self):
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.client.update_quota_set,
self.demo_tenant_id,
ram=0)
@@ -61,7 +64,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.addCleanup(self.adm_client.update_quota_set, self.demo_tenant_id,
cores=default_vcpu_quota)
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.create_test_server)
@test.attr(type=['negative', 'gate'])
@@ -78,7 +81,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
self.addCleanup(self.adm_client.update_quota_set, self.demo_tenant_id,
ram=default_mem_quota)
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.create_test_server)
@test.attr(type=['negative', 'gate'])
@@ -94,7 +97,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
instances=instances_quota)
self.addCleanup(self.adm_client.update_quota_set, self.demo_tenant_id,
instances=default_instances_quota)
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.create_test_server)
@decorators.skip_because(bug="1186354",
@@ -121,7 +124,7 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
# Check we cannot create anymore
# A 403 Forbidden or 413 Overlimit (old behaviour) exception
# will be raised when out of quota
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.sg_client.create_security_group,
"sg-overlimit", "sg-desc")
@@ -161,6 +164,6 @@ class QuotasAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
# Check we cannot create SG rule anymore
# A 403 Forbidden or 413 Overlimit (old behaviour) exception
# will be raised when out of quota
- self.assertRaises((lib_exc.OverLimit, lib_exc.Unauthorized),
+ self.assertRaises((lib_exc.OverLimit, lib_exc.Forbidden),
self.sg_client.create_security_group_rule,
secgroup_id, ip_protocol, 1025, 1025)
diff --git a/tempest/api/compute/admin/test_security_groups.py b/tempest/api/compute/admin/test_security_groups.py
index 19f5b8c90..578f73bff 100644
--- a/tempest/api/compute/admin/test_security_groups.py
+++ b/tempest/api/compute/admin/test_security_groups.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
import testtools
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -26,8 +26,8 @@ CONF = config.CONF
class SecurityGroupsTestAdminJSON(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(SecurityGroupsTestAdminJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(SecurityGroupsTestAdminJSON, cls).setup_clients()
cls.adm_client = cls.os_adm.security_groups_client
cls.client = cls.security_groups_client
diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py
index adeb64b72..c872184d6 100644
--- a/tempest/api/compute/admin/test_servers.py
+++ b/tempest/api/compute/admin/test_servers.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -28,12 +28,16 @@ class ServersAdminTestJSON(base.BaseV2ComputeAdminTest):
_host_key = 'OS-EXT-SRV-ATTR:host'
@classmethod
- def resource_setup(cls):
- super(ServersAdminTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServersAdminTestJSON, cls).setup_clients()
cls.client = cls.os_adm.servers_client
cls.non_admin_client = cls.servers_client
cls.flavors_client = cls.os_adm.flavors_client
+ @classmethod
+ def resource_setup(cls):
+ super(ServersAdminTestJSON, cls).resource_setup()
+
cls.s1_name = data_utils.rand_name('server')
server = cls.create_test_server(name=cls.s1_name,
wait_until='ACTIVE')
diff --git a/tempest/api/compute/admin/test_servers_negative.py b/tempest/api/compute/admin/test_servers_negative.py
index cafbf8178..edcb05259 100644
--- a/tempest/api/compute/admin/test_servers_negative.py
+++ b/tempest/api/compute/admin/test_servers_negative.py
@@ -14,12 +14,12 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
import testtools
from tempest.api.compute import base
from tempest.common import tempest_fixtures as fixtures
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -33,11 +33,15 @@ class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(ServersAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServersAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.servers_client
cls.non_adm_client = cls.servers_client
cls.flavors_client = cls.os_adm.flavors_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ServersAdminNegativeTestJSON, cls).resource_setup()
cls.tenant_id = cls.client.tenant_id
cls.s1_name = data_utils.rand_name('server')
@@ -72,7 +76,7 @@ class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram, vcpus, disk,
flavor_id)
self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.client.resize,
self.servers[0]['id'],
flavor_ref['id'])
@@ -94,7 +98,7 @@ class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
ram, vcpus, disk,
flavor_id)
self.addCleanup(self.flavors_client.delete_flavor, flavor_id)
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.client.resize,
self.servers[0]['id'],
flavor_ref['id'])
@@ -123,7 +127,7 @@ class ServersAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
@test.idempotent_id('e84e2234-60d2-42fa-8b30-e2d3049724ac')
def test_get_server_diagnostics_by_non_admin(self):
# Non-admin user can not view server diagnostics according to policy
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_adm_client.get_server_diagnostics,
self.s1_id)
diff --git a/tempest/api/compute/admin/test_services.py b/tempest/api/compute/admin/test_services.py
index a6f79aaa9..932a74e7d 100644
--- a/tempest/api/compute/admin/test_services.py
+++ b/tempest/api/compute/admin/test_services.py
@@ -25,8 +25,8 @@ class ServicesAdminTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(ServicesAdminTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServicesAdminTestJSON, cls).setup_clients()
cls.client = cls.os_adm.services_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/admin/test_services_negative.py b/tempest/api/compute/admin/test_services_negative.py
index b8974ca8b..2d4ec5131 100644
--- a/tempest/api/compute/admin/test_services_negative.py
+++ b/tempest/api/compute/admin/test_services_negative.py
@@ -25,15 +25,15 @@ class ServicesAdminNegativeTestJSON(base.BaseV2ComputeAdminTest):
"""
@classmethod
- def resource_setup(cls):
- super(ServicesAdminNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServicesAdminNegativeTestJSON, cls).setup_clients()
cls.client = cls.os_adm.services_client
cls.non_admin_client = cls.services_client
@test.attr(type=['negative', 'gate'])
@test.idempotent_id('1126d1f8-266e-485f-a687-adc547492646')
def test_list_services_with_non_admin_user(self):
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.list_services)
@test.attr(type=['negative', 'gate'])
diff --git a/tempest/api/compute/admin/test_simple_tenant_usage.py b/tempest/api/compute/admin/test_simple_tenant_usage.py
index be62b1d6e..cf7b6727e 100644
--- a/tempest/api/compute/admin/test_simple_tenant_usage.py
+++ b/tempest/api/compute/admin/test_simple_tenant_usage.py
@@ -23,10 +23,14 @@ from tempest import test
class TenantUsagesTestJSON(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(TenantUsagesTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(TenantUsagesTestJSON, cls).setup_clients()
cls.adm_client = cls.os_adm.tenant_usages_client
cls.client = cls.os.tenant_usages_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(TenantUsagesTestJSON, cls).resource_setup()
cls.tenant_id = cls.client.tenant_id
# Create a server in the demo tenant
diff --git a/tempest/api/compute/admin/test_simple_tenant_usage_negative.py b/tempest/api/compute/admin/test_simple_tenant_usage_negative.py
index 8801e85a6..a83d7273d 100644
--- a/tempest/api/compute/admin/test_simple_tenant_usage_negative.py
+++ b/tempest/api/compute/admin/test_simple_tenant_usage_negative.py
@@ -23,11 +23,14 @@ from tempest import test
class TenantUsagesNegativeTestJSON(base.BaseV2ComputeAdminTest):
@classmethod
- def resource_setup(cls):
- super(TenantUsagesNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(TenantUsagesNegativeTestJSON, cls).setup_clients()
cls.adm_client = cls.os_adm.tenant_usages_client
cls.client = cls.os.tenant_usages_client
- cls.identity_client = cls._get_identity_admin_client()
+
+ @classmethod
+ def resource_setup(cls):
+ super(TenantUsagesNegativeTestJSON, cls).resource_setup()
now = datetime.datetime.now()
cls.start = cls._parse_strtime(now - datetime.timedelta(days=1))
cls.end = cls._parse_strtime(now + datetime.timedelta(days=1))
@@ -64,5 +67,5 @@ class TenantUsagesNegativeTestJSON(base.BaseV2ComputeAdminTest):
params = {'start': self.start,
'end': self.end,
'detailed': int(bool(True))}
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.client.list_tenant_usages, params)
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index 89818b11c..18401f01d 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -13,12 +13,13 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import time
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest import clients
from tempest.common import credentials
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import excutils
diff --git a/tempest/api/compute/flavors/test_flavors.py b/tempest/api/compute/flavors/test_flavors.py
index b9056c7fc..8a662828e 100644
--- a/tempest/api/compute/flavors/test_flavors.py
+++ b/tempest/api/compute/flavors/test_flavors.py
@@ -24,8 +24,8 @@ class FlavorsV2TestJSON(base.BaseComputeTest):
_min_ram = 'minRam'
@classmethod
- def resource_setup(cls):
- super(FlavorsV2TestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(FlavorsV2TestJSON, cls).setup_clients()
cls.client = cls.flavors_client
@test.attr(type='smoke')
diff --git a/tempest/api/compute/floating_ips/test_floating_ips_actions.py b/tempest/api/compute/floating_ips/test_floating_ips_actions.py
index f65223ed8..097c37fd5 100644
--- a/tempest/api/compute/floating_ips/test_floating_ips_actions.py
+++ b/tempest/api/compute/floating_ips/test_floating_ips_actions.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute.floating_ips import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py b/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py
index 2c08ae70f..584b20297 100644
--- a/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py
+++ b/tempest/api/compute/floating_ips/test_floating_ips_actions_negative.py
@@ -15,10 +15,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute.floating_ips import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py b/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py
index 13d071945..f0ce6ded0 100644
--- a/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py
+++ b/tempest/api/compute/floating_ips/test_list_floating_ips_negative.py
@@ -15,10 +15,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/images/test_image_metadata.py b/tempest/api/compute/images/test_image_metadata.py
index 8193a55f2..ab21ad7e2 100644
--- a/tempest/api/compute/images/test_image_metadata.py
+++ b/tempest/api/compute/images/test_image_metadata.py
@@ -15,8 +15,9 @@
import StringIO
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -26,14 +27,21 @@ CONF = config.CONF
class ImagesMetadataTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ImagesMetadataTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ImagesMetadataTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
+ @classmethod
+ def setup_clients(cls):
+ super(ImagesMetadataTestJSON, cls).setup_clients()
cls.glance_client = cls.os.image_client
cls.client = cls.images_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ImagesMetadataTestJSON, cls).resource_setup()
cls.image_id = None
name = data_utils.rand_name('image')
diff --git a/tempest/api/compute/images/test_image_metadata_negative.py b/tempest/api/compute/images/test_image_metadata_negative.py
index d181ed9d8..3c2302a62 100644
--- a/tempest/api/compute/images/test_image_metadata_negative.py
+++ b/tempest/api/compute/images/test_image_metadata_negative.py
@@ -13,18 +13,18 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
class ImagesMetadataTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ImagesMetadataTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ImagesMetadataTestJSON, cls).setup_clients()
cls.client = cls.images_client
@test.attr(type=['negative', 'gate'])
diff --git a/tempest/api/compute/images/test_images.py b/tempest/api/compute/images/test_images.py
index 396d629c6..53d0e95da 100644
--- a/tempest/api/compute/images/test_images.py
+++ b/tempest/api/compute/images/test_images.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -23,17 +24,19 @@ CONF = config.CONF
class ImagesTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ImagesTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ImagesTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
-
if not CONF.compute_feature_enabled.snapshot:
skip_msg = ("%s skipped as instance snapshotting is not supported"
% cls.__name__)
raise cls.skipException(skip_msg)
+ @classmethod
+ def setup_clients(cls):
+ super(ImagesTestJSON, cls).setup_clients()
cls.client = cls.images_client
cls.servers_client = cls.servers_client
diff --git a/tempest/api/compute/images/test_images_negative.py b/tempest/api/compute/images/test_images_negative.py
index ee52f37a6..10e468e18 100644
--- a/tempest/api/compute/images/test_images_negative.py
+++ b/tempest/api/compute/images/test_images_negative.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -25,17 +25,19 @@ CONF = config.CONF
class ImagesNegativeTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ImagesNegativeTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ImagesNegativeTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
-
if not CONF.compute_feature_enabled.snapshot:
skip_msg = ("%s skipped as instance snapshotting is not supported"
% cls.__name__)
raise cls.skipException(skip_msg)
+ @classmethod
+ def setup_clients(cls):
+ super(ImagesNegativeTestJSON, cls).setup_clients()
cls.client = cls.images_client
cls.servers_client = cls.servers_client
diff --git a/tempest/api/compute/images/test_images_oneserver.py b/tempest/api/compute/images/test_images_oneserver.py
index abdeb18b9..b5edc1d32 100644
--- a/tempest/api/compute/images/test_images_oneserver.py
+++ b/tempest/api/compute/images/test_images_oneserver.py
@@ -13,9 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
@@ -47,9 +47,8 @@ class ImagesOneServerTestJSON(base.BaseV2ComputeTest):
self.__class__.server_id = self.rebuild_server(self.server_id)
@classmethod
- def resource_setup(cls):
- super(ImagesOneServerTestJSON, cls).resource_setup()
- cls.client = cls.images_client
+ def skip_checks(cls):
+ super(ImagesOneServerTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -59,6 +58,14 @@ class ImagesOneServerTestJSON(base.BaseV2ComputeTest):
% cls.__name__)
raise cls.skipException(skip_msg)
+ @classmethod
+ def setup_clients(cls):
+ super(ImagesOneServerTestJSON, cls).setup_clients()
+ cls.client = cls.images_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ImagesOneServerTestJSON, cls).resource_setup()
server = cls.create_test_server(wait_until='ACTIVE')
cls.server_id = server['id']
diff --git a/tempest/api/compute/images/test_images_oneserver_negative.py b/tempest/api/compute/images/test_images_oneserver_negative.py
index f6a4aecfe..f1de3204b 100644
--- a/tempest/api/compute/images/test_images_oneserver_negative.py
+++ b/tempest/api/compute/images/test_images_oneserver_negative.py
@@ -14,10 +14,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
@@ -56,9 +56,8 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
self.__class__.server_id = self.rebuild_server(self.server_id)
@classmethod
- def resource_setup(cls):
- super(ImagesOneServerNegativeTestJSON, cls).resource_setup()
- cls.client = cls.images_client
+ def skip_checks(cls):
+ super(ImagesOneServerNegativeTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
@@ -68,6 +67,14 @@ class ImagesOneServerNegativeTestJSON(base.BaseV2ComputeTest):
% cls.__name__)
raise cls.skipException(skip_msg)
+ @classmethod
+ def setup_clients(cls):
+ super(ImagesOneServerNegativeTestJSON, cls).setup_clients()
+ cls.client = cls.images_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ImagesOneServerNegativeTestJSON, cls).resource_setup()
server = cls.create_test_server(wait_until='ACTIVE')
cls.server_id = server['id']
diff --git a/tempest/api/compute/images/test_list_image_filters.py b/tempest/api/compute/images/test_list_image_filters.py
index 6176d850c..f5a98ce47 100644
--- a/tempest/api/compute/images/test_list_image_filters.py
+++ b/tempest/api/compute/images/test_list_image_filters.py
@@ -16,10 +16,10 @@
import StringIO
import time
+from tempest_lib.common.utils import data_utils
import testtools
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
@@ -32,14 +32,22 @@ LOG = logging.getLogger(__name__)
class ListImageFiltersTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ListImageFiltersTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ListImageFiltersTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
+
+ @classmethod
+ def setup_clients(cls):
+ super(ListImageFiltersTestJSON, cls).setup_clients()
cls.client = cls.images_client
cls.glance_client = cls.os.image_client
+ @classmethod
+ def resource_setup(cls):
+ super(ListImageFiltersTestJSON, cls).resource_setup()
+
def _create_image():
name = data_utils.rand_name('image')
body = cls.glance_client.create_image(name=name,
diff --git a/tempest/api/compute/images/test_list_image_filters_negative.py b/tempest/api/compute/images/test_list_image_filters_negative.py
index e5418ad4e..204bf3e09 100644
--- a/tempest/api/compute/images/test_list_image_filters_negative.py
+++ b/tempest/api/compute/images/test_list_image_filters_negative.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -25,11 +25,15 @@ CONF = config.CONF
class ListImageFiltersNegativeTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ListImageFiltersNegativeTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ListImageFiltersNegativeTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
+
+ @classmethod
+ def setup_clients(cls):
+ super(ListImageFiltersNegativeTestJSON, cls).setup_clients()
cls.client = cls.images_client
@test.attr(type=['negative', 'gate'])
diff --git a/tempest/api/compute/images/test_list_images.py b/tempest/api/compute/images/test_list_images.py
index 36451ecbd..7a7a36352 100644
--- a/tempest/api/compute/images/test_list_images.py
+++ b/tempest/api/compute/images/test_list_images.py
@@ -23,11 +23,15 @@ CONF = config.CONF
class ListImagesTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ListImagesTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ListImagesTestJSON, cls).skip_checks()
if not CONF.service_available.glance:
skip_msg = ("%s skipped as glance is not available" % cls.__name__)
raise cls.skipException(skip_msg)
+
+ @classmethod
+ def setup_clients(cls):
+ super(ListImagesTestJSON, cls).setup_clients()
cls.client = cls.images_client
@test.attr(type='smoke')
diff --git a/tempest/api/compute/keypairs/test_keypairs.py b/tempest/api/compute/keypairs/test_keypairs.py
index 972f0de71..6e59601b2 100644
--- a/tempest/api/compute/keypairs/test_keypairs.py
+++ b/tempest/api/compute/keypairs/test_keypairs.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -23,8 +24,8 @@ class KeyPairsV2TestJSON(base.BaseComputeTest):
_api_version = 2
@classmethod
- def resource_setup(cls):
- super(KeyPairsV2TestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(KeyPairsV2TestJSON, cls).setup_clients()
cls.client = cls.keypairs_client
def _delete_keypair(self, keypair_name):
diff --git a/tempest/api/compute/keypairs/test_keypairs_negative.py b/tempest/api/compute/keypairs/test_keypairs_negative.py
index e63f3c786..7a1a5e3f2 100644
--- a/tempest/api/compute/keypairs/test_keypairs_negative.py
+++ b/tempest/api/compute/keypairs/test_keypairs_negative.py
@@ -14,18 +14,18 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
class KeyPairsNegativeTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(KeyPairsNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(KeyPairsNegativeTestJSON, cls).setup_clients()
cls.client = cls.keypairs_client
def _create_keypair(self, keypair_name, pub_key=None):
diff --git a/tempest/api/compute/limits/test_absolute_limits_negative.py b/tempest/api/compute/limits/test_absolute_limits_negative.py
index 507f24eab..843dc1ac6 100644
--- a/tempest/api/compute/limits/test_absolute_limits_negative.py
+++ b/tempest/api/compute/limits/test_absolute_limits_negative.py
@@ -53,5 +53,5 @@ class AbsoluteLimitsNegativeTestJSON(base.BaseV2ComputeTest):
# A 403 Forbidden or 413 Overlimit (old behaviour) exception
# will be raised when out of quota
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.create_test_server, meta=meta_data)
diff --git a/tempest/api/compute/security_groups/test_security_group_rules_negative.py b/tempest/api/compute/security_groups/test_security_group_rules_negative.py
index f6a50ee43..9bf7ccbbc 100644
--- a/tempest/api/compute/security_groups/test_security_group_rules_negative.py
+++ b/tempest/api/compute/security_groups/test_security_group_rules_negative.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute.security_groups import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/security_groups/test_security_groups.py b/tempest/api/compute/security_groups/test_security_groups.py
index 5a11854d9..71ee16a32 100644
--- a/tempest/api/compute/security_groups/test_security_groups.py
+++ b/tempest/api/compute/security_groups/test_security_groups.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute.security_groups import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/compute/security_groups/test_security_groups_negative.py b/tempest/api/compute/security_groups/test_security_groups_negative.py
index 0127dc755..11ea30b27 100644
--- a/tempest/api/compute/security_groups/test_security_groups_negative.py
+++ b/tempest/api/compute/security_groups/test_security_groups_negative.py
@@ -13,12 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
import testtools
from tempest.api.compute.security_groups import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/servers/test_availability_zone.py b/tempest/api/compute/servers/test_availability_zone.py
index 5962042eb..f3650ac8b 100644
--- a/tempest/api/compute/servers/test_availability_zone.py
+++ b/tempest/api/compute/servers/test_availability_zone.py
@@ -24,8 +24,8 @@ class AZV2TestJSON(base.BaseComputeTest):
_api_version = 2
@classmethod
- def resource_setup(cls):
- super(AZV2TestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(AZV2TestJSON, cls).setup_clients()
cls.client = cls.availability_zone_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/servers/test_create_server.py b/tempest/api/compute/servers/test_create_server.py
index 14eb536c1..7f3716c7a 100644
--- a/tempest/api/compute/servers/test_create_server.py
+++ b/tempest/api/compute/servers/test_create_server.py
@@ -16,10 +16,10 @@
import base64
import netaddr
+from tempest_lib.common.utils import data_utils
import testtools
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest.common.utils.linux import remote_client
from tempest import config
from tempest import test
@@ -31,8 +31,18 @@ class ServersTestJSON(base.BaseV2ComputeTest):
disk_config = 'AUTO'
@classmethod
- def resource_setup(cls):
+ def setup_credentials(cls):
cls.prepare_instance_network()
+ super(ServersTestJSON, cls).setup_credentials()
+
+ @classmethod
+ def setup_clients(cls):
+ super(ServersTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
+ cls.network_client = cls.os.network_client
+
+ @classmethod
+ def resource_setup(cls):
super(ServersTestJSON, cls).resource_setup()
cls.meta = {'hello': 'world'}
cls.accessIPv4 = '1.1.1.1'
@@ -41,8 +51,6 @@ class ServersTestJSON(base.BaseV2ComputeTest):
file_contents = 'This is a test file.'
personality = [{'path': '/test.txt',
'contents': base64.b64encode(file_contents)}]
- cls.client = cls.servers_client
- cls.network_client = cls.os.network_client
disk_config = cls.disk_config
cls.server_initial = cls.create_test_server(name=cls.name,
meta=cls.meta,
@@ -194,9 +202,9 @@ class ServersWithSpecificFlavorTestJSON(base.BaseV2ComputeAdminTest):
disk_config = 'AUTO'
@classmethod
- def resource_setup(cls):
+ def setup_clients(cls):
cls.prepare_instance_network()
- super(ServersWithSpecificFlavorTestJSON, cls).resource_setup()
+ super(ServersWithSpecificFlavorTestJSON, cls).setup_clients()
cls.flavor_client = cls.os_adm.flavors_client
cls.client = cls.servers_client
@@ -277,8 +285,8 @@ class ServersTestManualDisk(ServersTestJSON):
disk_config = 'MANUAL'
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(ServersTestManualDisk, cls).skip_checks()
if not CONF.compute_feature_enabled.disk_config:
msg = "DiskConfig extension not enabled."
raise cls.skipException(msg)
- super(ServersTestManualDisk, cls).resource_setup()
diff --git a/tempest/api/compute/servers/test_delete_server.py b/tempest/api/compute/servers/test_delete_server.py
index 615595820..716026536 100644
--- a/tempest/api/compute/servers/test_delete_server.py
+++ b/tempest/api/compute/servers/test_delete_server.py
@@ -28,8 +28,8 @@ class DeleteServersTestJSON(base.BaseV2ComputeTest):
# for preventing "Quota exceeded for instances"
@classmethod
- def resource_setup(cls):
- super(DeleteServersTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(DeleteServersTestJSON, cls).setup_clients()
cls.client = cls.servers_client
@test.attr(type='gate')
@@ -141,8 +141,8 @@ class DeleteServersAdminTestJSON(base.BaseV2ComputeAdminTest):
# for preventing "Quota exceeded for instances".
@classmethod
- def resource_setup(cls):
- super(DeleteServersAdminTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(DeleteServersAdminTestJSON, cls).setup_clients()
cls.non_admin_client = cls.servers_client
cls.admin_client = cls.os_adm.servers_client
diff --git a/tempest/api/compute/servers/test_disk_config.py b/tempest/api/compute/servers/test_disk_config.py
index a15a9b7fc..c4cb2bd0d 100644
--- a/tempest/api/compute/servers/test_disk_config.py
+++ b/tempest/api/compute/servers/test_disk_config.py
@@ -25,12 +25,20 @@ CONF = config.CONF
class ServerDiskConfigTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(ServerDiskConfigTestJSON, cls).skip_checks()
if not CONF.compute_feature_enabled.disk_config:
msg = "DiskConfig extension not enabled."
raise cls.skipException(msg)
- super(ServerDiskConfigTestJSON, cls).resource_setup()
+
+ @classmethod
+ def setup_clients(cls):
+ super(ServerDiskConfigTestJSON, cls).setup_clients()
cls.client = cls.os.servers_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ServerDiskConfigTestJSON, cls).resource_setup()
server = cls.create_test_server(wait_until='ACTIVE')
cls.server_id = server['id']
diff --git a/tempest/api/compute/servers/test_instance_actions.py b/tempest/api/compute/servers/test_instance_actions.py
index b00221cdf..c80417032 100644
--- a/tempest/api/compute/servers/test_instance_actions.py
+++ b/tempest/api/compute/servers/test_instance_actions.py
@@ -20,9 +20,13 @@ from tempest import test
class InstanceActionsTestJSON(base.BaseV2ComputeTest):
@classmethod
+ def setup_clients(cls):
+ super(InstanceActionsTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
+
+ @classmethod
def resource_setup(cls):
super(InstanceActionsTestJSON, cls).resource_setup()
- cls.client = cls.servers_client
server = cls.create_test_server(wait_until='ACTIVE')
cls.request_id = server.response['x-compute-request-id']
cls.server_id = server['id']
diff --git a/tempest/api/compute/servers/test_instance_actions_negative.py b/tempest/api/compute/servers/test_instance_actions_negative.py
index a0064b29a..7635eb83a 100644
--- a/tempest/api/compute/servers/test_instance_actions_negative.py
+++ b/tempest/api/compute/servers/test_instance_actions_negative.py
@@ -13,19 +13,23 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
class InstanceActionsNegativeTestJSON(base.BaseV2ComputeTest):
@classmethod
+ def setup_clients(cls):
+ super(InstanceActionsNegativeTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
+
+ @classmethod
def resource_setup(cls):
super(InstanceActionsNegativeTestJSON, cls).resource_setup()
- cls.client = cls.servers_client
server = cls.create_test_server(wait_until='ACTIVE')
cls.server_id = server['id']
diff --git a/tempest/api/compute/servers/test_list_server_filters.py b/tempest/api/compute/servers/test_list_server_filters.py
index bfba105e3..a694fb537 100644
--- a/tempest/api/compute/servers/test_list_server_filters.py
+++ b/tempest/api/compute/servers/test_list_server_filters.py
@@ -13,12 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
from tempest.api import utils
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/servers/test_list_servers_negative.py b/tempest/api/compute/servers/test_list_servers_negative.py
index 7837ac1ac..1c466c580 100644
--- a/tempest/api/compute/servers/test_list_servers_negative.py
+++ b/tempest/api/compute/servers/test_list_servers_negative.py
@@ -24,9 +24,13 @@ class ListServersNegativeTestJSON(base.BaseV2ComputeTest):
force_tenant_isolation = True
@classmethod
+ def setup_clients(cls):
+ super(ListServersNegativeTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
+
+ @classmethod
def resource_setup(cls):
super(ListServersNegativeTestJSON, cls).resource_setup()
- cls.client = cls.servers_client
# The following servers are created for use
# by the test methods in this class. These
diff --git a/tempest/api/compute/servers/test_multiple_create.py b/tempest/api/compute/servers/test_multiple_create.py
index 69c056e56..3be2b7936 100644
--- a/tempest/api/compute/servers/test_multiple_create.py
+++ b/tempest/api/compute/servers/test_multiple_create.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/compute/servers/test_multiple_create_negative.py b/tempest/api/compute/servers/test_multiple_create_negative.py
index caf1ae59f..ef47ad70c 100644
--- a/tempest/api/compute/servers/test_multiple_create_negative.py
+++ b/tempest/api/compute/servers/test_multiple_create_negative.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py
index ce3772fd0..131b24166 100644
--- a/tempest/api/compute/servers/test_server_actions.py
+++ b/tempest/api/compute/servers/test_server_actions.py
@@ -17,12 +17,12 @@ import base64
import logging
import urlparse
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
import testtools
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest.common.utils.linux import remote_client
from tempest import config
from tempest import test
@@ -53,10 +53,14 @@ class ServerActionsTestJSON(base.BaseV2ComputeTest):
super(ServerActionsTestJSON, self).tearDown()
@classmethod
+ def setup_clients(cls):
+ super(ServerActionsTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
+
+ @classmethod
def resource_setup(cls):
cls.prepare_instance_network()
super(ServerActionsTestJSON, cls).resource_setup()
- cls.client = cls.servers_client
cls.server_id = cls.rebuild_server(None)
@test.idempotent_id('6158df09-4b82-4ab3-af6d-29cf36af858d')
diff --git a/tempest/api/compute/servers/test_server_group.py b/tempest/api/compute/servers/test_server_group.py
index ac04febfb..12edfa5ec 100644
--- a/tempest/api/compute/servers/test_server_group.py
+++ b/tempest/api/compute/servers/test_server_group.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -28,12 +28,20 @@ class ServerGroupTestJSON(base.BaseV2ComputeTest):
It also adds the tests for list and get details of server-groups
"""
@classmethod
- def resource_setup(cls):
- super(ServerGroupTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(ServerGroupTestJSON, cls).skip_checks()
if not test.is_extension_enabled('os-server-groups', 'compute'):
msg = "os-server-groups extension is not enabled."
raise cls.skipException(msg)
+
+ @classmethod
+ def setup_clients(cls):
+ super(ServerGroupTestJSON, cls).setup_clients()
cls.client = cls.servers_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ServerGroupTestJSON, cls).resource_setup()
server_group_name = data_utils.rand_name('server-group')
cls.policy = ['affinity']
diff --git a/tempest/api/compute/servers/test_server_metadata.py b/tempest/api/compute/servers/test_server_metadata.py
index 4a14228cf..3bdd38017 100644
--- a/tempest/api/compute/servers/test_server_metadata.py
+++ b/tempest/api/compute/servers/test_server_metadata.py
@@ -20,10 +20,14 @@ from tempest import test
class ServerMetadataTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ServerMetadataTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServerMetadataTestJSON, cls).setup_clients()
cls.client = cls.servers_client
cls.quotas = cls.quotas_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ServerMetadataTestJSON, cls).resource_setup()
server = cls.create_test_server(meta={}, wait_until='ACTIVE')
cls.server_id = server['id']
diff --git a/tempest/api/compute/servers/test_server_metadata_negative.py b/tempest/api/compute/servers/test_server_metadata_negative.py
index 0eb38006d..5e1765d04 100644
--- a/tempest/api/compute/servers/test_server_metadata_negative.py
+++ b/tempest/api/compute/servers/test_server_metadata_negative.py
@@ -13,20 +13,24 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ServerMetadataNegativeTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServerMetadataNegativeTestJSON, cls).setup_clients()
cls.client = cls.servers_client
cls.quotas = cls.quotas_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ServerMetadataNegativeTestJSON, cls).resource_setup()
cls.tenant_id = cls.client.tenant_id
server = cls.create_test_server(meta={}, wait_until='ACTIVE')
@@ -141,14 +145,14 @@ class ServerMetadataNegativeTestJSON(base.BaseV2ComputeTest):
req_metadata = {}
for num in range(1, quota_metadata + 2):
req_metadata['key' + str(num)] = 'val' + str(num)
- self.assertRaises((lib_exc.OverLimit, lib_exc.Unauthorized),
+ self.assertRaises((lib_exc.OverLimit, lib_exc.Forbidden),
self.client.set_server_metadata,
self.server_id, req_metadata)
# A 403 Forbidden or 413 Overlimit (old behaviour) exception
# will be raised while exceeding metadata items limit for
# tenant.
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.client.update_server_metadata,
self.server_id, req_metadata)
diff --git a/tempest/api/compute/servers/test_server_password.py b/tempest/api/compute/servers/test_server_password.py
index 57fa40859..a82fddfd3 100644
--- a/tempest/api/compute/servers/test_server_password.py
+++ b/tempest/api/compute/servers/test_server_password.py
@@ -21,9 +21,13 @@ from tempest import test
class ServerPasswordTestJSON(base.BaseV2ComputeTest):
@classmethod
+ def setup_clients(cls):
+ super(ServerPasswordTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
+
+ @classmethod
def resource_setup(cls):
super(ServerPasswordTestJSON, cls).resource_setup()
- cls.client = cls.servers_client
cls.server = cls.create_test_server(wait_until="ACTIVE")
@test.attr(type='gate')
diff --git a/tempest/api/compute/servers/test_server_personality.py b/tempest/api/compute/servers/test_server_personality.py
index 4a28dfbe2..dbfee8ff7 100644
--- a/tempest/api/compute/servers/test_server_personality.py
+++ b/tempest/api/compute/servers/test_server_personality.py
@@ -23,8 +23,8 @@ from tempest import test
class ServerPersonalityTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ServerPersonalityTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServerPersonalityTestJSON, cls).setup_clients()
cls.client = cls.servers_client
cls.user_client = cls.limits_client
@@ -45,7 +45,7 @@ class ServerPersonalityTestJSON(base.BaseV2ComputeTest):
'contents': base64.b64encode(file_contents)})
# A 403 Forbidden or 413 Overlimit (old behaviour) exception
# will be raised when out of quota
- self.assertRaises((lib_exc.Unauthorized, lib_exc.OverLimit),
+ self.assertRaises((lib_exc.Forbidden, lib_exc.OverLimit),
self.create_test_server, personality=personality)
@test.attr(type='gate')
diff --git a/tempest/api/compute/servers/test_server_rescue.py b/tempest/api/compute/servers/test_server_rescue.py
index a1a99a19a..31d4cb325 100644
--- a/tempest/api/compute/servers/test_server_rescue.py
+++ b/tempest/api/compute/servers/test_server_rescue.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/servers/test_server_rescue_negative.py b/tempest/api/compute/servers/test_server_rescue_negative.py
index 756475886..12b7c0a85 100644
--- a/tempest/api/compute/servers/test_server_rescue_negative.py
+++ b/tempest/api/compute/servers/test_server_rescue_negative.py
@@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
import testtools
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/servers/test_servers.py b/tempest/api/compute/servers/test_servers.py
index 624d9c25e..73ac9bede 100644
--- a/tempest/api/compute/servers/test_servers.py
+++ b/tempest/api/compute/servers/test_servers.py
@@ -13,16 +13,17 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import test
class ServersTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
- super(ServersTestJSON, cls).resource_setup()
+ def setup_clients(cls):
+ super(ServersTestJSON, cls).setup_clients()
cls.client = cls.servers_client
def tearDown(self):
diff --git a/tempest/api/compute/servers/test_servers_negative.py b/tempest/api/compute/servers/test_servers_negative.py
index dd828935d..853e2621a 100644
--- a/tempest/api/compute/servers/test_servers_negative.py
+++ b/tempest/api/compute/servers/test_servers_negative.py
@@ -15,12 +15,12 @@
import sys
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
import testtools
from tempest.api.compute import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -41,11 +41,19 @@ class ServersNegativeTestJSON(base.BaseV2ComputeTest):
super(ServersNegativeTestJSON, self).tearDown()
@classmethod
- def resource_setup(cls):
- super(ServersNegativeTestJSON, cls).resource_setup()
- cls.client = cls.servers_client
+ def setup_credentials(cls):
+ super(ServersNegativeTestJSON, cls).setup_credentials()
cls.alt_os = clients.Manager(cls.isolated_creds.get_alt_creds())
+
+ @classmethod
+ def setup_clients(cls):
+ super(ServersNegativeTestJSON, cls).setup_clients()
+ cls.client = cls.servers_client
cls.alt_client = cls.alt_os.servers_client
+
+ @classmethod
+ def resource_setup(cls):
+ super(ServersNegativeTestJSON, cls).resource_setup()
server = cls.create_test_server(wait_until='ACTIVE')
cls.server_id = server['id']
diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py
index 2dbe1234f..6502e7067 100644
--- a/tempest/api/compute/test_authorization.py
+++ b/tempest/api/compute/test_authorization.py
@@ -15,11 +15,11 @@
import StringIO
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/compute/test_live_block_migration.py b/tempest/api/compute/test_live_block_migration.py
index d2221e101..c3f91eea2 100644
--- a/tempest/api/compute/test_live_block_migration.py
+++ b/tempest/api/compute/test_live_block_migration.py
@@ -27,12 +27,15 @@ class LiveBlockMigrationTestJSON(base.BaseV2ComputeAdminTest):
_host_key = 'OS-EXT-SRV-ATTR:host'
@classmethod
- def resource_setup(cls):
- super(LiveBlockMigrationTestJSON, cls).resource_setup()
-
+ def setup_clients(cls):
+ super(LiveBlockMigrationTestJSON, cls).setup_clients()
cls.admin_hosts_client = cls.os_adm.hosts_client
cls.admin_servers_client = cls.os_adm.servers_client
+ @classmethod
+ def resource_setup(cls):
+ super(LiveBlockMigrationTestJSON, cls).resource_setup()
+
cls.created_server_ids = []
def _get_compute_hostnames(self):
diff --git a/tempest/api/compute/test_live_block_migration_negative.py b/tempest/api/compute/test_live_block_migration_negative.py
index bed53d697..e1d353f1d 100644
--- a/tempest/api/compute/test_live_block_migration_negative.py
+++ b/tempest/api/compute/test_live_block_migration_negative.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -27,10 +27,14 @@ class LiveBlockMigrationNegativeTestJSON(base.BaseV2ComputeAdminTest):
_host_key = 'OS-EXT-SRV-ATTR:host'
@classmethod
- def resource_setup(cls):
- super(LiveBlockMigrationNegativeTestJSON, cls).resource_setup()
+ def skip_checks(cls):
+ super(LiveBlockMigrationNegativeTestJSON, cls).skip_checks()
if not CONF.compute_feature_enabled.live_migration:
raise cls.skipException("Live migration is not enabled")
+
+ @classmethod
+ def setup_clients(cls):
+ super(LiveBlockMigrationNegativeTestJSON, cls).setup_clients()
cls.admin_hosts_client = cls.os_adm.hosts_client
cls.admin_servers_client = cls.os_adm.servers_client
diff --git a/tempest/api/compute/test_networks.py b/tempest/api/compute/test_networks.py
index c30beb704..227972375 100644
--- a/tempest/api/compute/test_networks.py
+++ b/tempest/api/compute/test_networks.py
@@ -21,10 +21,14 @@ CONF = config.CONF
class NetworksTestJSON(base.BaseV2ComputeTest):
@classmethod
- def resource_setup(cls):
+ def skip_checks(cls):
+ super(NetworksTestJSON, cls).skip_checks()
if CONF.service_available.neutron:
raise cls.skipException('nova-network is not available.')
- super(NetworksTestJSON, cls).resource_setup()
+
+ @classmethod
+ def setup_clients(cls):
+ super(NetworksTestJSON, cls).setup_clients()
cls.client = cls.os.networks_client
@test.attr(type='gate')
diff --git a/tempest/api/compute/test_quotas.py b/tempest/api/compute/test_quotas.py
index 1df67d984..86bf5fa2f 100644
--- a/tempest/api/compute/test_quotas.py
+++ b/tempest/api/compute/test_quotas.py
@@ -26,9 +26,13 @@ class QuotasTestJSON(base.BaseV2ComputeTest):
super(QuotasTestJSON, self).setUp()
@classmethod
+ def setup_clients(cls):
+ super(QuotasTestJSON, cls).setup_clients()
+ cls.client = cls.quotas_client
+
+ @classmethod
def resource_setup(cls):
super(QuotasTestJSON, cls).resource_setup()
- cls.client = cls.quotas_client
cls.tenant_id = cls.client.tenant_id
cls.user_id = cls.client.user_id
cls.default_quota_set = set(('injected_file_content_bytes',
diff --git a/tempest/api/compute/volumes/test_volumes_get.py b/tempest/api/compute/volumes/test_volumes_get.py
index 5f84c73d4..1c11128fd 100644
--- a/tempest/api/compute/volumes/test_volumes_get.py
+++ b/tempest/api/compute/volumes/test_volumes_get.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from testtools import matchers
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/volumes/test_volumes_list.py b/tempest/api/compute/volumes/test_volumes_list.py
index bd126d86c..cfdf1fc3a 100644
--- a/tempest/api/compute/volumes/test_volumes_list.py
+++ b/tempest/api/compute/volumes/test_volumes_list.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/compute/volumes/test_volumes_negative.py b/tempest/api/compute/volumes/test_volumes_negative.py
index 89f681757..50ce19815 100644
--- a/tempest/api/compute/volumes/test_volumes_negative.py
+++ b/tempest/api/compute/volumes/test_volumes_negative.py
@@ -15,10 +15,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.compute import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/data_processing/test_cluster_templates.py b/tempest/api/data_processing/test_cluster_templates.py
index af7cbafe7..8a63c3f68 100644
--- a/tempest/api/data_processing/test_cluster_templates.py
+++ b/tempest/api/data_processing/test_cluster_templates.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.data_processing import base as dp_base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/data_processing/test_data_sources.py b/tempest/api/data_processing/test_data_sources.py
index dd16b2fa2..5d2ed2d57 100644
--- a/tempest/api/data_processing/test_data_sources.py
+++ b/tempest/api/data_processing/test_data_sources.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.data_processing import base as dp_base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/data_processing/test_job_binaries.py b/tempest/api/data_processing/test_job_binaries.py
index fb21270de..694cf2533 100644
--- a/tempest/api/data_processing/test_job_binaries.py
+++ b/tempest/api/data_processing/test_job_binaries.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.data_processing import base as dp_base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/data_processing/test_job_binary_internals.py b/tempest/api/data_processing/test_job_binary_internals.py
index 3d76ebe41..ee4e68ad7 100644
--- a/tempest/api/data_processing/test_job_binary_internals.py
+++ b/tempest/api/data_processing/test_job_binary_internals.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.data_processing import base as dp_base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/data_processing/test_jobs.py b/tempest/api/data_processing/test_jobs.py
index 83eb54d23..b15561588 100644
--- a/tempest/api/data_processing/test_jobs.py
+++ b/tempest/api/data_processing/test_jobs.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.data_processing import base as dp_base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/data_processing/test_node_group_templates.py b/tempest/api/data_processing/test_node_group_templates.py
index 9d8421832..d7381f4d0 100644
--- a/tempest/api/data_processing/test_node_group_templates.py
+++ b/tempest/api/data_processing/test_node_group_templates.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.data_processing import base as dp_base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v2/test_roles.py b/tempest/api/identity/admin/v2/test_roles.py
index 3eb6c080a..dd5164d4d 100644
--- a/tempest/api/identity/admin/v2/test_roles.py
+++ b/tempest/api/identity/admin/v2/test_roles.py
@@ -14,9 +14,9 @@
# under the License.
from six import moves
+from tempest_lib.common.utils import data_utils
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v2/test_roles_negative.py b/tempest/api/identity/admin/v2/test_roles_negative.py
index be9fb5247..662d1eae4 100644
--- a/tempest/api/identity/admin/v2/test_roles_negative.py
+++ b/tempest/api/identity/admin/v2/test_roles_negative.py
@@ -13,11 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import uuid
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -35,7 +36,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
@test.idempotent_id('d5d5f1df-f8ca-4de0-b2ef-259c1cc67025')
def test_list_roles_by_unauthorized_user(self):
# Non-administrator user should not be able to list roles
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.list_roles)
@test.attr(type=['negative', 'gate'])
@@ -58,7 +59,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
def test_create_role_by_unauthorized_user(self):
# Non-administrator user should not be able to create role
role_name = data_utils.rand_name(name='role-')
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.create_role, role_name)
@test.attr(type=['negative', 'gate'])
@@ -91,7 +92,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
body = self.client.create_role(role_name)
self.data.roles.append(body)
role_id = body.get('id')
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.delete_role, role_id)
@test.attr(type=['negative', 'gate'])
@@ -123,7 +124,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
# Non-administrator user should not be authorized to
# assign a role to user
(user, tenant, role) = self._get_role_params()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.assign_user_role,
tenant['id'], user['id'], role['id'])
@@ -175,7 +176,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
self.client.assign_user_role(tenant['id'],
user['id'],
role['id'])
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.remove_user_role,
tenant['id'], user['id'], role['id'])
@@ -225,7 +226,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
# a user's roles
(user, tenant, role) = self._get_role_params()
self.client.assign_user_role(tenant['id'], user['id'], role['id'])
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.list_user_roles, tenant['id'],
user['id'])
diff --git a/tempest/api/identity/admin/v2/test_services.py b/tempest/api/identity/admin/v2/test_services.py
index 035f5f8e5..0759ec53f 100644
--- a/tempest/api/identity/admin/v2/test_services.py
+++ b/tempest/api/identity/admin/v2/test_services.py
@@ -14,10 +14,10 @@
# under the License.
from six import moves
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v2/test_tenant_negative.py b/tempest/api/identity/admin/v2/test_tenant_negative.py
index 8346a3dcb..8fd1f5acf 100644
--- a/tempest/api/identity/admin/v2/test_tenant_negative.py
+++ b/tempest/api/identity/admin/v2/test_tenant_negative.py
@@ -13,11 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import uuid
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -27,7 +28,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest):
@test.idempotent_id('ca9bb202-63dd-4240-8a07-8ef9c19c04bb')
def test_list_tenants_by_unauthorized_user(self):
# Non-administrator user should not be able to list tenants
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.list_tenants)
@test.attr(type=['negative', 'gate'])
@@ -46,7 +47,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest):
tenant_name = data_utils.rand_name(name='tenant-')
tenant = self.client.create_tenant(tenant_name)
self.data.tenants.append(tenant)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.delete_tenant, tenant['id'])
@test.attr(type=['negative', 'gate'])
@@ -89,7 +90,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest):
def test_create_tenant_by_unauthorized_user(self):
# Non-administrator user should not be authorized to create a tenant
tenant_name = data_utils.rand_name(name='tenant-')
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.create_tenant, tenant_name)
@test.attr(type=['negative', 'gate'])
@@ -132,7 +133,7 @@ class TenantsNegativeTestJSON(base.BaseIdentityV2AdminTest):
tenant_name = data_utils.rand_name(name='tenant-')
tenant = self.client.create_tenant(tenant_name)
self.data.tenants.append(tenant)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.update_tenant, tenant['id'])
@test.attr(type=['negative', 'gate'])
diff --git a/tempest/api/identity/admin/v2/test_tenants.py b/tempest/api/identity/admin/v2/test_tenants.py
index 3f1c3cdff..0be25a9ca 100644
--- a/tempest/api/identity/admin/v2/test_tenants.py
+++ b/tempest/api/identity/admin/v2/test_tenants.py
@@ -14,9 +14,9 @@
# under the License.
from six import moves
+from tempest_lib.common.utils import data_utils
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v2/test_tokens.py b/tempest/api/identity/admin/v2/test_tokens.py
index 751f5fd44..29ba1de26 100644
--- a/tempest/api/identity/admin/v2/test_tokens.py
+++ b/tempest/api/identity/admin/v2/test_tokens.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v2/test_users.py b/tempest/api/identity/admin/v2/test_users.py
index fc64f6741..2ca559565 100644
--- a/tempest/api/identity/admin/v2/test_users.py
+++ b/tempest/api/identity/admin/v2/test_users.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from testtools import matchers
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v2/test_users_negative.py b/tempest/api/identity/admin/v2/test_users_negative.py
index f40621be5..387b7142a 100644
--- a/tempest/api/identity/admin/v2/test_users_negative.py
+++ b/tempest/api/identity/admin/v2/test_users_negative.py
@@ -13,11 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import exceptions as lib_exc
import uuid
+from tempest_lib.common.utils import data_utils
+from tempest_lib import exceptions as lib_exc
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -35,7 +36,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest):
def test_create_user_by_unauthorized_user(self):
# Non-administrator should not be authorized to create a user
self.data.setup_test_tenant()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.create_user, self.alt_user,
self.alt_password, self.data.tenant['id'],
self.alt_email)
@@ -131,7 +132,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest):
def test_update_user_by_unauthorized_user(self):
# Non-administrator should not be authorized to update user
self.data.setup_test_tenant()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.update_user, self.alt_user)
@test.attr(type=['negative', 'gate'])
@@ -139,7 +140,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest):
def test_delete_users_by_unauthorized_user(self):
# Non-administrator user should not be authorized to delete a user
self.data.setup_test_user()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.delete_user,
self.data.user['id'])
@@ -220,7 +221,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest):
def test_get_users_by_unauthorized_user(self):
# Non-administrator user should not be authorized to get user list
self.data.setup_test_user()
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.get_users)
@test.attr(type=['negative', 'gate'])
diff --git a/tempest/api/identity/admin/v3/test_credentials.py b/tempest/api/identity/admin/v3/test_credentials.py
index 6fbd5440c..c42761599 100644
--- a/tempest/api/identity/admin/v3/test_credentials.py
+++ b/tempest/api/identity/admin/v3/test_credentials.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_default_project_id.py b/tempest/api/identity/admin/v3/test_default_project_id.py
index f74b30dfe..f1cc53063 100644
--- a/tempest/api/identity/admin/v3/test_default_project_id.py
+++ b/tempest/api/identity/admin/v3/test_default_project_id.py
@@ -10,10 +10,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
from tempest import auth
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import manager
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_domains.py b/tempest/api/identity/admin/v3/test_domains.py
index 0441f6d7d..1f6e6513a 100644
--- a/tempest/api/identity/admin/v3/test_domains.py
+++ b/tempest/api/identity/admin/v3/test_domains.py
@@ -13,9 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_endpoints.py b/tempest/api/identity/admin/v3/test_endpoints.py
index 4a11c955d..c683f59d3 100644
--- a/tempest/api/identity/admin/v3/test_endpoints.py
+++ b/tempest/api/identity/admin/v3/test_endpoints.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_endpoints_negative.py b/tempest/api/identity/admin/v3/test_endpoints_negative.py
index 06c8e77c2..e2b7edcb8 100644
--- a/tempest/api/identity/admin/v3/test_endpoints_negative.py
+++ b/tempest/api/identity/admin/v3/test_endpoints_negative.py
@@ -14,10 +14,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_groups.py b/tempest/api/identity/admin/v3/test_groups.py
index 2c70a7cf2..98d1846fa 100644
--- a/tempest/api/identity/admin/v3/test_groups.py
+++ b/tempest/api/identity/admin/v3/test_groups.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_list_projects.py b/tempest/api/identity/admin/v3/test_list_projects.py
index ca30b6e43..7b092fd80 100644
--- a/tempest/api/identity/admin/v3/test_list_projects.py
+++ b/tempest/api/identity/admin/v3/test_list_projects.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_list_users.py b/tempest/api/identity/admin/v3/test_list_users.py
index 1407f38a7..6a073ced8 100644
--- a/tempest/api/identity/admin/v3/test_list_users.py
+++ b/tempest/api/identity/admin/v3/test_list_users.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_policies.py b/tempest/api/identity/admin/v3/test_policies.py
index 900c26e7c..63d2b0db1 100644
--- a/tempest/api/identity/admin/v3/test_policies.py
+++ b/tempest/api/identity/admin/v3/test_policies.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_projects.py b/tempest/api/identity/admin/v3/test_projects.py
index 052cf0e4d..69b1fb4d1 100644
--- a/tempest/api/identity/admin/v3/test_projects.py
+++ b/tempest/api/identity/admin/v3/test_projects.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_projects_negative.py b/tempest/api/identity/admin/v3/test_projects_negative.py
index bc9290055..739bb350c 100644
--- a/tempest/api/identity/admin/v3/test_projects_negative.py
+++ b/tempest/api/identity/admin/v3/test_projects_negative.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
@@ -26,7 +26,7 @@ class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest):
@test.idempotent_id('24c49279-45dd-4155-887a-cb738c2385aa')
def test_list_projects_by_unauthorized_user(self):
# Non-admin user should not be able to list projects
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.non_admin_client.list_projects)
@test.attr(type=['negative', 'gate'])
@@ -46,7 +46,7 @@ class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest):
# Non-admin user should not be authorized to create a project
project_name = data_utils.rand_name('project-')
self.assertRaises(
- lib_exc.Unauthorized, self.non_admin_client.create_project,
+ lib_exc.Forbidden, self.non_admin_client.create_project,
project_name)
@test.attr(type=['negative', 'gate'])
@@ -72,7 +72,7 @@ class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest):
project = self.client.create_project(project_name)
self.data.projects.append(project)
self.assertRaises(
- lib_exc.Unauthorized, self.non_admin_client.delete_project,
+ lib_exc.Forbidden, self.non_admin_client.delete_project,
project['id'])
@test.attr(type=['negative', 'gate'])
diff --git a/tempest/api/identity/admin/v3/test_regions.py b/tempest/api/identity/admin/v3/test_regions.py
index bf3c12eef..b5c337d95 100644
--- a/tempest/api/identity/admin/v3/test_regions.py
+++ b/tempest/api/identity/admin/v3/test_regions.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_roles.py b/tempest/api/identity/admin/v3/test_roles.py
index 24da22a23..0611393e2 100644
--- a/tempest/api/identity/admin/v3/test_roles.py
+++ b/tempest/api/identity/admin/v3/test_roles.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_services.py b/tempest/api/identity/admin/v3/test_services.py
index bf5cc3e17..886eacf4a 100644
--- a/tempest/api/identity/admin/v3/test_services.py
+++ b/tempest/api/identity/admin/v3/test_services.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_tokens.py b/tempest/api/identity/admin/v3/test_tokens.py
index 47f9dbd72..5cc498fbe 100644
--- a/tempest/api/identity/admin/v3/test_tokens.py
+++ b/tempest/api/identity/admin/v3/test_tokens.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_trusts.py b/tempest/api/identity/admin/v3/test_trusts.py
index db64a5b88..d9346e913 100644
--- a/tempest/api/identity/admin/v3/test_trusts.py
+++ b/tempest/api/identity/admin/v3/test_trusts.py
@@ -13,12 +13,12 @@
import datetime
import re
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.identity import base
from tempest import clients
from tempest.common import cred_provider
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import timeutils
from tempest import test
diff --git a/tempest/api/identity/admin/v3/test_users.py b/tempest/api/identity/admin/v3/test_users.py
index 8120fa74e..f29e72ac1 100644
--- a/tempest/api/identity/admin/v3/test_users.py
+++ b/tempest/api/identity/admin/v3/test_users.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.identity import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/identity/base.py b/tempest/api/identity/base.py
index ce54baa38..72a4cbd78 100644
--- a/tempest/api/identity/base.py
+++ b/tempest/api/identity/base.py
@@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
from tempest.common import cred_provider
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py
index ffc30712f..58d0003d9 100644
--- a/tempest/api/image/base.py
+++ b/tempest/api/image/base.py
@@ -13,11 +13,12 @@
# under the License.
import cStringIO as StringIO
+
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
from tempest.common import credentials
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
diff --git a/tempest/api/image/v1/test_image_members_negative.py b/tempest/api/image/v1/test_image_members_negative.py
index c276d257e..ad3e13196 100644
--- a/tempest/api/image/v1/test_image_members_negative.py
+++ b/tempest/api/image/v1/test_image_members_negative.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.image import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/image/v1/test_images.py b/tempest/api/image/v1/test_images.py
index a26812828..bd672c977 100644
--- a/tempest/api/image/v1/test_images.py
+++ b/tempest/api/image/v1/test_images.py
@@ -15,8 +15,9 @@
import cStringIO as StringIO
+from tempest_lib.common.utils import data_utils
+
from tempest.api.image import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/image/v2/test_images.py b/tempest/api/image/v2/test_images.py
index a4f5ae362..0997c9f1e 100644
--- a/tempest/api/image/v2/test_images.py
+++ b/tempest/api/image/v2/test_images.py
@@ -17,8 +17,9 @@
import cStringIO as StringIO
import random
+from tempest_lib.common.utils import data_utils
+
from tempest.api.image import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/image/v2/test_images_member_negative.py b/tempest/api/image/v2/test_images_member_negative.py
index a0c59ffd8..c07db0ef1 100644
--- a/tempest/api/image/v2/test_images_member_negative.py
+++ b/tempest/api/image/v2/test_images_member_negative.py
@@ -37,7 +37,7 @@ class ImagesMemberNegativeTest(base.BaseV2MemberImageTest):
self.alt_tenant_id)
self.assertEqual(member['status'], 'pending')
self.assertNotIn(image_id, self._list_image_ids_as_alt())
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.os_img_client.update_member_status,
image_id, self.alt_tenant_id, 'accepted')
self.assertNotIn(image_id, self._list_image_ids_as_alt())
diff --git a/tempest/api/image/v2/test_images_tags.py b/tempest/api/image/v2/test_images_tags.py
index 350ede307..bdb1679a6 100644
--- a/tempest/api/image/v2/test_images_tags.py
+++ b/tempest/api/image/v2/test_images_tags.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.image import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/image/v2/test_images_tags_negative.py b/tempest/api/image/v2/test_images_tags_negative.py
index bbe04319a..13ef27d97 100644
--- a/tempest/api/image/v2/test_images_tags_negative.py
+++ b/tempest/api/image/v2/test_images_tags_negative.py
@@ -14,10 +14,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.image import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/messaging/base.py b/tempest/api/messaging/base.py
index eae070726..f193e3283 100644
--- a/tempest/api/messaging/base.py
+++ b/tempest/api/messaging/base.py
@@ -13,7 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/messaging/test_claims.py b/tempest/api/messaging/test_claims.py
index ebaa28345..896de81d2 100644
--- a/tempest/api/messaging/test_claims.py
+++ b/tempest/api/messaging/test_claims.py
@@ -16,10 +16,10 @@
import logging
import urlparse
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest.api.messaging import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/messaging/test_messages.py b/tempest/api/messaging/test_messages.py
index 12a3df522..f982f597a 100644
--- a/tempest/api/messaging/test_messages.py
+++ b/tempest/api/messaging/test_messages.py
@@ -15,8 +15,9 @@
import logging
+from tempest_lib.common.utils import data_utils
+
from tempest.api.messaging import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/messaging/test_queues.py b/tempest/api/messaging/test_queues.py
index 5d9a7c76f..c444e0b67 100644
--- a/tempest/api/messaging/test_queues.py
+++ b/tempest/api/messaging/test_queues.py
@@ -16,11 +16,11 @@
import logging
from six import moves
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from testtools import matchers
from tempest.api.messaging import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/admin/test_external_network_extension.py b/tempest/api/network/admin/test_external_network_extension.py
index d94264187..75f27195f 100644
--- a/tempest/api/network/admin/test_external_network_extension.py
+++ b/tempest/api/network/admin/test_external_network_extension.py
@@ -10,8 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/admin/test_floating_ips_admin_actions.py b/tempest/api/network/admin/test_floating_ips_admin_actions.py
index a3a9977f4..ccf398002 100644
--- a/tempest/api/network/admin/test_floating_ips_admin_actions.py
+++ b/tempest/api/network/admin/test_floating_ips_admin_actions.py
@@ -13,9 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/admin/test_l3_agent_scheduler.py b/tempest/api/network/admin/test_l3_agent_scheduler.py
index e6fa0a62b..257289fb8 100644
--- a/tempest/api/network/admin/test_l3_agent_scheduler.py
+++ b/tempest/api/network/admin/test_l3_agent_scheduler.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/admin/test_lbaas_agent_scheduler.py b/tempest/api/network/admin/test_lbaas_agent_scheduler.py
index c178fc07c..29b69c3c4 100644
--- a/tempest/api/network/admin/test_lbaas_agent_scheduler.py
+++ b/tempest/api/network/admin/test_lbaas_agent_scheduler.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/admin/test_load_balancer_admin_actions.py b/tempest/api/network/admin/test_load_balancer_admin_actions.py
index 931f07932..b49b57c29 100644
--- a/tempest/api/network/admin/test_load_balancer_admin_actions.py
+++ b/tempest/api/network/admin/test_load_balancer_admin_actions.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/admin/test_quotas.py b/tempest/api/network/admin/test_quotas.py
index 1ea24feea..60552b9da 100644
--- a/tempest/api/network/admin/test_quotas.py
+++ b/tempest/api/network/admin/test_quotas.py
@@ -13,9 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/admin/test_routers_dvr.py b/tempest/api/network/admin/test_routers_dvr.py
index d1833dd71..48cd02bb5 100644
--- a/tempest/api/network/admin/test_routers_dvr.py
+++ b/tempest/api/network/admin/test_routers_dvr.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base_routers as base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index e8c8de3f7..270f5dd9e 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -14,10 +14,10 @@
# under the License.
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
diff --git a/tempest/api/network/base_security_groups.py b/tempest/api/network/base_security_groups.py
index 623e2d061..c704049ea 100644
--- a/tempest/api/network/base_security_groups.py
+++ b/tempest/api/network/base_security_groups.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
class BaseSecGroupTest(base.BaseNetworkTest):
diff --git a/tempest/api/network/test_dhcp_ipv6.py b/tempest/api/network/test_dhcp_ipv6.py
index 5168219a8..a10f749b2 100644
--- a/tempest/api/network/test_dhcp_ipv6.py
+++ b/tempest/api/network/test_dhcp_ipv6.py
@@ -16,10 +16,10 @@
import netaddr
import random
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_extra_dhcp_options.py b/tempest/api/network/test_extra_dhcp_options.py
index 612c20af2..5060a480b 100644
--- a/tempest/api/network/test_extra_dhcp_options.py
+++ b/tempest/api/network/test_extra_dhcp_options.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/test_floating_ips.py b/tempest/api/network/test_floating_ips.py
index cc8885270..212013a56 100644
--- a/tempest/api/network/test_floating_ips.py
+++ b/tempest/api/network/test_floating_ips.py
@@ -14,9 +14,9 @@
# under the License.
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_floating_ips_negative.py b/tempest/api/network/test_floating_ips_negative.py
index c4c547cdb..a7f806cf2 100644
--- a/tempest/api/network/test_floating_ips_negative.py
+++ b/tempest/api/network/test_floating_ips_negative.py
@@ -14,10 +14,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_fwaas_extensions.py b/tempest/api/network/test_fwaas_extensions.py
index d97a60cc4..e2b6ff1c9 100644
--- a/tempest/api/network/test_fwaas_extensions.py
+++ b/tempest/api/network/test_fwaas_extensions.py
@@ -12,10 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest import test
diff --git a/tempest/api/network/test_load_balancer.py b/tempest/api/network/test_load_balancer.py
index 6872dfacd..583f91ac5 100644
--- a/tempest/api/network/test_load_balancer.py
+++ b/tempest/api/network/test_load_balancer.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/test_metering_extensions.py b/tempest/api/network/test_metering_extensions.py
index 8e4ee87ec..68aed2728 100644
--- a/tempest/api/network/test_metering_extensions.py
+++ b/tempest/api/network/test_metering_extensions.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/network/test_networks.py b/tempest/api/network/test_networks.py
index 0801045d1..2e01a85f7 100644
--- a/tempest/api/network/test_networks.py
+++ b/tempest/api/network/test_networks.py
@@ -15,11 +15,11 @@
import itertools
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base
from tempest.common import custom_matchers
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_networks_negative.py b/tempest/api/network/test_networks_negative.py
index 1002295b5..d246d38fe 100644
--- a/tempest/api/network/test_networks_negative.py
+++ b/tempest/api/network/test_networks_negative.py
@@ -14,10 +14,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/network/test_ports.py b/tempest/api/network/test_ports.py
index 33211fc07..6fe955e5e 100644
--- a/tempest/api/network/test_ports.py
+++ b/tempest/api/network/test_ports.py
@@ -13,13 +13,14 @@
# License for the specific language governing permissions and limitations
# under the License.
-import netaddr
import socket
+import netaddr
+from tempest_lib.common.utils import data_utils
+
from tempest.api.network import base
from tempest.api.network import base_security_groups as sec_base
from tempest.common import custom_matchers
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_routers.py b/tempest/api/network/test_routers.py
index 1388b3bc9..e9c948442 100644
--- a/tempest/api/network/test_routers.py
+++ b/tempest/api/network/test_routers.py
@@ -14,10 +14,10 @@
# under the License.
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest.api.network import base_routers as base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_routers_negative.py b/tempest/api/network/test_routers_negative.py
index 9f76dd2e8..9e7d574d4 100644
--- a/tempest/api/network/test_routers_negative.py
+++ b/tempest/api/network/test_routers_negative.py
@@ -14,10 +14,10 @@
# under the License.
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base_routers as base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_security_groups.py b/tempest/api/network/test_security_groups.py
index 79d20461d..46dbeee2f 100644
--- a/tempest/api/network/test_security_groups.py
+++ b/tempest/api/network/test_security_groups.py
@@ -14,9 +14,9 @@
# under the License.
import six
+from tempest_lib.common.utils import data_utils
from tempest.api.network import base_security_groups as base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/network/test_vpnaas_extensions.py b/tempest/api/network/test_vpnaas_extensions.py
index ebf31d319..ba3032643 100644
--- a/tempest/api/network/test_vpnaas_extensions.py
+++ b/tempest/api/network/test_vpnaas_extensions.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.network import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/object_storage/base.py b/tempest/api/object_storage/base.py
index 6a025d9fa..f75f4c843 100644
--- a/tempest/api/object_storage/base.py
+++ b/tempest/api/object_storage/base.py
@@ -15,7 +15,6 @@
from tempest_lib import exceptions as lib_exc
-from tempest.api.identity import base
from tempest import clients
from tempest.common import credentials
from tempest.common import custom_matchers
@@ -38,29 +37,25 @@ class BaseObjectTest(tempest.test.BaseTestCase):
def setup_credentials(cls):
cls.set_network_resources()
super(BaseObjectTest, cls).setup_credentials()
-
cls.isolated_creds = credentials.get_isolated_credentials(
cls.__name__, network_resources=cls.network_resources)
- # Get isolated creds for normal user
- cls.os = clients.Manager(cls.isolated_creds.get_primary_creds())
- # Get isolated creds for admin user
- cls.os_admin = clients.Manager(cls.isolated_creds.get_admin_creds())
- cls.data = SwiftDataGenerator(cls.os_admin.identity_client)
- # Get isolated creds for alt user
- cls.os_alt = clients.Manager(cls.isolated_creds.get_alt_creds())
+ 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"
+ " is not able to provide credentials with the %s role "
+ "assigned." % (cls.__name__, operator_role))
+ raise cls.skipException(skip_msg)
+ else:
+ # Get isolated creds for normal user
+ cls.os = clients.Manager(cls.isolated_creds.get_creds_by_roles(
+ [operator_role]))
@classmethod
def setup_clients(cls):
super(BaseObjectTest, cls).setup_clients()
-
cls.object_client = cls.os.object_client
cls.container_client = cls.os.container_client
cls.account_client = cls.os.account_client
- cls.token_client = cls.os_admin.token_client
- cls.identity_admin_client = cls.os_admin.identity_client
- cls.object_client_alt = cls.os_alt.object_client
- cls.container_client_alt = cls.os_alt.container_client
- cls.identity_client_alt = cls.os_alt.identity_client
@classmethod
def resource_setup(cls):
@@ -70,12 +65,9 @@ class BaseObjectTest(tempest.test.BaseTestCase):
cls.object_client.auth_provider.clear_auth()
cls.container_client.auth_provider.clear_auth()
cls.account_client.auth_provider.clear_auth()
- cls.object_client_alt.auth_provider.clear_auth()
- cls.container_client_alt.auth_provider.clear_auth()
@classmethod
def resource_cleanup(cls):
- cls.data.teardown_all()
cls.isolated_creds.clear_isolated_creds()
super(BaseObjectTest, cls).resource_cleanup()
@@ -119,28 +111,3 @@ class BaseObjectTest(tempest.test.BaseTestCase):
self.assertThat(resp, custom_matchers.ExistsAllResponseHeaders(
target, method))
self.assertThat(resp, custom_matchers.AreAllWellFormatted())
-
-
-class SwiftDataGenerator(base.DataGenerator):
-
- def setup_test_user(self, reseller=False):
- super(SwiftDataGenerator, self).setup_test_user()
- if reseller:
- role_name = CONF.object_storage.reseller_admin_role
- else:
- role_name = CONF.object_storage.operator_role
- role_id = self._get_role_id(role_name)
- self._assign_role(role_id)
-
- def _get_role_id(self, role_name):
- try:
- roles = self.client.list_roles()
- return next(r['id'] for r in roles if r['name'] == role_name)
- except StopIteration:
- msg = "Role name '%s' is not found" % role_name
- raise lib_exc.NotFound(msg)
-
- def _assign_role(self, role_id):
- self.client.assign_user_role(self.tenant['id'],
- self.user['id'],
- role_id)
diff --git a/tempest/api/object_storage/test_account_quotas.py b/tempest/api/object_storage/test_account_quotas.py
index 9b379f4b3..364d6e1c4 100644
--- a/tempest/api/object_storage/test_account_quotas.py
+++ b/tempest/api/object_storage/test_account_quotas.py
@@ -12,9 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.object_storage import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -26,8 +27,16 @@ class AccountQuotasTest(base.BaseObjectTest):
@classmethod
def setup_credentials(cls):
super(AccountQuotasTest, cls).setup_credentials()
- cls.data.setup_test_user(reseller=True)
- cls.os_reselleradmin = clients.Manager(cls.data.test_credentials)
+ reseller_admin_role = CONF.object_storage.reseller_admin_role
+ if not cls.isolated_creds.is_role_available(reseller_admin_role):
+ skip_msg = ("%s skipped because the configured credential provider"
+ " is not able to provide credentials with the %s role "
+ "assigned." % (cls.__name__, reseller_admin_role))
+ raise cls.skipException(skip_msg)
+ else:
+ cls.os_reselleradmin = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[reseller_admin_role]))
@classmethod
def resource_setup(cls):
diff --git a/tempest/api/object_storage/test_account_quotas_negative.py b/tempest/api/object_storage/test_account_quotas_negative.py
index 7d4008cbd..101b0402e 100644
--- a/tempest/api/object_storage/test_account_quotas_negative.py
+++ b/tempest/api/object_storage/test_account_quotas_negative.py
@@ -12,12 +12,12 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -29,8 +29,16 @@ class AccountQuotasNegativeTest(base.BaseObjectTest):
@classmethod
def setup_credentials(cls):
super(AccountQuotasNegativeTest, cls).setup_credentials()
- cls.data.setup_test_user(reseller=True)
- cls.os_reselleradmin = clients.Manager(cls.data.test_credentials)
+ reseller_admin_role = CONF.object_storage.reseller_admin_role
+ if not cls.isolated_creds.is_role_available(reseller_admin_role):
+ skip_msg = ("%s skipped because the configured credential provider"
+ " is not able to provide credentials with the %s role "
+ "assigned." % (cls.__name__, reseller_admin_role))
+ raise cls.skipException(skip_msg)
+ else:
+ cls.os_reselleradmin = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[reseller_admin_role]))
@classmethod
def resource_setup(cls):
@@ -86,12 +94,12 @@ class AccountQuotasNegativeTest(base.BaseObjectTest):
"""
# Not able to remove quota
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.account_client.create_account_metadata,
{"Quota-Bytes": ""})
# Not able to modify quota
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.account_client.create_account_metadata,
{"Quota-Bytes": "100"})
diff --git a/tempest/api/object_storage/test_account_services.py b/tempest/api/object_storage/test_account_services.py
index 63d042576..77defd641 100644
--- a/tempest/api/object_storage/test_account_services.py
+++ b/tempest/api/object_storage/test_account_services.py
@@ -14,13 +14,14 @@
# under the License.
import random
+
from six import moves
+from tempest_lib.common.utils import data_utils
import testtools
from tempest.api.object_storage import base
from tempest import clients
from tempest.common import custom_matchers
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -32,6 +33,13 @@ class AccountTest(base.BaseObjectTest):
containers = []
@classmethod
+ def setup_credentials(cls):
+ super(AccountTest, cls).setup_credentials()
+ cls.os_operator = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[CONF.object_storage.operator_role], force_new=True))
+
+ @classmethod
def resource_setup(cls):
super(AccountTest, cls).resource_setup()
for i in moves.xrange(ord('a'), ord('f') + 1):
@@ -63,12 +71,9 @@ class AccountTest(base.BaseObjectTest):
# To test listing no containers, create new user other than
# the base user of this instance.
- self.data.setup_test_user()
-
- os_test_user = clients.Manager(self.data.test_credentials)
resp, container_list = \
- os_test_user.account_client.list_account_containers()
+ self.os_operator.account_client.list_account_containers()
# When sending a request to an account which has not received a PUT
# container request, the response does not contain 'accept-ranges'
diff --git a/tempest/api/object_storage/test_account_services_negative.py b/tempest/api/object_storage/test_account_services_negative.py
index f3296752b..4a482da7d 100644
--- a/tempest/api/object_storage/test_account_services_negative.py
+++ b/tempest/api/object_storage/test_account_services_negative.py
@@ -16,20 +16,27 @@ from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
from tempest import clients
+from tempest import config
from tempest import test
+CONF = config.CONF
+
class AccountNegativeTest(base.BaseObjectTest):
+ @classmethod
+ def setup_credentials(cls):
+ super(AccountNegativeTest, cls).setup_credentials()
+ cls.os_operator = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[CONF.object_storage.operator_role], force_new=True))
+
@test.attr(type=['negative', 'gate'])
@test.idempotent_id('070e6aca-6152-4867-868d-1118d68fb38c')
def test_list_containers_with_non_authorized_user(self):
# list containers using non-authorized user
- # create user
- self.data.setup_test_user()
- test_os = clients.Manager(self.data.test_credentials)
- test_auth_provider = test_os.auth_provider
+ test_auth_provider = self.os_operator.auth_provider
# Get auth for the test user
test_auth_provider.auth_data
@@ -44,6 +51,6 @@ class AccountNegativeTest(base.BaseObjectTest):
params = {'format': 'json'}
# list containers with non-authorized user token
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.account_client.list_account_containers,
params=params)
diff --git a/tempest/api/object_storage/test_container_acl.py b/tempest/api/object_storage/test_container_acl.py
index 6368becae..73a976d84 100644
--- a/tempest/api/object_storage/test_container_acl.py
+++ b/tempest/api/object_storage/test_container_acl.py
@@ -13,24 +13,29 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.object_storage import base
from tempest import clients
-from tempest.common.utils import data_utils
+from tempest import config
from tempest import test
+CONF = config.CONF
+
class ObjectTestACLs(base.BaseObjectTest):
@classmethod
def setup_credentials(cls):
super(ObjectTestACLs, cls).setup_credentials()
- cls.data.setup_test_user()
- cls.test_os = clients.Manager(cls.data.test_credentials)
+ cls.os_operator = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[CONF.object_storage.operator_role], force_new=True))
@classmethod
def resource_setup(cls):
super(ObjectTestACLs, cls).resource_setup()
- cls.test_auth_data = cls.test_os.auth_provider.auth_data
+ cls.test_auth_data = cls.os_operator.auth_provider.auth_data
def setUp(self):
super(ObjectTestACLs, self).setUp()
@@ -46,8 +51,9 @@ class ObjectTestACLs(base.BaseObjectTest):
def test_read_object_with_rights(self):
# attempt to read object using authorized user
# update X-Container-Read metadata ACL
- cont_headers = {'X-Container-Read':
- self.data.test_tenant + ':' + self.data.test_user}
+ tenant_name = self.os_operator.credentials.tenant_name
+ username = self.os_operator.credentials.username
+ cont_headers = {'X-Container-Read': tenant_name + ':' + username}
resp_meta, body = self.container_client.update_container_metadata(
self.container_name, metadata=cont_headers,
metadata_prefix='')
@@ -71,8 +77,9 @@ class ObjectTestACLs(base.BaseObjectTest):
def test_write_object_with_rights(self):
# attempt to write object using authorized user
# update X-Container-Write metadata ACL
- cont_headers = {'X-Container-Write':
- self.data.test_tenant + ':' + self.data.test_user}
+ tenant_name = self.os_operator.credentials.tenant_name
+ username = self.os_operator.credentials.username
+ cont_headers = {'X-Container-Write': tenant_name + ':' + username}
resp_meta, body = self.container_client.update_container_metadata(
self.container_name, metadata=cont_headers,
metadata_prefix='')
diff --git a/tempest/api/object_storage/test_container_acl_negative.py b/tempest/api/object_storage/test_container_acl_negative.py
index 58923406a..bbb44f4c6 100644
--- a/tempest/api/object_storage/test_container_acl_negative.py
+++ b/tempest/api/object_storage/test_container_acl_negative.py
@@ -12,26 +12,30 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
from tempest import clients
-from tempest.common.utils import data_utils
+from tempest import config
from tempest import test
+CONF = config.CONF
+
class ObjectACLsNegativeTest(base.BaseObjectTest):
@classmethod
def setup_credentials(cls):
super(ObjectACLsNegativeTest, cls).setup_credentials()
- cls.data.setup_test_user()
- cls.test_os = clients.Manager(cls.data.test_credentials)
+ cls.os_operator = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[CONF.object_storage.operator_role], force_new=True))
@classmethod
def resource_setup(cls):
super(ObjectACLsNegativeTest, cls).resource_setup()
- cls.test_auth_data = cls.test_os.auth_provider.auth_data
+ cls.test_auth_data = cls.os_operator.auth_provider.auth_data
def setUp(self):
super(ObjectACLsNegativeTest, self).setUp()
@@ -84,7 +88,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
request_part='headers',
auth_data=self.test_auth_data
)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.create_object,
self.container_name, object_name, 'data', headers={})
@@ -102,7 +106,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
request_part='headers',
auth_data=self.test_auth_data
)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.get_object,
self.container_name, object_name)
@@ -120,7 +124,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
request_part='headers',
auth_data=self.test_auth_data
)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.delete_object,
self.container_name, object_name)
@@ -144,7 +148,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
request_part='headers',
auth_data=self.test_auth_data
)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.get_object,
self.container_name, object_name)
@@ -164,7 +168,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
auth_data=self.test_auth_data
)
object_name = data_utils.rand_name(name='Object')
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.create_object,
self.container_name,
object_name, 'data', headers={})
@@ -174,8 +178,10 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
def test_write_object_without_write_rights(self):
# attempt to write object using non-authorized user
# update X-Container-Read and X-Container-Write metadata ACL
+ tenant_name = self.os_operator.credentials.tenant_name
+ username = self.os_operator.credentials.username
cont_headers = {'X-Container-Read':
- self.data.test_tenant + ':' + self.data.test_user,
+ tenant_name + ':' + username,
'X-Container-Write': ''}
resp_meta, body = self.container_client.update_container_metadata(
self.container_name, metadata=cont_headers,
@@ -187,7 +193,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
auth_data=self.test_auth_data
)
object_name = data_utils.rand_name(name='Object')
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.create_object,
self.container_name,
object_name, 'data', headers={})
@@ -197,8 +203,10 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
def test_delete_object_without_write_rights(self):
# attempt to delete object using non-authorized user
# update X-Container-Read and X-Container-Write metadata ACL
+ tenant_name = self.os_operator.credentials.tenant_name
+ username = self.os_operator.credentials.username
cont_headers = {'X-Container-Read':
- self.data.test_tenant + ':' + self.data.test_user,
+ tenant_name + ':' + username,
'X-Container-Write': ''}
resp_meta, body = self.container_client.update_container_metadata(
self.container_name, metadata=cont_headers,
@@ -214,7 +222,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
request_part='headers',
auth_data=self.test_auth_data
)
- self.assertRaises(lib_exc.Unauthorized,
+ self.assertRaises(lib_exc.Forbidden,
self.object_client.delete_object,
self.container_name,
object_name)
diff --git a/tempest/api/object_storage/test_container_quotas.py b/tempest/api/object_storage/test_container_quotas.py
index c78b4c3f0..2217d181d 100644
--- a/tempest/api/object_storage/test_container_quotas.py
+++ b/tempest/api/object_storage/test_container_quotas.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/object_storage/test_container_services.py b/tempest/api/object_storage/test_container_services.py
index 54da0d15e..9f2adfe63 100644
--- a/tempest/api/object_storage/test_container_services.py
+++ b/tempest/api/object_storage/test_container_services.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/object_storage/test_container_staticweb.py b/tempest/api/object_storage/test_container_staticweb.py
index 45ecfec8d..b579a45bc 100644
--- a/tempest/api/object_storage/test_container_staticweb.py
+++ b/tempest/api/object_storage/test_container_staticweb.py
@@ -12,11 +12,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
from tempest.common import custom_matchers
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/object_storage/test_container_sync.py b/tempest/api/object_storage/test_container_sync.py
index 71f12752d..ff99c156e 100644
--- a/tempest/api/object_storage/test_container_sync.py
+++ b/tempest/api/object_storage/test_container_sync.py
@@ -13,13 +13,16 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest_lib import decorators
-import testtools
import time
import urlparse
+from tempest_lib.common.utils import data_utils
+from tempest_lib import decorators
+import testtools
+
+
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
+from tempest import clients
from tempest import config
from tempest import test
@@ -36,6 +39,18 @@ class ContainerSyncTest(base.BaseObjectTest):
clients = {}
@classmethod
+ def setup_credentials(cls):
+ super(ContainerSyncTest, cls).setup_credentials()
+ cls.os_alt = clients.Manager(cls.isolated_creds.get_creds_by_roles(
+ [CONF.object_storage.operator_role], force_new=True))
+
+ @classmethod
+ def setup_clients(cls):
+ super(ContainerSyncTest, cls).setup_clients()
+ cls.object_client_alt = cls.os_alt.object_client
+ cls.container_client_alt = cls.os_alt.container_client
+
+ @classmethod
def resource_setup(cls):
super(ContainerSyncTest, cls).resource_setup()
cls.containers = []
diff --git a/tempest/api/object_storage/test_object_expiry.py b/tempest/api/object_storage/test_object_expiry.py
index ac6f49a78..89856b730 100644
--- a/tempest/api/object_storage/test_object_expiry.py
+++ b/tempest/api/object_storage/test_object_expiry.py
@@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
import time
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/object_storage/test_object_formpost.py b/tempest/api/object_storage/test_object_formpost.py
index 3e0fc7b67..c2d767a04 100644
--- a/tempest/api/object_storage/test_object_formpost.py
+++ b/tempest/api/object_storage/test_object_formpost.py
@@ -17,8 +17,9 @@ import hmac
import time
import urlparse
+from tempest_lib.common.utils import data_utils
+
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/object_storage/test_object_formpost_negative.py b/tempest/api/object_storage/test_object_formpost_negative.py
index d92a2e503..8d758b1d7 100644
--- a/tempest/api/object_storage/test_object_formpost_negative.py
+++ b/tempest/api/object_storage/test_object_formpost_negative.py
@@ -17,10 +17,10 @@ import hmac
import time
import urlparse
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/object_storage/test_object_services.py b/tempest/api/object_storage/test_object_services.py
index a4d037764..2091eb5e2 100644
--- a/tempest/api/object_storage/test_object_services.py
+++ b/tempest/api/object_storage/test_object_services.py
@@ -21,14 +21,19 @@ import time
import zlib
import six
+from tempest_lib.common.utils import data_utils
from tempest.api.object_storage import base
+from tempest import clients
from tempest.common import custom_matchers
-from tempest.common.utils import data_utils
+from tempest import config
from tempest import test
+CONF = config.CONF
+
class ObjectTest(base.BaseObjectTest):
+
@classmethod
def resource_setup(cls):
super(ObjectTest, cls).resource_setup()
@@ -1016,6 +1021,19 @@ class ObjectTest(base.BaseObjectTest):
class PublicObjectTest(base.BaseObjectTest):
+
+ @classmethod
+ def setup_credentials(cls):
+ super(PublicObjectTest, cls).setup_credentials()
+ cls.os_alt = clients.Manager(
+ cls.isolated_creds.get_creds_by_roles(
+ roles=[CONF.object_storage.operator_role], force_new=True))
+
+ @classmethod
+ def setup_clients(cls):
+ super(PublicObjectTest, cls).setup_clients()
+ cls.identity_client_alt = cls.os_alt.identity_client
+
def setUp(self):
super(PublicObjectTest, self).setUp()
self.container_name = data_utils.rand_name(name='TestContainer')
diff --git a/tempest/api/object_storage/test_object_slo.py b/tempest/api/object_storage/test_object_slo.py
index b013752ae..96a78b9dd 100644
--- a/tempest/api/object_storage/test_object_slo.py
+++ b/tempest/api/object_storage/test_object_slo.py
@@ -15,11 +15,11 @@
import hashlib
import json
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
from tempest.common import custom_matchers
-from tempest.common.utils import data_utils
from tempest import test
# Each segment, except for the final one, must be at least 1 megabyte
diff --git a/tempest/api/object_storage/test_object_temp_url.py b/tempest/api/object_storage/test_object_temp_url.py
index e6b0b05d5..b404597c4 100644
--- a/tempest/api/object_storage/test_object_temp_url.py
+++ b/tempest/api/object_storage/test_object_temp_url.py
@@ -17,8 +17,9 @@ import hmac
import time
import urlparse
+from tempest_lib.common.utils import data_utils
+
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/object_storage/test_object_temp_url_negative.py b/tempest/api/object_storage/test_object_temp_url_negative.py
index 343749e2b..67b129c7a 100644
--- a/tempest/api/object_storage/test_object_temp_url_negative.py
+++ b/tempest/api/object_storage/test_object_temp_url_negative.py
@@ -17,10 +17,10 @@ import hmac
import time
import urlparse
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/object_storage/test_object_version.py b/tempest/api/object_storage/test_object_version.py
index 225159f6a..cd2d3c350 100644
--- a/tempest/api/object_storage/test_object_version.py
+++ b/tempest/api/object_storage/test_object_version.py
@@ -15,8 +15,9 @@
import testtools
+from tempest_lib.common.utils import data_utils
+
from tempest.api.object_storage import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/orchestration/base.py b/tempest/api/orchestration/base.py
index b8b056289..08fddb5f8 100644
--- a/tempest/api/orchestration/base.py
+++ b/tempest/api/orchestration/base.py
@@ -12,11 +12,11 @@
import os.path
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
import yaml
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
import tempest.test
diff --git a/tempest/api/orchestration/stacks/templates/neutron_basic.yaml b/tempest/api/orchestration/stacks/templates/neutron_basic.yaml
index 878ff681c..be33c94b6 100644
--- a/tempest/api/orchestration/stacks/templates/neutron_basic.yaml
+++ b/tempest/api/orchestration/stacks/templates/neutron_basic.yaml
@@ -51,12 +51,14 @@ resources:
key_name: {get_param: KeyName}
networks:
- network: {get_resource: Network}
+ user_data_format: RAW
user_data:
str_replace:
template: |
- #!/bin/bash -v
+ #!/bin/sh -v
- while ! /opt/aws/bin/cfn-signal -e 0 -r "SmokeServerNeutron created" \
+ SIGNAL_DATA='{"Status": "SUCCESS", "Reason": "SmokeServerNeutron created", "Data": "Application has completed configuration.", "UniqueId": "00000"}'
+ while ! curl --fail -X PUT -H 'Content-Type:' --data-binary "$SIGNAL_DATA" \
'wait_handle' ; do sleep 3; done
params:
wait_handle: {get_resource: WaitHandleNeutron}
diff --git a/tempest/api/orchestration/stacks/test_environment.py b/tempest/api/orchestration/stacks/test_environment.py
index 29897093f..df67ef2eb 100644
--- a/tempest/api/orchestration/stacks/test_environment.py
+++ b/tempest/api/orchestration/stacks/test_environment.py
@@ -12,8 +12,9 @@
import logging
+from tempest_lib.common.utils import data_utils
+
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_limits.py b/tempest/api/orchestration/stacks/test_limits.py
index 833fb28ba..c49b040d4 100644
--- a/tempest/api/orchestration/stacks/test_limits.py
+++ b/tempest/api/orchestration/stacks/test_limits.py
@@ -11,10 +11,11 @@
# under the License.
import logging
+
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_neutron_resources.py b/tempest/api/orchestration/stacks/test_neutron_resources.py
index 253d19799..bcf091a71 100644
--- a/tempest/api/orchestration/stacks/test_neutron_resources.py
+++ b/tempest/api/orchestration/stacks/test_neutron_resources.py
@@ -14,10 +14,10 @@
import logging
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest.api.orchestration import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest import test
@@ -32,8 +32,6 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
@classmethod
def skip_checks(cls):
super(NeutronResourcesTestJSON, cls).skip_checks()
- if not CONF.orchestration.image_ref:
- raise cls.skipException("No image available to test")
if not CONF.service_available.neutron:
raise cls.skipException("Neutron support is required")
@@ -68,7 +66,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
parameters={
'KeyName': cls.keypair_name,
'InstanceType': CONF.orchestration.instance_type,
- 'ImageId': CONF.orchestration.image_ref,
+ 'ImageId': CONF.compute.image_ref,
'ExternalNetworkId': cls.external_network_id,
'timeout': CONF.orchestration.build_timeout,
'DNSServers': CONF.network.dns_servers,
@@ -96,7 +94,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
for resource in resources:
cls.test_resources[resource['logical_resource_id']] = resource
- @test.attr(type='slow')
+ @test.attr(type='gate')
@test.idempotent_id('f9e2664c-bc44-4eef-98b6-495e4f9d74b3')
def test_created_resources(self):
"""Verifies created neutron resources."""
@@ -115,7 +113,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
self.assertEqual(resource_type, resource['resource_type'])
self.assertEqual('CREATE_COMPLETE', resource['resource_status'])
- @test.attr(type='slow')
+ @test.attr(type='gate')
@test.idempotent_id('c572b915-edb1-4e90-b196-c7199a6848c0')
@test.services('network')
def test_created_network(self):
@@ -128,7 +126,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
self.assertEqual(self.neutron_basic_template['resources'][
'Network']['properties']['name'], network['name'])
- @test.attr(type='slow')
+ @test.attr(type='gate')
@test.idempotent_id('e8f84b96-f9d7-4684-ad5f-340203e9f2c2')
@test.services('network')
def test_created_subnet(self):
@@ -147,7 +145,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
'Subnet']['properties']['ip_version'], subnet['ip_version'])
self.assertEqual(str(self.subnet_cidr), subnet['cidr'])
- @test.attr(type='slow')
+ @test.attr(type='gate')
@test.idempotent_id('96af4c7f-5069-44bc-bdcf-c0390f8a67d1')
@test.services('network')
def test_created_router(self):
@@ -161,7 +159,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
router['external_gateway_info']['network_id'])
self.assertEqual(True, router['admin_state_up'])
- @test.attr(type='slow')
+ @test.attr(type='gate')
@test.idempotent_id('89f605bd-153e-43ee-a0ed-9919b63423c5')
@test.services('network')
def test_created_router_interface(self):
@@ -185,7 +183,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
self.assertEqual(str(self.subnet_cidr.iter_hosts().next()),
router_interface_ip)
- @test.attr(type='slow')
+ @test.attr(type='gate')
@test.idempotent_id('75d85316-4ac2-4c0e-a1a9-edd2148fc10e')
@test.services('compute', 'network')
def test_created_server(self):
diff --git a/tempest/api/orchestration/stacks/test_non_empty_stack.py b/tempest/api/orchestration/stacks/test_non_empty_stack.py
index e8f352222..9c5a6d52f 100644
--- a/tempest/api/orchestration/stacks/test_non_empty_stack.py
+++ b/tempest/api/orchestration/stacks/test_non_empty_stack.py
@@ -12,8 +12,9 @@
import logging
+from tempest_lib.common.utils import data_utils
+
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
@@ -29,7 +30,7 @@ class StacksTestJSON(base.BaseOrchestrationTest):
super(StacksTestJSON, cls).resource_setup()
cls.stack_name = data_utils.rand_name('heat')
template = cls.read_template('non_empty_stack')
- image_id = (CONF.orchestration.image_ref or
+ image_id = (CONF.compute.image_ref or
cls._create_image()['id'])
flavor = CONF.orchestration.instance_type
# create the stack
diff --git a/tempest/api/orchestration/stacks/test_nova_keypair_resources.py b/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
index 6d2dcc7f6..28ef5a536 100644
--- a/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
+++ b/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
@@ -13,8 +13,9 @@
import logging
+from tempest_lib.common.utils import data_utils
+
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_soft_conf.py b/tempest/api/orchestration/stacks/test_soft_conf.py
index 7387c62ab..697c6ee86 100644
--- a/tempest/api/orchestration/stacks/test_soft_conf.py
+++ b/tempest/api/orchestration/stacks/test_soft_conf.py
@@ -10,10 +10,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_stacks.py b/tempest/api/orchestration/stacks/test_stacks.py
index a9b3a6b14..3e61de4a6 100644
--- a/tempest/api/orchestration/stacks/test_stacks.py
+++ b/tempest/api/orchestration/stacks/test_stacks.py
@@ -10,8 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_swift_resources.py b/tempest/api/orchestration/stacks/test_swift_resources.py
index 1290dfe04..6884c6b18 100644
--- a/tempest/api/orchestration/stacks/test_swift_resources.py
+++ b/tempest/api/orchestration/stacks/test_swift_resources.py
@@ -12,9 +12,11 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
+
+from tempest_lib.common.utils import data_utils
+
from tempest.api.orchestration import base
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_templates.py b/tempest/api/orchestration/stacks/test_templates.py
index d0fc1cf4e..8c07adeb0 100644
--- a/tempest/api/orchestration/stacks/test_templates.py
+++ b/tempest/api/orchestration/stacks/test_templates.py
@@ -10,8 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/orchestration/stacks/test_volumes.py b/tempest/api/orchestration/stacks/test_volumes.py
index 5a1a6d787..5f03e16eb 100644
--- a/tempest/api/orchestration/stacks/test_volumes.py
+++ b/tempest/api/orchestration/stacks/test_volumes.py
@@ -12,10 +12,10 @@
import logging
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.orchestration import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/telemetry/base.py b/tempest/api/telemetry/base.py
index c521b37ed..fff04fb7e 100644
--- a/tempest/api/telemetry/base.py
+++ b/tempest/api/telemetry/base.py
@@ -12,9 +12,9 @@
import time
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import timeutils
diff --git a/tempest/api/telemetry/test_telemetry_alarming_api.py b/tempest/api/telemetry/test_telemetry_alarming_api.py
index 768b6ea32..8bc97e8da 100644
--- a/tempest/api/telemetry/test_telemetry_alarming_api.py
+++ b/tempest/api/telemetry/test_telemetry_alarming_api.py
@@ -10,10 +10,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.telemetry import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/volume/admin/test_multi_backend.py b/tempest/api/volume/admin/test_multi_backend.py
index 2e4b614ac..09ec075c2 100644
--- a/tempest/api/volume/admin/test_multi_backend.py
+++ b/tempest/api/volume/admin/test_multi_backend.py
@@ -10,8 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/volume/admin/test_snapshots_actions.py b/tempest/api/volume/admin/test_snapshots_actions.py
index 4834be13a..cb55869d4 100644
--- a/tempest/api/volume/admin/test_snapshots_actions.py
+++ b/tempest/api/volume/admin/test_snapshots_actions.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/volume/admin/test_volume_quotas.py b/tempest/api/volume/admin/test_volume_quotas.py
index cd9155224..7a64de3cf 100644
--- a/tempest/api/volume/admin/test_volume_quotas.py
+++ b/tempest/api/volume/admin/test_volume_quotas.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import test
QUOTA_KEYS = ['gigabytes', 'snapshots', 'volumes']
diff --git a/tempest/api/volume/admin/test_volume_types.py b/tempest/api/volume/admin/test_volume_types.py
index 01242f982..4669e0ef0 100644
--- a/tempest/api/volume/admin/test_volume_types.py
+++ b/tempest/api/volume/admin/test_volume_types.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/volume/admin/test_volume_types_extra_specs.py b/tempest/api/volume/admin/test_volume_types_extra_specs.py
index 5ca838ef7..a1b80ce8d 100644
--- a/tempest/api/volume/admin/test_volume_types_extra_specs.py
+++ b/tempest/api/volume/admin/test_volume_types_extra_specs.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/volume/admin/test_volume_types_extra_specs_negative.py b/tempest/api/volume/admin/test_volume_types_extra_specs_negative.py
index 6d2c4fbe6..1eed8008d 100644
--- a/tempest/api/volume/admin/test_volume_types_extra_specs_negative.py
+++ b/tempest/api/volume/admin/test_volume_types_extra_specs_negative.py
@@ -15,10 +15,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/volume/admin/test_volumes_actions.py b/tempest/api/volume/admin/test_volumes_actions.py
index dc96839b2..29de04d18 100644
--- a/tempest/api/volume/admin/test_volumes_actions.py
+++ b/tempest/api/volume/admin/test_volumes_actions.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils as utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils as utils
from tempest import test
diff --git a/tempest/api/volume/admin/test_volumes_backup.py b/tempest/api/volume/admin/test_volumes_backup.py
index 6b0580fb8..986e9862e 100644
--- a/tempest/api/volume/admin/test_volumes_backup.py
+++ b/tempest/api/volume/admin/test_volumes_backup.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index 4f94f34c3..e5cff23e0 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
diff --git a/tempest/api/volume/test_qos.py b/tempest/api/volume/test_qos.py
index b08a01947..f80679000 100644
--- a/tempest/api/volume/test_qos.py
+++ b/tempest/api/volume/test_qos.py
@@ -12,8 +12,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils as utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils as utils
from tempest import test
diff --git a/tempest/api/volume/test_volumes_actions.py b/tempest/api/volume/test_volumes_actions.py
index 5cad6b443..7771300d3 100644
--- a/tempest/api/volume/test_volumes_actions.py
+++ b/tempest/api/volume/test_volumes_actions.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/volume/test_volumes_get.py b/tempest/api/volume/test_volumes_get.py
index d03bd8d74..1fa1d5fd5 100644
--- a/tempest/api/volume/test_volumes_get.py
+++ b/tempest/api/volume/test_volumes_get.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from testtools import matchers
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api/volume/test_volumes_list.py b/tempest/api/volume/test_volumes_list.py
index ef7cebbaf..b5bf362b5 100644
--- a/tempest/api/volume/test_volumes_list.py
+++ b/tempest/api/volume/test_volumes_list.py
@@ -15,10 +15,10 @@
# under the License.
import operator
+from tempest_lib.common.utils import data_utils
from testtools import matchers
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/volume/test_volumes_negative.py b/tempest/api/volume/test_volumes_negative.py
index 27fd4955e..b59a3130b 100644
--- a/tempest/api/volume/test_volumes_negative.py
+++ b/tempest/api/volume/test_volumes_negative.py
@@ -15,10 +15,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import test
diff --git a/tempest/api/volume/test_volumes_snapshots.py b/tempest/api/volume/test_volumes_snapshots.py
index b6cdd6bf3..9a72e9011 100644
--- a/tempest/api/volume/test_volumes_snapshots.py
+++ b/tempest/api/volume/test_volumes_snapshots.py
@@ -10,8 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest import test
diff --git a/tempest/api/volume/test_volumes_snapshots_negative.py b/tempest/api/volume/test_volumes_snapshots_negative.py
index fbbc6239d..6307b621e 100644
--- a/tempest/api/volume/test_volumes_snapshots_negative.py
+++ b/tempest/api/volume/test_volumes_snapshots_negative.py
@@ -12,10 +12,10 @@
import uuid
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest.api.volume import base
-from tempest.common.utils import data_utils
from tempest import config
from tempest import test
diff --git a/tempest/api_schema/response/compute/v2/servers.py b/tempest/api_schema/response/compute/v2/servers.py
index 0132350da..83dbb4f10 100644
--- a/tempest/api_schema/response/compute/v2/servers.py
+++ b/tempest/api_schema/response/compute/v2/servers.py
@@ -93,6 +93,15 @@ get_server['response_body']['properties']['server']['required'].append(
# 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 @@ list_servers_detail['response_body']['properties']['servers']['items'][
'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/cmd/verify_tempest_config.py b/tempest/cmd/verify_tempest_config.py
index 697965fa6..909de966b 100755
--- a/tempest/cmd/verify_tempest_config.py
+++ b/tempest/cmd/verify_tempest_config.py
@@ -28,7 +28,6 @@ from tempest import config
CONF = config.CONF
-RAW_HTTP = httplib2.Http()
CONF_PARSER = None
@@ -83,7 +82,11 @@ def _get_api_versions(os, service):
}
client_dict[service].skip_path()
endpoint = _get_unversioned_endpoint(client_dict[service].base_url)
- __, body = RAW_HTTP.request(endpoint, 'GET')
+ dscv = CONF.identity.disable_ssl_certificate_validation
+ ca_certs = CONF.identity.ca_certificates_file
+ raw_http = httplib2.Http(disable_ssl_certificate_validation=dscv,
+ ca_certs=ca_certs)
+ __, body = raw_http.request(endpoint, 'GET')
client_dict[service].reset_path()
body = json.loads(body)
if service == 'keystone':
diff --git a/tempest/common/accounts.py b/tempest/common/accounts.py
index 89de69b75..8766e7d12 100644
--- a/tempest/common/accounts.py
+++ b/tempest/common/accounts.py
@@ -236,10 +236,16 @@ class Accounts(cred_provider.CredentialProvider):
def get_admin_creds(self):
return self.get_creds_by_roles([CONF.identity.admin_role])
- def admin_available(self):
- if not self.hash_dict['roles'].get(CONF.identity.admin_role):
+ def is_role_available(self, role):
+ if self.use_default_creds:
+ return False
+ else:
+ if self.hash_dict['roles'].get(role):
+ return True
return False
- return True
+
+ def admin_available(self):
+ return self.is_role_available(CONF.identity.admin_role)
class NotLockingAccounts(Accounts):
diff --git a/tempest/common/cred_provider.py b/tempest/common/cred_provider.py
index c22dc1f96..ea628f651 100644
--- a/tempest/common/cred_provider.py
+++ b/tempest/common/cred_provider.py
@@ -117,3 +117,7 @@ class CredentialProvider(object):
@abc.abstractmethod
def get_creds_by_roles(self, roles, force_new=False):
return
+
+ @abc.abstractmethod
+ def is_role_available(self, role):
+ return
diff --git a/tempest/common/isolated_creds.py b/tempest/common/isolated_creds.py
index b0531fd1a..ca2bd653a 100644
--- a/tempest/common/isolated_creds.py
+++ b/tempest/common/isolated_creds.py
@@ -13,11 +13,11 @@
# under the License.
import netaddr
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
from tempest.common import cred_provider
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
@@ -79,8 +79,15 @@ class IsolatedCreds(cred_provider.CredentialProvider):
except StopIteration:
msg = 'No "%s" role found' % role_name
raise lib_exc.NotFound(msg)
- self.identity_admin_client.assign_user_role(tenant['id'], user['id'],
- role['id'])
+ try:
+ self.identity_admin_client.assign_user_role(tenant['id'],
+ user['id'],
+ role['id'])
+ except lib_exc.Conflict:
+ LOG.warning('Trying to add %s for user %s in tenant %s but they '
+ ' were already granted that role' % (role_name,
+ user['name'],
+ tenant['name']))
def _delete_user(self, user):
self.identity_admin_client.delete_user(user)
@@ -114,11 +121,6 @@ class IsolatedCreds(cred_provider.CredentialProvider):
email = data_utils.rand_name(root) + suffix + "@example.com"
user = self._create_user(username, self.password,
tenant, email)
- if CONF.service_available.swift:
- # NOTE(andrey-mp): user needs this role to create containers
- # in swift
- swift_operator_role = CONF.object_storage.operator_role
- self._assign_user_role(tenant, user, swift_operator_role)
if admin:
self._assign_user_role(tenant, user, CONF.identity.admin_role)
# Add roles specified in config file
@@ -385,3 +387,6 @@ class IsolatedCreds(cred_provider.CredentialProvider):
def is_multi_tenant(self):
return True
+
+ def is_role_available(self, role):
+ return True
diff --git a/tempest/common/service_client.py b/tempest/common/service_client.py
index fde05afed..ad6610a00 100644
--- a/tempest/common/service_client.py
+++ b/tempest/common/service_client.py
@@ -13,7 +13,6 @@
# under the License.
from tempest_lib.common import rest_client
-from tempest_lib import exceptions as lib_exceptions
from tempest import config
@@ -47,24 +46,6 @@ class ServiceClient(rest_client.RestClient):
super(ServiceClient, self).__init__(auth_provider, service, region,
**params)
- def request(self, method, url, extra_headers=False, headers=None,
- body=None):
- # TODO(oomichi): This translation is just for avoiding a single
- # huge patch to migrate rest_client module to tempest-lib.
- # Ideally(in the future), we need to remove this translation and
- # replace each API tests with tempest-lib's exceptions.
- try:
- return super(ServiceClient, self).request(
- method, url,
- extra_headers=extra_headers,
- headers=headers, body=body)
- # TODO(oomichi): This is just a workaround for failing gate tests
- # when separating Forbidden from Unauthorized in tempest-lib.
- # We will need to remove this translation and replace negative tests
- # with lib_exceptions.Forbidden in the future.
- except lib_exceptions.Forbidden as ex:
- raise lib_exceptions.Unauthorized(ex)
-
class ResponseBody(dict):
"""Class that wraps an http response and dict body into a single value.
diff --git a/tempest/common/utils/data_utils.py b/tempest/common/utils/data_utils.py
deleted file mode 100644
index d44177845..000000000
--- a/tempest/common/utils/data_utils.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright 2012 OpenStack Foundation
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import itertools
-import netaddr
-import random
-import uuid
-
-
-def rand_uuid():
- return str(uuid.uuid4())
-
-
-def rand_uuid_hex():
- return uuid.uuid4().hex
-
-
-def rand_name(name=''):
- randbits = str(random.randint(1, 0x7fffffff))
- if name:
- return name + '-' + randbits
- else:
- return randbits
-
-
-def rand_url():
- randbits = str(random.randint(1, 0x7fffffff))
- return 'https://url-' + randbits + '.com'
-
-
-def rand_int_id(start=0, end=0x7fffffff):
- return random.randint(start, end)
-
-
-def rand_mac_address():
- """Generate an Ethernet MAC address."""
- # NOTE(vish): We would prefer to use 0xfe here to ensure that linux
- # bridge mac addresses don't change, but it appears to
- # conflict with libvirt, so we use the next highest octet
- # that has the unicast and locally administered bits set
- # properly: 0xfa.
- # Discussion: https://bugs.launchpad.net/nova/+bug/921838
- mac = [0xfa, 0x16, 0x3e,
- random.randint(0x00, 0xff),
- random.randint(0x00, 0xff),
- random.randint(0x00, 0xff)]
- return ':'.join(["%02x" % x for x in mac])
-
-
-def parse_image_id(image_ref):
- """Return the image id from a given image ref."""
- return image_ref.rsplit('/')[-1]
-
-
-def arbitrary_string(size=4, base_text=None):
- """
- Return size characters from base_text, repeating the base_text infinitely
- if needed.
- """
- if not base_text:
- base_text = 'test'
- return ''.join(itertools.islice(itertools.cycle(base_text), size))
-
-
-def random_bytes(size=1024):
- """
- Return size randomly selected bytes as a string.
- """
- return ''.join([chr(random.randint(0, 255))
- for i in range(size)])
-
-
-def get_ipv6_addr_by_EUI64(cidr, mac):
- # Check if the prefix is IPv4 address
- is_ipv4 = netaddr.valid_ipv4(cidr)
- if is_ipv4:
- msg = "Unable to generate IP address by EUI64 for IPv4 prefix"
- raise TypeError(msg)
- try:
- eui64 = int(netaddr.EUI(mac).eui64())
- prefix = netaddr.IPNetwork(cidr)
- return netaddr.IPAddress(prefix.first + eui64 ^ (1 << 57))
- except (ValueError, netaddr.AddrFormatError):
- raise TypeError('Bad prefix or mac format for generating IPv6 '
- 'address by EUI-64: %(prefix)s, %(mac)s:'
- % {'prefix': cidr, 'mac': mac})
- except TypeError:
- raise TypeError('Bad prefix type for generate IPv6 address by '
- 'EUI-64: %s' % cidr)
diff --git a/tempest/common/utils/misc.py b/tempest/common/utils/misc.py
deleted file mode 100644
index 0d7827383..000000000
--- a/tempest/common/utils/misc.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2012 OpenStack Foundation
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import inspect
-import re
-
-from tempest.openstack.common import log as logging
-
-LOG = logging.getLogger(__name__)
-
-
-def singleton(cls):
- """Simple wrapper for classes that should only have a single instance."""
- instances = {}
-
- def getinstance():
- if cls not in instances:
- instances[cls] = cls()
- return instances[cls]
- return getinstance
-
-
-def find_test_caller():
- """Find the caller class and test name.
-
- Because we know that the interesting things that call us are
- test_* methods, and various kinds of setUp / tearDown, we
- can look through the call stack to find appropriate methods,
- and the class we were in when those were called.
- """
- caller_name = None
- names = []
- frame = inspect.currentframe()
- is_cleanup = False
- # Start climbing the ladder until we hit a good method
- while True:
- try:
- frame = frame.f_back
- name = frame.f_code.co_name
- names.append(name)
- if re.search("^(test_|setUp|tearDown)", name):
- cname = ""
- if 'self' in frame.f_locals:
- cname = frame.f_locals['self'].__class__.__name__
- if 'cls' in frame.f_locals:
- cname = frame.f_locals['cls'].__name__
- caller_name = cname + ":" + name
- break
- elif re.search("^_run_cleanup", name):
- is_cleanup = True
- elif name == 'main':
- caller_name = 'main'
- break
- else:
- cname = ""
- if 'self' in frame.f_locals:
- cname = frame.f_locals['self'].__class__.__name__
- if 'cls' in frame.f_locals:
- cname = frame.f_locals['cls'].__name__
-
- # the fact that we are running cleanups is indicated pretty
- # deep in the stack, so if we see that we want to just
- # start looking for a real class name, and declare victory
- # once we do.
- if is_cleanup and cname:
- if not re.search("^RunTest", cname):
- caller_name = cname + ":_run_cleanups"
- break
- except Exception:
- break
- # prevents frame leaks
- del frame
- if caller_name is None:
- LOG.debug("Sane call name not found in %s" % names)
- return caller_name
diff --git a/tempest/common/waiters.py b/tempest/common/waiters.py
index 9b11676be..6d50b67a0 100644
--- a/tempest/common/waiters.py
+++ b/tempest/common/waiters.py
@@ -13,7 +13,8 @@
import time
-from tempest.common.utils import misc as misc_utils
+from tempest_lib.common.utils import misc as misc_utils
+
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
diff --git a/tempest/config.py b/tempest/config.py
index a66aa9b3f..0ff7ba72c 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -701,9 +701,6 @@ OrchestrationGroup = [
default='m1.micro',
help="Instance type for tests. Needs to be big enough for a "
"full OS plus the test workload"),
- cfg.StrOpt('image_ref',
- help="Name of heat-cfntools enabled image to use when "
- "launching test instances."),
cfg.StrOpt('keypair_name',
help="Name of existing keypair to launch servers with."),
cfg.IntOpt('max_template_size',
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index f24a22a4b..ef1037c86 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -19,12 +19,12 @@ import subprocess
import netaddr
import six
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
from tempest import clients
from tempest.common import cred_provider
from tempest.common import credentials
-from tempest.common.utils import data_utils
from tempest.common.utils.linux import remote_client
from tempest import config
from tempest import exceptions
@@ -41,8 +41,8 @@ class ScenarioTest(tempest.test.BaseTestCase):
"""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 @@ class ScenarioTest(tempest.test.BaseTestCase):
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 @@ class NetworkScenarioTest(ScenarioTest):
"""
@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 BaremetalProvisionStates(object):
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 @@ class BaremetalScenarioTest(ScenarioTest):
)
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 @@ class EncryptionScenarioTest(ScenarioTest):
"""
@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 @@ class OrchestrationScenarioTest(ScenarioTest):
"""
@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,17 +1376,35 @@ class SwiftScenarioTest(ScenarioTest):
"""
@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"
+ " is not able to provide credentials with the %s role "
+ "assigned." % (cls.__name__, operator_role))
+ raise cls.skipException(skip_msg)
+ else:
+ 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.manager.account_client
- cls.container_client = cls.manager.container_client
- cls.object_client = cls.manager.object_client
+ cls.account_client = cls.os_operator.account_client
+ cls.container_client = cls.os_operator.container_client
+ cls.object_client = cls.os_operator.object_client
def get_swift_stat(self):
"""get swift status for our user account."""
diff --git a/tempest/scenario/orchestration/__init__.py b/tempest/scenario/orchestration/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/tempest/scenario/orchestration/__init__.py
+++ /dev/null
diff --git a/tempest/scenario/orchestration/cfn_init_signal.yaml b/tempest/scenario/orchestration/cfn_init_signal.yaml
deleted file mode 100644
index c95aabfcf..000000000
--- a/tempest/scenario/orchestration/cfn_init_signal.yaml
+++ /dev/null
@@ -1,82 +0,0 @@
-HeatTemplateFormatVersion: '2012-12-12'
-Description: |
- Template which uses a wait condition to confirm that a minimal
- cfn-init and cfn-signal has worked
-Parameters:
- key_name:
- Type: String
- flavor:
- Type: String
- image:
- Type: String
- network:
- Type: String
- timeout:
- Type: Number
-Resources:
- CfnUser:
- Type: AWS::IAM::User
- SmokeSecurityGroup:
- Type: AWS::EC2::SecurityGroup
- Properties:
- GroupDescription: Enable only ping and SSH access
- SecurityGroupIngress:
- - {CidrIp: 0.0.0.0/0, FromPort: '-1', IpProtocol: icmp, ToPort: '-1'}
- - {CidrIp: 0.0.0.0/0, FromPort: '22', IpProtocol: tcp, ToPort: '22'}
- SmokeKeys:
- Type: AWS::IAM::AccessKey
- Properties:
- UserName: {Ref: CfnUser}
- SmokeServer:
- Type: OS::Nova::Server
- Metadata:
- AWS::CloudFormation::Init:
- config:
- files:
- /tmp/smoke-status:
- content: smoke test complete
- /etc/cfn/cfn-credentials:
- content:
- Fn::Replace:
- - SmokeKeys: {Ref: SmokeKeys}
- SecretAccessKey:
- 'Fn::GetAtt': [SmokeKeys, SecretAccessKey]
- - |
- AWSAccessKeyId=SmokeKeys
- AWSSecretKey=SecretAccessKey
- mode: '000400'
- owner: root
- group: root
- Properties:
- image: {Ref: image}
- flavor: {Ref: flavor}
- key_name: {Ref: key_name}
- security_groups:
- - {Ref: SmokeSecurityGroup}
- networks:
- - uuid: {Ref: network}
- user_data:
- Fn::Replace:
- - WaitHandle: {Ref: WaitHandle}
- - |
- #!/bin/bash -v
- /opt/aws/bin/cfn-init
- /opt/aws/bin/cfn-signal -e 0 --data "`cat /tmp/smoke-status`" \
- --id smoke_status "WaitHandle"
- WaitHandle:
- Type: AWS::CloudFormation::WaitConditionHandle
- WaitCondition:
- Type: AWS::CloudFormation::WaitCondition
- DependsOn: SmokeServer
- Properties:
- Handle: {Ref: WaitHandle}
- Timeout: {Ref: timeout}
-Outputs:
- WaitConditionStatus:
- Description: Contents of /tmp/smoke-status on SmokeServer
- Value:
- Fn::GetAtt: [WaitCondition, Data]
- SmokeServerIp:
- Description: IP address of server
- Value:
- Fn::GetAtt: [SmokeServer, first_address]
diff --git a/tempest/scenario/orchestration/test_server_cfn_init.py b/tempest/scenario/orchestration/test_server_cfn_init.py
deleted file mode 100644
index 53f78437e..000000000
--- a/tempest/scenario/orchestration/test_server_cfn_init.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import json
-
-from tempest_lib import decorators
-
-from tempest import config
-from tempest import exceptions
-from tempest.openstack.common import log as logging
-from tempest.scenario import manager
-from tempest import test
-
-CONF = config.CONF
-LOG = logging.getLogger(__name__)
-
-
-class CfnInitScenarioTest(manager.OrchestrationScenarioTest):
-
- def setUp(self):
- super(CfnInitScenarioTest, self).setUp()
- if not CONF.orchestration.image_ref:
- raise self.skipException("No image available to test")
- self.client = self.orchestration_client
- self.template_name = 'cfn_init_signal.yaml'
-
- def assign_keypair(self):
- self.stack_name = self._stack_rand_name()
- if CONF.orchestration.keypair_name:
- self.keypair = None
- self.keypair_name = CONF.orchestration.keypair_name
- else:
- self.keypair = self.create_keypair()
- self.keypair_name = self.keypair['name']
-
- def launch_stack(self):
- net = self._get_default_network()
- self.parameters = {
- 'key_name': self.keypair_name,
- 'flavor': CONF.orchestration.instance_type,
- 'image': CONF.orchestration.image_ref,
- 'timeout': CONF.orchestration.build_timeout,
- 'network': net['id'],
- }
-
- # create the stack
- self.template = self._load_template(__file__, self.template_name)
- stack = self.client.create_stack(
- name=self.stack_name,
- template=self.template,
- parameters=self.parameters)
- stack = stack['stack']
-
- self.stack = self.client.get_stack(stack['id'])
- self.stack_identifier = '%s/%s' % (self.stack_name, self.stack['id'])
- self.addCleanup(self.delete_wrapper,
- self.orchestration_client.delete_stack,
- self.stack_identifier)
-
- def check_stack(self):
- sid = self.stack_identifier
- self.client.wait_for_resource_status(
- sid, 'WaitHandle', 'CREATE_COMPLETE')
- self.client.wait_for_resource_status(
- sid, 'SmokeSecurityGroup', 'CREATE_COMPLETE')
- self.client.wait_for_resource_status(
- sid, 'SmokeKeys', 'CREATE_COMPLETE')
- self.client.wait_for_resource_status(
- sid, 'CfnUser', 'CREATE_COMPLETE')
- self.client.wait_for_resource_status(
- sid, 'SmokeServer', 'CREATE_COMPLETE')
-
- server_resource = self.client.get_resource(sid, 'SmokeServer')
- server_id = server_resource['physical_resource_id']
- server = self.servers_client.get_server(server_id)
- server_ip =\
- server['addresses'][CONF.compute.network_for_ssh][0]['addr']
-
- if not self.ping_ip_address(
- server_ip, ping_timeout=CONF.orchestration.build_timeout):
- self._log_console_output(servers=[server])
- self.fail(
- "(CfnInitScenarioTest:test_server_cfn_init) Timed out waiting "
- "for %s to become reachable" % server_ip)
-
- try:
- self.client.wait_for_resource_status(
- sid, 'WaitCondition', 'CREATE_COMPLETE')
- except (exceptions.StackResourceBuildErrorException,
- exceptions.TimeoutException) as e:
- raise e
- finally:
- # attempt to log the server console regardless of WaitCondition
- # going to complete. This allows successful and failed cloud-init
- # logs to be compared
- self._log_console_output(servers=[server])
-
- self.client.wait_for_stack_status(sid, 'CREATE_COMPLETE')
-
- stack = self.client.get_stack(sid)
-
- # This is an assert of great significance, as it means the following
- # has happened:
- # - cfn-init read the provided metadata and wrote out a file
- # - a user was created and credentials written to the server
- # - a cfn-signal was built which was signed with provided credentials
- # - the wait condition was fulfilled and the stack has changed state
- wait_status = json.loads(
- self._stack_output(stack, 'WaitConditionStatus'))
- self.assertEqual('smoke test complete', wait_status['smoke_status'])
-
- if self.keypair:
- # Check that the user can authenticate with the generated
- # keypair
- self.get_remote_client(server_ip, username='ec2-user',
- log_console_of_servers=[server])
-
- @test.attr(type='slow')
- @decorators.skip_because(bug='1374175')
- @test.idempotent_id('2be9be1f-8106-4ee2-a7ba-444c7557db2f')
- @test.services('orchestration', 'compute')
- def test_server_cfn_init(self):
- self.assign_keypair()
- self.launch_stack()
- self.check_stack()
diff --git a/tempest/scenario/test_aggregates_basic_ops.py b/tempest/scenario/test_aggregates_basic_ops.py
index ff450ded6..4074e9b84 100644
--- a/tempest/scenario/test_aggregates_basic_ops.py
+++ b/tempest/scenario/test_aggregates_basic_ops.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest.common import tempest_fixtures as fixtures
-from tempest.common.utils import data_utils
from tempest.openstack.common import log as logging
from tempest.scenario import manager
from tempest import test
@@ -33,8 +34,8 @@ class TestAggregatesBasicOps(manager.ScenarioTest):
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 4c4dc944a..dd7376a9f 100644
--- a/tempest/scenario/test_dashboard_basic_ops.py
+++ b/tempest/scenario/test_dashboard_basic_ops.py
@@ -57,11 +57,15 @@ class TestDashboardBasicOps(manager.ScenarioTest):
"""
@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 af2b4cbd7..240810934 100644
--- a/tempest/scenario/test_large_ops.py
+++ b/tempest/scenario/test_large_ops.py
@@ -12,9 +12,10 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
+
+from tempest_lib.common.utils import data_utils
from tempest_lib import exceptions as lib_exc
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
@@ -39,11 +40,19 @@ class TestLargeOpsScenario(manager.ScenarioTest):
"""
@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 2dfabe318..0d17048e9 100644
--- a/tempest/scenario/test_load_balancer_basic.py
+++ b/tempest/scenario/test_load_balancer_basic.py
@@ -43,8 +43,8 @@ class TestLoadBalancerBasic(manager.NetworkScenarioTest):
"""
@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 @@ class TestLoadBalancerBasic(manager.NetworkScenarioTest):
@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 6e82a417c..b4837a2e1 100644
--- a/tempest/scenario/test_network_advanced_server_ops.py
+++ b/tempest/scenario/test_network_advanced_server_ops.py
@@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
import testtools
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
@@ -41,8 +41,8 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
"""
@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 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
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()
@@ -84,10 +84,11 @@ class TestNetworkAdvancedServerOps(manager.NetworkScenarioTest):
should_connect=should_connect,
servers_for_debug=[self.server])
floating_ip = self.floating_ip.floating_ip_address
+ # Check FloatingIP status before checking the connectivity
+ self.check_floating_ip_status(self.floating_ip, 'ACTIVE')
self.check_public_network_connectivity(floating_ip, username,
private_key, should_connect,
servers=[self.server])
- self.check_floating_ip_status(self.floating_ip, 'ACTIVE')
def _wait_server_status_and_check_network_connectivity(self):
self.servers_client.wait_for_server_status(self.server['id'], 'ACTIVE')
diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py
index 4199b2ca6..af16aa309 100644
--- a/tempest/scenario/test_network_basic_ops.py
+++ b/tempest/scenario/test_network_basic_ops.py
@@ -16,9 +16,9 @@
import collections
import re
+from tempest_lib.common.utils import data_utils
import testtools
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
@@ -77,23 +77,23 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
"""
@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()
@@ -190,12 +190,13 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
if should_connect:
private_key = self._get_server_key(server)
floatingip_status = 'ACTIVE'
+ # Check FloatingIP Status before initiating a connection
+ if should_check_floating_ip_status:
+ self.check_floating_ip_status(floating_ip, floatingip_status)
# call the common method in the parent class
super(TestNetworkBasicOps, self).check_public_network_connectivity(
ip_address, ssh_login, private_key, should_connect, msg,
self.servers)
- if should_check_floating_ip_status:
- self.check_floating_ip_status(floating_ip, floatingip_status)
def _disassociate_floating_ips(self):
floating_ip, server = self.floating_ip_tuple
@@ -212,11 +213,15 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
self.floating_ip_tuple = Floating_IP_tuple(
floating_ip, server)
- def _create_new_network(self):
+ def _create_new_network(self, create_gateway=False):
self.new_net = self._create_network(tenant_id=self.tenant_id)
- self.new_subnet = self._create_subnet(
- network=self.new_net,
- gateway_ip=None)
+ if create_gateway:
+ self.new_subnet = self._create_subnet(
+ network=self.new_net)
+ else:
+ self.new_subnet = self._create_subnet(
+ network=self.new_net,
+ gateway_ip=None)
def _hotplug_server(self):
old_floating_ip, server = self.floating_ip_tuple
@@ -276,7 +281,8 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
ipatxt = ssh_client.get_ip_list()
return reg.findall(ipatxt)
- def _check_network_internal_connectivity(self, network):
+ def _check_network_internal_connectivity(self, network,
+ should_connect=True):
"""
via ssh check VM internal connectivity:
- ping internal gateway and DHCP port, implying in-tenant connectivity
@@ -290,7 +296,9 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
network_id=network.id)
if p['device_owner'].startswith('network'))
- self._check_server_connectivity(floating_ip, internal_ips)
+ self._check_server_connectivity(floating_ip,
+ internal_ips,
+ should_connect)
def _check_network_external_connectivity(self):
"""
@@ -310,17 +318,22 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
self._check_server_connectivity(self.floating_ip_tuple.floating_ip,
external_ips)
- def _check_server_connectivity(self, floating_ip, address_list):
+ def _check_server_connectivity(self, floating_ip, address_list,
+ should_connect=True):
ip_address = floating_ip.floating_ip_address
private_key = self._get_server_key(self.floating_ip_tuple.server)
ssh_source = self._ssh_to_server(ip_address, private_key)
for remote_ip in address_list:
+ if should_connect:
+ msg = "Timed out waiting for "
+ "%s to become reachable" % remote_ip
+ else:
+ msg = "ip address %s is reachable" % remote_ip
try:
- self.assertTrue(self._check_remote_connectivity(ssh_source,
- remote_ip),
- "Timed out waiting for %s to become "
- "reachable" % remote_ip)
+ self.assertTrue(self._check_remote_connectivity
+ (ssh_source, remote_ip, should_connect),
+ msg)
except Exception:
LOG.exception("Unable to access {dest} via ssh to "
"floating-ip {src}".format(dest=remote_ip,
@@ -379,6 +392,50 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
msg="after re-associate "
"floating ip")
+ @test.idempotent_id('1546850e-fbaa-42f5-8b5f-03d8a6a95f15')
+ @test.attr(type='smoke')
+ @test.services('compute', 'network')
+ def test_connectivity_between_vms_on_different_networks(self):
+ """
+ For a freshly-booted VM with an IP address ("port") on a given
+ network:
+
+ - the Tempest host can ping the IP address.
+
+ - the Tempest host can ssh into the VM via the IP address and
+ successfully execute the following:
+
+ - ping an external IP address, implying external connectivity.
+
+ - ping an external hostname, implying that dns is correctly
+ configured.
+
+ - ping an internal IP address, implying connectivity to another
+ VM on the same network.
+
+ - Create another network on the same tenant with subnet, create
+ an VM on the new network.
+
+ - Ping the new VM from previous VM failed since the new network
+ was not attached to router yet.
+
+ - Attach the new network to the router, Ping the new VM from
+ previous VM succeed.
+
+ """
+ self._setup_network_and_servers()
+ self.check_public_network_connectivity(should_connect=True)
+ self._check_network_internal_connectivity(network=self.network)
+ self._check_network_external_connectivity()
+ self._create_new_network(create_gateway=True)
+ name = data_utils.rand_name('server-smoke')
+ self._create_server(name, self.new_net)
+ self._check_network_internal_connectivity(network=self.new_net,
+ should_connect=False)
+ self.new_subnet.add_to_router(self.router.id)
+ self._check_network_internal_connectivity(network=self.new_net,
+ should_connect=True)
+
@test.idempotent_id('c5adff73-e961-41f1-b4a9-343614f18cfa')
@testtools.skipUnless(CONF.compute_feature_enabled.interface_attach,
'NIC hotplug not available')
diff --git a/tempest/scenario/test_network_v6.py b/tempest/scenario/test_network_v6.py
index d5d2d7711..7b2bdd5a8 100644
--- a/tempest/scenario/test_network_v6.py
+++ b/tempest/scenario/test_network_v6.py
@@ -34,13 +34,8 @@ class TestGettingAddress(manager.NetworkScenarioTest):
"""
@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 @@ class TestGettingAddress(manager.NetworkScenarioTest):
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 4fbadb048..bb6c9b1ea 100644
--- a/tempest/scenario/test_security_groups_basic_ops.py
+++ b/tempest/scenario/test_security_groups_basic_ops.py
@@ -13,8 +13,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
+
from tempest import clients
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log as logging
from tempest.scenario import manager
@@ -119,11 +120,11 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
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 +132,10 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
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 +145,9 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
# 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 +155,7 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
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 d0b595a61..8cbc3885c 100644
--- a/tempest/scenario/test_server_advanced_ops.py
+++ b/tempest/scenario/test_server_advanced_ops.py
@@ -35,12 +35,16 @@ class TestServerAdvancedOps(manager.ScenarioTest):
"""
@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 bd3cefa22..eaa6141ba 100644
--- a/tempest/scenario/test_stamp_pattern.py
+++ b/tempest/scenario/test_stamp_pattern.py
@@ -15,11 +15,11 @@
import time
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
from tempest_lib import exceptions as lib_exc
import testtools
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import log as logging
@@ -54,10 +54,10 @@ class TestStampPattern(manager.ScenarioTest):
"""
@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 83056416f..a10168cab 100644
--- a/tempest/scenario/test_swift_telemetry_middleware.py
+++ b/tempest/scenario/test_swift_telemetry_middleware.py
@@ -44,7 +44,8 @@ class TestSwiftTelemetry(manager.SwiftScenarioTest):
"""
@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,8 +53,11 @@ class TestSwiftTelemetry(manager.SwiftScenarioTest):
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()
- cls.telemetry_client = cls.manager.telemetry_client
+
+ @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):
"""
@@ -79,15 +83,15 @@ class TestSwiftTelemetry(manager.SwiftScenarioTest):
meta = sample['resource_metadata']
if meta.get('container') and meta['container'] != 'None':
containers.append(meta['container'])
- elif (meta.get('target') and
- meta['target']['metadata']['container'] != 'None'):
- containers.append(meta['target']['metadata']['container'])
+ elif (meta.get('target.metadata:container') and
+ meta['target.metadata:container'] != 'None'):
+ containers.append(meta['target.metadata:container'])
if meta.get('object') and meta['object'] != 'None':
objects.append(meta['object'])
- elif (meta.get('target') and
- meta['target']['metadata']['object'] != 'None'):
- objects.append(meta['target']['metadata']['object'])
+ elif (meta.get('target.metadata:object') and
+ meta['target.metadata:object'] != 'None'):
+ objects.append(meta['target.metadata:object'])
return (container_name in containers and obj_name in objects)
diff --git a/tempest/scenario/test_volume_boot_pattern.py b/tempest/scenario/test_volume_boot_pattern.py
index d1ea27088..3c5e88cda 100644
--- a/tempest/scenario/test_volume_boot_pattern.py
+++ b/tempest/scenario/test_volume_boot_pattern.py
@@ -10,9 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+from tempest_lib.common.utils import data_utils
from tempest_lib import decorators
-from tempest.common.utils import data_utils
from tempest import config
from tempest.openstack.common import log
from tempest.scenario import manager
@@ -38,10 +38,10 @@ class TestVolumeBootPattern(manager.ScenarioTest):
* 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
diff --git a/tempest/scenario/utils.py b/tempest/scenario/utils.py
index 68ec6e708..6c00d09be 100644
--- a/tempest/scenario/utils.py
+++ b/tempest/scenario/utils.py
@@ -18,12 +18,12 @@ import re
import string
import unicodedata
+from tempest_lib.common.utils import misc
import testscenarios
import testtools
from tempest import clients
from tempest.common import cred_provider
-from tempest.common.utils import misc
from tempest import config
from tempest import exceptions
diff --git a/tempest/services/image/v1/json/image_client.py b/tempest/services/image/v1/json/image_client.py
index 50f75b3b7..01a9c54ec 100644
--- a/tempest/services/image/v1/json/image_client.py
+++ b/tempest/services/image/v1/json/image_client.py
@@ -20,11 +20,11 @@ import os
import time
import urllib
+from tempest_lib.common.utils import misc as misc_utils
from tempest_lib import exceptions as lib_exc
from tempest.common import glance_http
from tempest.common import service_client
-from tempest.common.utils import misc as misc_utils
from tempest import exceptions
from tempest.openstack.common import log as logging
diff --git a/tempest/services/network/json/network_client.py b/tempest/services/network/json/network_client.py
index 87f133252..53645a5e3 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -14,10 +14,10 @@ import json
import time
import urllib
+from tempest_lib.common.utils import misc
from tempest_lib import exceptions as lib_exc
from tempest.common import service_client
-from tempest.common.utils import misc
from tempest import exceptions
diff --git a/tempest/stress/actions/server_create_destroy.py b/tempest/stress/actions/server_create_destroy.py
index d0e4eeadd..c0a317814 100644
--- a/tempest/stress/actions/server_create_destroy.py
+++ b/tempest/stress/actions/server_create_destroy.py
@@ -12,7 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import config
import tempest.stress.stressaction as stressaction
diff --git a/tempest/stress/actions/ssh_floating.py b/tempest/stress/actions/ssh_floating.py
index b2c612e52..0df2eb1f0 100644
--- a/tempest/stress/actions/ssh_floating.py
+++ b/tempest/stress/actions/ssh_floating.py
@@ -13,7 +13,8 @@
import socket
import subprocess
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import config
import tempest.stress.stressaction as stressaction
import tempest.test
diff --git a/tempest/stress/actions/volume_attach_delete.py b/tempest/stress/actions/volume_attach_delete.py
index a5e393fad..93400c4f9 100644
--- a/tempest/stress/actions/volume_attach_delete.py
+++ b/tempest/stress/actions/volume_attach_delete.py
@@ -11,7 +11,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import config
import tempest.stress.stressaction as stressaction
diff --git a/tempest/stress/actions/volume_attach_verify.py b/tempest/stress/actions/volume_attach_verify.py
index a6abd822d..0baf2de68 100644
--- a/tempest/stress/actions/volume_attach_verify.py
+++ b/tempest/stress/actions/volume_attach_verify.py
@@ -10,13 +10,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tempest.common.utils import data_utils
+import re
+
+from tempest_lib.common.utils import data_utils
+
from tempest.common.utils.linux import remote_client
from tempest import config
import tempest.stress.stressaction as stressaction
import tempest.test
-import re
CONF = config.CONF
diff --git a/tempest/stress/actions/volume_create_delete.py b/tempest/stress/actions/volume_create_delete.py
index 487005537..b1899a067 100644
--- a/tempest/stress/actions/volume_create_delete.py
+++ b/tempest/stress/actions/volume_create_delete.py
@@ -10,7 +10,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
import tempest.stress.stressaction as stressaction
diff --git a/tempest/stress/driver.py b/tempest/stress/driver.py
index 1c2781515..e007a4961 100644
--- a/tempest/stress/driver.py
+++ b/tempest/stress/driver.py
@@ -18,11 +18,11 @@ import signal
import time
from six import moves
+from tempest_lib.common.utils import data_utils
from tempest import clients
from tempest.common import cred_provider
from tempest.common import ssh
-from tempest.common.utils import data_utils
from tempest import config
from tempest import exceptions
from tempest.openstack.common import importutils
diff --git a/tempest/tests/cmd/test_verify_tempest_config.py b/tempest/tests/cmd/test_verify_tempest_config.py
index 17e255088..7c0415610 100644
--- a/tempest/tests/cmd/test_verify_tempest_config.py
+++ b/tempest/tests/cmd/test_verify_tempest_config.py
@@ -49,9 +49,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': {'values': [{'id': 'v2.0'}, {'id': 'v3.0'}]}}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
versions = verify_tempest_config._get_api_versions(fake_os, 'keystone')
self.assertIn('v2.0', versions)
@@ -63,9 +62,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': [{'id': 'v1.0'}, {'id': 'v2.0'}]}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
versions = verify_tempest_config._get_api_versions(fake_os, 'cinder')
self.assertIn('v1.0', versions)
@@ -77,9 +75,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
versions = verify_tempest_config._get_api_versions(fake_os, 'nova')
self.assertIn('v2.0', versions)
@@ -109,9 +106,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': {'values': [{'id': 'v2.0'}]}}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
with mock.patch.object(verify_tempest_config,
'print_and_or_update') as print_mock:
@@ -126,9 +122,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': {'values': [{'id': 'v3.0'}]}}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
with mock.patch.object(verify_tempest_config,
'print_and_or_update') as print_mock:
@@ -143,9 +138,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': [{'id': 'v1.0'}]}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
with mock.patch.object(verify_tempest_config,
'print_and_or_update') as print_mock:
@@ -159,9 +153,8 @@ class TestDiscovery(base.TestCase):
return_value='http://fake_endpoint:5000'))
fake_resp = {'versions': [{'id': 'v2.0'}]}
fake_resp = json.dumps(fake_resp)
- self.useFixture(mockpatch.PatchObject(
- verify_tempest_config.RAW_HTTP, 'request',
- return_value=(None, fake_resp)))
+ self.useFixture(mockpatch.Patch('httplib2.Http.request',
+ return_value=(None, fake_resp)))
fake_os = mock.MagicMock()
with mock.patch.object(verify_tempest_config,
'print_and_or_update') as print_mock:
diff --git a/tempest/tests/common/utils/test_data_utils.py b/tempest/tests/common/utils/test_data_utils.py
deleted file mode 100644
index 7aafdb2f3..000000000
--- a/tempest/tests/common/utils/test_data_utils.py
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright 2014 NEC Corporation.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-from tempest.common.utils import data_utils
-from tempest.tests import base
-
-
-class TestDataUtils(base.TestCase):
-
- def test_rand_uuid(self):
- actual = data_utils.rand_uuid()
- self.assertIsInstance(actual, str)
- self.assertRegexpMatches(actual, "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]"
- "{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
- actual2 = data_utils.rand_uuid()
- self.assertNotEqual(actual, actual2)
-
- def test_rand_uuid_hex(self):
- actual = data_utils.rand_uuid_hex()
- self.assertIsInstance(actual, str)
- self.assertRegexpMatches(actual, "^[0-9a-f]{32}$")
-
- actual2 = data_utils.rand_uuid_hex()
- self.assertNotEqual(actual, actual2)
-
- def test_rand_name(self):
- actual = data_utils.rand_name()
- self.assertIsInstance(actual, str)
- actual2 = data_utils.rand_name()
- self.assertNotEqual(actual, actual2)
-
- actual = data_utils.rand_name('foo')
- self.assertTrue(actual.startswith('foo'))
- actual2 = data_utils.rand_name('foo')
- self.assertTrue(actual.startswith('foo'))
- self.assertNotEqual(actual, actual2)
-
- def test_rand_int(self):
- actual = data_utils.rand_int_id()
- self.assertIsInstance(actual, int)
-
- actual2 = data_utils.rand_int_id()
- self.assertNotEqual(actual, actual2)
-
- def test_rand_mac_address(self):
- actual = data_utils.rand_mac_address()
- self.assertIsInstance(actual, str)
- self.assertRegexpMatches(actual, "^([0-9a-f][0-9a-f]:){5}"
- "[0-9a-f][0-9a-f]$")
-
- actual2 = data_utils.rand_mac_address()
- self.assertNotEqual(actual, actual2)
-
- def test_parse_image_id(self):
- actual = data_utils.parse_image_id("/foo/bar/deadbeaf")
- self.assertEqual("deadbeaf", actual)
-
- def test_arbitrary_string(self):
- actual = data_utils.arbitrary_string()
- self.assertEqual(actual, "test")
- actual = data_utils.arbitrary_string(size=30, base_text="abc")
- self.assertEqual(actual, "abc" * (30 / len("abc")))
- actual = data_utils.arbitrary_string(size=5, base_text="deadbeaf")
- self.assertEqual(actual, "deadb")
diff --git a/tempest/tests/common/utils/test_misc.py b/tempest/tests/common/utils/test_misc.py
deleted file mode 100644
index 554027f3c..000000000
--- a/tempest/tests/common/utils/test_misc.py
+++ /dev/null
@@ -1,88 +0,0 @@
-# Copyright 2014 NEC Corporation.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-
-from tempest.common.utils import misc
-from tempest.tests import base
-
-
-@misc.singleton
-class TestFoo(object):
-
- count = 0
-
- def increment(self):
- self.count += 1
- return self.count
-
-
-@misc.singleton
-class TestBar(object):
-
- count = 0
-
- def increment(self):
- self.count += 1
- return self.count
-
-
-class TestMisc(base.TestCase):
-
- def test_singleton(self):
- test = TestFoo()
- self.assertEqual(0, test.count)
- self.assertEqual(1, test.increment())
- test2 = TestFoo()
- self.assertEqual(1, test.count)
- self.assertEqual(1, test2.count)
- self.assertEqual(test, test2)
- test3 = TestBar()
- self.assertNotEqual(test, test3)
-
- def test_find_test_caller_test_case(self):
- # Calling it from here should give us the method we're in.
- self.assertEqual('TestMisc:test_find_test_caller_test_case',
- misc.find_test_caller())
-
- def test_find_test_caller_setup_self(self):
- def setUp(self):
- return misc.find_test_caller()
- self.assertEqual('TestMisc:setUp', setUp(self))
-
- def test_find_test_caller_setup_no_self(self):
- def setUp():
- return misc.find_test_caller()
- self.assertEqual(':setUp', setUp())
-
- def test_find_test_caller_setupclass_cls(self):
- def setUpClass(cls): # noqa
- return misc.find_test_caller()
- self.assertEqual('TestMisc:setUpClass', setUpClass(self.__class__))
-
- def test_find_test_caller_teardown_self(self):
- def tearDown(self):
- return misc.find_test_caller()
- self.assertEqual('TestMisc:tearDown', tearDown(self))
-
- def test_find_test_caller_teardown_no_self(self):
- def tearDown():
- return misc.find_test_caller()
- self.assertEqual(':tearDown', tearDown())
-
- def test_find_test_caller_teardown_class(self):
- def tearDownClass(cls): # noqa
- return misc.find_test_caller()
- self.assertEqual('TestMisc:tearDownClass',
- tearDownClass(self.__class__))
diff --git a/tempest/tests/test_tenant_isolation.py b/tempest/tests/test_tenant_isolation.py
index 917f63563..a2de0fedd 100644
--- a/tempest/tests/test_tenant_isolation.py
+++ b/tempest/tests/test_tenant_isolation.py
@@ -169,7 +169,6 @@ class TestTenantIsolation(base.TestCase):
'assign_user_role') as user_mock:
admin_creds = iso_creds.get_admin_creds()
user_mock.assert_has_calls([
- mock.call('1234', '1234', '1'),
mock.call('1234', '1234', '1234')])
self.assertEqual(admin_creds.username, 'fake_admin_user')
self.assertEqual(admin_creds.tenant_name, 'fake_admin_tenant')
@@ -195,9 +194,8 @@ class TestTenantIsolation(base.TestCase):
role_creds = iso_creds.get_creds_by_roles(roles=['role1', 'role2'])
calls = user_mock.mock_calls
# Assert that the role creation is called with the 2 specified roles
- self.assertEqual(len(calls), 3)
+ self.assertEqual(len(calls), 2)
args = map(lambda x: x[1], calls)
- self.assertIn(('1234', '1234', '1'), args)
self.assertIn(('1234', '1234', '1234'), args)
self.assertIn(('1234', '1234', '12345'), args)
self.assertEqual(role_creds.username, 'fake_role_user')
diff --git a/tempest/thirdparty/boto/test_ec2_instance_run.py b/tempest/thirdparty/boto/test_ec2_instance_run.py
index 4a2bd2356..19be559fd 100644
--- a/tempest/thirdparty/boto/test_ec2_instance_run.py
+++ b/tempest/thirdparty/boto/test_ec2_instance_run.py
@@ -13,7 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest.common.utils.linux import remote_client
from tempest import config
from tempest import exceptions
diff --git a/tempest/thirdparty/boto/test_ec2_keys.py b/tempest/thirdparty/boto/test_ec2_keys.py
index acf797a20..2272a5ca4 100644
--- a/tempest/thirdparty/boto/test_ec2_keys.py
+++ b/tempest/thirdparty/boto/test_ec2_keys.py
@@ -13,7 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import test
from tempest.thirdparty.boto import test as boto_test
diff --git a/tempest/thirdparty/boto/test_ec2_security_groups.py b/tempest/thirdparty/boto/test_ec2_security_groups.py
index 7f9568b72..ef1ef5294 100644
--- a/tempest/thirdparty/boto/test_ec2_security_groups.py
+++ b/tempest/thirdparty/boto/test_ec2_security_groups.py
@@ -13,7 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import test
from tempest.thirdparty.boto import test as boto_test
diff --git a/tempest/thirdparty/boto/test_s3_buckets.py b/tempest/thirdparty/boto/test_s3_buckets.py
index bf048036b..451ae59ba 100644
--- a/tempest/thirdparty/boto/test_s3_buckets.py
+++ b/tempest/thirdparty/boto/test_s3_buckets.py
@@ -13,7 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import test
from tempest.thirdparty.boto import test as boto_test
diff --git a/tempest/thirdparty/boto/test_s3_ec2_images.py b/tempest/thirdparty/boto/test_s3_ec2_images.py
index 21ea98410..49749bcc4 100644
--- a/tempest/thirdparty/boto/test_s3_ec2_images.py
+++ b/tempest/thirdparty/boto/test_s3_ec2_images.py
@@ -15,7 +15,8 @@
import os
-from tempest.common.utils import data_utils
+from tempest_lib.common.utils import data_utils
+
from tempest import config
from tempest import test
from tempest.thirdparty.boto import test as boto_test
diff --git a/tempest/thirdparty/boto/test_s3_objects.py b/tempest/thirdparty/boto/test_s3_objects.py
index 2d8152d4a..dee6a7c2a 100644
--- a/tempest/thirdparty/boto/test_s3_objects.py
+++ b/tempest/thirdparty/boto/test_s3_objects.py
@@ -16,8 +16,8 @@
import contextlib
import boto.s3.key
+from tempest_lib.common.utils import data_utils
-from tempest.common.utils import data_utils
from tempest import test
from tempest.thirdparty.boto import test as boto_test