Merge "Test creation of server attached to created port"
diff --git a/etc/accounts.yaml.sample b/etc/accounts.yaml.sample
index 64ff8a7..31ceb33 100644
--- a/etc/accounts.yaml.sample
+++ b/etc/accounts.yaml.sample
@@ -33,3 +33,5 @@
   password: 'test_password'
   types:
      - 'admin'
+  resources:
+    network: 'public'
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 175f0d9..1010ba5 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -253,10 +253,6 @@
 # image. (string value)
 #image_alt_ssh_user = root
 
-# Password used to authenticate to an instance using the alternate
-# image. (string value)
-#image_alt_ssh_password = password
-
 # Time in seconds between build status checks. (integer value)
 #build_interval = 1
 
@@ -269,16 +265,16 @@
 #run_ssh = false
 
 # Auth method used for authenticate to the instance. Valid choices
-# are: keypair, configured, adminpass. keypair: start the servers with
-# an ssh keypair. configured: use the configured user and password.
-# adminpass: use the injected adminPass. disabled: avoid using ssh
-# when it is an option. (string value)
+# are: keypair, configured, adminpass and disabled. Keypair: start the
+# servers with a ssh keypair. Configured: use the configured user and
+# password. Adminpass: use the injected adminPass. Disabled: avoid
+# using ssh when it is an option. (string value)
 #ssh_auth_method = keypair
 
 # How to connect to the instance? fixed: using the first ip belongs
-# the fixed network floating: creating and using a floating ip (string
-# value)
-#ssh_connect_method = fixed
+# the fixed network floating: creating and using a floating ip.
+# (string value)
+#ssh_connect_method = floating
 
 # User name used to authenticate to an instance. (string value)
 #ssh_user = root
@@ -286,6 +282,14 @@
 # Timeout in seconds to wait for ping to succeed. (integer value)
 #ping_timeout = 120
 
+# The packet size for ping packets originating from remote linux hosts
+# (integer value)
+#ping_size = 56
+
+# The number of ping packets originating from remote linux hosts
+# (integer value)
+#ping_count = 1
+
 # Timeout in seconds to wait for authentication to succeed. (integer
 # value)
 #ssh_timeout = 300
@@ -301,7 +305,8 @@
 # Name of the fixed network that is visible to all test tenants. If
 # multiple networks are available for a tenant this is the network
 # which will be used for creating servers if tempest does not create a
-# network or a network is not specified elsewhere (string value)
+# network or a network is not specified elsewhere. It may be used for
+# ssh validation only if floating IPs are disabled. (string value)
 #fixed_network_name = <None>
 
 # Network used for SSH connections. Ignored if
@@ -326,10 +331,6 @@
 # Allowed values: public, admin, internal, publicURL, adminURL, internalURL
 #endpoint_type = publicURL
 
-# Path to a private key file for SSH access to remote hosts (string
-# value)
-#path_to_private_key = <None>
-
 # Expected device name when a volume is attached to an instance
 # (string value)
 #volume_device_name = vdb
@@ -746,14 +747,19 @@
 # The mask bits for tenant ipv6 subnets (integer value)
 #tenant_network_v6_mask_bits = 64
 
-# Whether tenant network connectivity should be evaluated directly
-# (boolean value)
+# Whether tenant networks can be reached directly from the test
+# client. This must be set to True when the 'fixed' ssh_connect_method
+# is selected. (boolean value)
 #tenant_networks_reachable = false
 
 # Id of the public network that provides external connectivity (string
 # value)
 #public_network_id =
 
+# Default floating network name. Used to allocate floating IPs when
+# neutron is enabled. (string value)
+#floating_network_name = <None>
+
 # Id of the public router that provides external connectivity. This
 # should only be used when Neutron's 'allow_overlapping_ips' is set to
 # 'False' in neutron.conf. usually not needed past 'Grizzly' release
@@ -1071,6 +1077,38 @@
 #too_slow_to_test = true
 
 
+[validation]
+
+#
+# From tempest.config
+#
+
+# Default IP type used for validation: -fixed: uses the first IP
+# belonging to the fixed network -floating: creates and uses a
+# floating IP (string value)
+# Allowed values: fixed, floating
+#connect_method = floating
+
+# Default authentication method to the instance. Only ssh via keypair
+# is supported for now. Additional methods will be handled in a
+# separate spec. (string value)
+# Allowed values: keypair
+#auth_method = keypair
+
+# Default IP version for ssh connections. (integer value)
+#ip_version_for_ssh = 4
+
+# Timeout in seconds to wait for ping to succeed. (integer value)
+#ping_timeout = 120
+
+# Timeout in seconds to wait for the TCP connection to be successful.
+# (integer value)
+#connect_timeout = 60
+
+# Timeout in seconds to wait for the ssh banner. (integer value)
+#ssh_timeout = 300
+
+
 [volume]
 
 #
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index 4995209..9f1a548 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -352,10 +352,10 @@
 
     @classmethod
     def skip_checks(cls):
+        super(BaseComputeAdminTest, cls).skip_checks()
         if not credentials.is_admin_available():
             msg = ("Missing Identity Admin API credentials in configuration.")
             raise cls.skipException(msg)
-        super(BaseComputeAdminTest, cls).skip_checks()
 
     @classmethod
     def setup_credentials(cls):
diff --git a/tempest/api/compute/servers/test_list_server_filters.py b/tempest/api/compute/servers/test_list_server_filters.py
index f33204d..eccd600 100644
--- a/tempest/api/compute/servers/test_list_server_filters.py
+++ b/tempest/api/compute/servers/test_list_server_filters.py
@@ -69,7 +69,10 @@
 
         network = cls.get_tenant_network()
         if network:
-            cls.fixed_network_name = network['name']
+            if network.get('name'):
+                cls.fixed_network_name = network['name']
+            else:
+                cls.fixed_network_name = None
         else:
             cls.fixed_network_name = None
         network_kwargs = fixed_network.set_networks_kwarg(network)
diff --git a/tempest/api/orchestration/base.py b/tempest/api/orchestration/base.py
index 59fdec0..d4b107e 100644
--- a/tempest/api/orchestration/base.py
+++ b/tempest/api/orchestration/base.py
@@ -199,5 +199,5 @@
                     for r in resources)
 
     def get_stack_output(self, stack_identifier, output_key):
-        body = self.client.get_stack(stack_identifier)
+        body = self.client.show_stack(stack_identifier)
         return self.stack_output(body, output_key)
diff --git a/tempest/api/orchestration/stacks/test_neutron_resources.py b/tempest/api/orchestration/stacks/test_neutron_resources.py
index bcf091a..81e6e82 100644
--- a/tempest/api/orchestration/stacks/test_neutron_resources.py
+++ b/tempest/api/orchestration/stacks/test_neutron_resources.py
@@ -81,8 +81,8 @@
                 # attempt to log the server console to help with debugging
                 # the cause of the server not signalling the waitcondition
                 # to heat.
-                body = cls.client.get_resource(cls.stack_identifier,
-                                               'Server')
+                body = cls.client.show_resource(cls.stack_identifier,
+                                                'Server')
                 server_id = body['physical_resource_id']
                 LOG.debug('Console output for %s', server_id)
                 output = cls.servers_client.get_console_output(
diff --git a/tempest/api/orchestration/stacks/test_non_empty_stack.py b/tempest/api/orchestration/stacks/test_non_empty_stack.py
index 9c5a6d5..5f96de3 100644
--- a/tempest/api/orchestration/stacks/test_non_empty_stack.py
+++ b/tempest/api/orchestration/stacks/test_non_empty_stack.py
@@ -66,7 +66,7 @@
     @test.idempotent_id('992f96e3-41ee-4ff6-91c7-bcfb670c0919')
     def test_stack_show(self):
         """Getting details about created stack should be possible."""
-        stack = self.client.get_stack(self.stack_name)
+        stack = self.client.show_stack(self.stack_name)
         self.assertIsInstance(stack, dict)
         self.assert_fields_in_dict(stack, 'stack_name', 'id', 'links',
                                    'parameters', 'outputs', 'disable_rollback',
@@ -105,8 +105,8 @@
     @test.idempotent_id('2aba03b3-392f-4237-900b-1f5a5e9bd962')
     def test_show_resource(self):
         """Getting details about created resource should be possible."""
-        resource = self.client.get_resource(self.stack_identifier,
-                                            self.resource_name)
+        resource = self.client.show_resource(self.stack_identifier,
+                                             self.resource_name)
         self.assertIsInstance(resource, dict)
         self.assert_fields_in_dict(resource, 'resource_name', 'description',
                                    'links', 'logical_resource_id',
diff --git a/tempest/api/orchestration/stacks/test_nova_keypair_resources.py b/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
index 28ef5a5..acdd4c7 100644
--- a/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
+++ b/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
@@ -73,7 +73,7 @@
     @test.attr(type='gate')
     @test.idempotent_id('8d77dec7-91fd-45a6-943d-5abd45e338a4')
     def test_stack_keypairs_output(self):
-        stack = self.client.get_stack(self.stack_name)
+        stack = self.client.show_stack(self.stack_name)
         self.assertIsInstance(stack, dict)
 
         output_map = {}
diff --git a/tempest/api/orchestration/stacks/test_resource_types.py b/tempest/api/orchestration/stacks/test_resource_types.py
index 32b0b8e..8f15f9c 100644
--- a/tempest/api/orchestration/stacks/test_resource_types.py
+++ b/tempest/api/orchestration/stacks/test_resource_types.py
@@ -32,7 +32,7 @@
         self.assertNotEmpty(resource_types)
 
         for resource_type in resource_types:
-            type_schema = self.client.get_resource_type(resource_type)
+            type_schema = self.client.show_resource_type(resource_type)
             self.assert_fields_in_dict(type_schema, 'properties',
                                        'attributes', 'resource_type')
             self.assertEqual(resource_type, type_schema['resource_type'])
@@ -41,7 +41,7 @@
     @test.idempotent_id('8401821d-65fe-4d43-9fa3-57d5ce3a35c7')
     def test_resource_type_template(self):
         """Verify it is possible to get template about resource types."""
-        type_template = self.client.get_resource_type_template(
+        type_template = self.client.show_resource_type_template(
             'OS::Nova::Server')
         self.assert_fields_in_dict(
             type_template,
diff --git a/tempest/api/orchestration/stacks/test_soft_conf.py b/tempest/api/orchestration/stacks/test_soft_conf.py
index 649bf47..13f0a6c 100644
--- a/tempest/api/orchestration/stacks/test_soft_conf.py
+++ b/tempest/api/orchestration/stacks/test_soft_conf.py
@@ -71,28 +71,28 @@
         self.client.delete_software_deploy(deploy_id)
         # Testing that it is really gone
         self.assertRaises(
-            lib_exc.NotFound, self.client.get_software_deploy,
+            lib_exc.NotFound, self.client.show_software_deployment,
             self.deployment_id)
 
     def _config_delete(self, config_id):
         self.client.delete_software_config(config_id)
         # Testing that it is really gone
         self.assertRaises(
-            lib_exc.NotFound, self.client.get_software_config, config_id)
+            lib_exc.NotFound, self.client.show_software_config, config_id)
 
     @test.attr(type='smoke')
     @test.idempotent_id('136162ed-9445-4b9c-b7fc-306af8b5da99')
     def test_get_software_config(self):
         """Testing software config get."""
         for conf in self.configs:
-            api_config = self.client.get_software_config(conf['id'])
+            api_config = self.client.show_software_config(conf['id'])
             self._validate_config(conf, api_config)
 
     @test.attr(type='smoke')
     @test.idempotent_id('1275c835-c967-4a2c-8d5d-ad533447ed91')
     def test_get_deployment_list(self):
         """Getting a list of all deployments"""
-        deploy_list = self.client.get_software_deploy_list()
+        deploy_list = self.client.list_software_deployments()
         deploy_ids = [deploy['id'] for deploy in
                       deploy_list['software_deployments']]
         self.assertIn(self.deployment_id, deploy_ids)
@@ -101,12 +101,13 @@
     @test.idempotent_id('fe7cd9f9-54b1-429c-a3b7-7df8451db913')
     def test_get_deployment_metadata(self):
         """Testing deployment metadata get"""
-        metadata = self.client.get_software_deploy_meta(self.server_id)
+        metadata = self.client.show_software_deployment_metadata(
+            self.server_id)
         conf_ids = [conf['id'] for conf in metadata['metadata']]
         self.assertIn(self.configs[0]['id'], conf_ids)
 
     def _validate_deployment(self, action, status, reason, config_id):
-        deployment = self.client.get_software_deploy(self.deployment_id)
+        deployment = self.client.show_software_deployment(self.deployment_id)
         self.assertEqual(action, deployment['software_deployment']['action'])
         self.assertEqual(status, deployment['software_deployment']['status'])
         self.assertEqual(reason,
@@ -131,7 +132,8 @@
     @test.idempotent_id('2ac43ab3-34f2-415d-be2e-eabb4d14ee32')
     def test_software_deployment_update_no_metadata_change(self):
         """Testing software deployment update without metadata change."""
-        metadata = self.client.get_software_deploy_meta(self.server_id)
+        metadata = self.client.show_software_deployment_metadata(
+            self.server_id)
         # Updating values without changing the configuration ID
         new_action = 'ACTION_1'
         new_status = 'STATUS_1'
@@ -145,7 +147,8 @@
                                   new_reason, self.configs[0]['id'])
 
         # Metadata should not be changed at this point
-        test_metadata = self.client.get_software_deploy_meta(self.server_id)
+        test_metadata = self.client.show_software_deployment_metadata(
+            self.server_id)
         for key in metadata['metadata'][0]:
             self.assertEqual(
                 metadata['metadata'][0][key],
@@ -155,7 +158,8 @@
     @test.idempotent_id('92c48944-d79d-4595-a840-8e1a581c1a72')
     def test_software_deployment_update_with_metadata_change(self):
         """Testing software deployment update with metadata change."""
-        metadata = self.client.get_software_deploy_meta(self.server_id)
+        metadata = self.client.show_software_deployment_metadata(
+            self.server_id)
         self.client.update_software_deploy(
             self.deployment_id, self.server_id, self.configs[1]['id'],
             self.action, self.status, self.input_values,
@@ -163,7 +167,8 @@
         self._validate_deployment(self.action, self.status,
                                   self.status_reason, self.configs[1]['id'])
         # Metadata should now be changed
-        new_metadata = self.client.get_software_deploy_meta(self.server_id)
+        new_metadata = self.client.show_software_deployment_metadata(
+            self.server_id)
         # Its enough to test the ID in this case
         meta_id = metadata['metadata'][0]['id']
         test_id = new_metadata['metadata'][0]['id']
diff --git a/tempest/api/orchestration/stacks/test_stacks.py b/tempest/api/orchestration/stacks/test_stacks.py
index 147f456..9ce8ebeb 100644
--- a/tempest/api/orchestration/stacks/test_stacks.py
+++ b/tempest/api/orchestration/stacks/test_stacks.py
@@ -52,15 +52,15 @@
         self.assertIn(stack_id, list_ids)
 
         # fetch the stack
-        stack = self.client.get_stack(stack_identifier)
+        stack = self.client.show_stack(stack_identifier)
         self.assertEqual('CREATE_COMPLETE', stack['stack_status'])
 
         # fetch the stack by name
-        stack = self.client.get_stack(stack_name)
+        stack = self.client.show_stack(stack_name)
         self.assertEqual('CREATE_COMPLETE', stack['stack_status'])
 
         # fetch the stack by id
-        stack = self.client.get_stack(stack_id)
+        stack = self.client.show_stack(stack_id)
         self.assertEqual('CREATE_COMPLETE', stack['stack_status'])
 
         # delete the stack
diff --git a/tempest/api/orchestration/stacks/test_volumes.py b/tempest/api/orchestration/stacks/test_volumes.py
index 5f03e16..2b1ec12 100644
--- a/tempest/api/orchestration/stacks/test_volumes.py
+++ b/tempest/api/orchestration/stacks/test_volumes.py
@@ -34,7 +34,7 @@
 
     def _cinder_verify(self, volume_id, template):
         self.assertIsNotNone(volume_id)
-        volume = self.volumes_client.get_volume(volume_id)
+        volume = self.volumes_client.show_volume(volume_id)
         self.assertEqual('available', volume.get('status'))
         self.assertEqual(template['resources']['volume']['properties'][
             'size'], volume.get('size'))
@@ -76,7 +76,7 @@
         self.client.delete_stack(stack_identifier)
         self.client.wait_for_stack_status(stack_identifier, 'DELETE_COMPLETE')
         self.assertRaises(lib_exc.NotFound,
-                          self.volumes_client.get_volume,
+                          self.volumes_client.show_volume,
                           volume_id)
 
     def _cleanup_volume(self, volume_id):
diff --git a/tempest/api/volume/admin/test_multi_backend.py b/tempest/api/volume/admin/test_multi_backend.py
index ad5eb7d..db2d143 100644
--- a/tempest/api/volume/admin/test_multi_backend.py
+++ b/tempest/api/volume/admin/test_multi_backend.py
@@ -139,7 +139,7 @@
         # the multi backend feature has been enabled
         # if multi-backend is enabled: os-vol-attr:host should be like:
         # host@backend_name
-        volume = self.admin_volume_client.get_volume(volume_id)
+        volume = self.admin_volume_client.show_volume(volume_id)
 
         volume1_host = volume['os-vol-host-attr:host']
         msg = ("multi-backend reporting incorrect values for volume %s" %
@@ -150,10 +150,10 @@
         # this test checks that the two volumes created at setUp don't
         # belong to the same backend (if they are, than the
         # volume backend distinction is not working properly)
-        volume = self.admin_volume_client.get_volume(volume1_id)
+        volume = self.admin_volume_client.show_volume(volume1_id)
         volume1_host = volume['os-vol-host-attr:host']
 
-        volume = self.admin_volume_client.get_volume(volume2_id)
+        volume = self.admin_volume_client.show_volume(volume2_id)
         volume2_host = volume['os-vol-host-attr:host']
 
         msg = ("volumes %s and %s were created in the same backend" %
diff --git a/tempest/api/volume/admin/test_snapshots_actions.py b/tempest/api/volume/admin/test_snapshots_actions.py
index db026c1..d6e3f3e 100644
--- a/tempest/api/volume/admin/test_snapshots_actions.py
+++ b/tempest/api/volume/admin/test_snapshots_actions.py
@@ -89,7 +89,7 @@
         self.admin_snapshots_client.\
             reset_snapshot_status(self.snapshot['id'], status)
         snapshot_get \
-            = self.admin_snapshots_client.get_snapshot(self.snapshot['id'])
+            = self.admin_snapshots_client.show_snapshot(self.snapshot['id'])
         self.assertEqual(status, snapshot_get['status'])
 
     @test.attr(type='gate')
@@ -107,7 +107,7 @@
         self.client.update_snapshot_status(self.snapshot['id'],
                                            status, progress)
         snapshot_get \
-            = self.admin_snapshots_client.get_snapshot(self.snapshot['id'])
+            = self.admin_snapshots_client.show_snapshot(self.snapshot['id'])
         self.assertEqual(status, snapshot_get['status'])
         self.assertEqual(progress, snapshot_get[progress_alias])
 
diff --git a/tempest/api/volume/admin/test_volume_quotas.py b/tempest/api/volume/admin/test_volume_quotas.py
index 86d90f6..3ec3219 100644
--- a/tempest/api/volume/admin/test_volume_quotas.py
+++ b/tempest/api/volume/admin/test_volume_quotas.py
@@ -32,14 +32,14 @@
     @test.attr(type='gate')
     @test.idempotent_id('59eada70-403c-4cef-a2a3-a8ce2f1b07a0')
     def test_list_quotas(self):
-        quotas = self.quotas_client.get_quota_set(self.demo_tenant_id)
+        quotas = self.quotas_client.show_quota_set(self.demo_tenant_id)
         for key in QUOTA_KEYS:
             self.assertIn(key, quotas)
 
     @test.attr(type='gate')
     @test.idempotent_id('2be020a2-5fdd-423d-8d35-a7ffbc36e9f7')
     def test_list_default_quotas(self):
-        quotas = self.quotas_client.get_default_quota_set(
+        quotas = self.quotas_client.show_default_quota_set(
             self.demo_tenant_id)
         for key in QUOTA_KEYS:
             self.assertIn(key, quotas)
@@ -48,7 +48,7 @@
     @test.idempotent_id('3d45c99e-cc42-4424-a56e-5cbd212b63a6')
     def test_update_all_quota_resources_for_tenant(self):
         # Admin can update all the resource quota limits for a tenant
-        default_quota_set = self.quotas_client.get_default_quota_set(
+        default_quota_set = self.quotas_client.show_default_quota_set(
             self.demo_tenant_id)
         new_quota_set = {'gigabytes': 1009,
                          'volumes': 11,
@@ -72,7 +72,7 @@
     @test.attr(type='gate')
     @test.idempotent_id('18c51ae9-cb03-48fc-b234-14a19374dbed')
     def test_show_quota_usage(self):
-        quota_usage = self.quotas_client.get_quota_usage(
+        quota_usage = self.quotas_client.show_quota_usage(
             self.os_adm.credentials.tenant_id)
         for key in QUOTA_KEYS:
             self.assertIn(key, quota_usage)
@@ -82,14 +82,14 @@
     @test.attr(type='gate')
     @test.idempotent_id('ae8b6091-48ad-4bfa-a188-bbf5cc02115f')
     def test_quota_usage(self):
-        quota_usage = self.quotas_client.get_quota_usage(
+        quota_usage = self.quotas_client.show_quota_usage(
             self.demo_tenant_id)
 
         volume = self.create_volume()
         self.addCleanup(self.admin_volume_client.delete_volume,
                         volume['id'])
 
-        new_quota_usage = self.quotas_client.get_quota_usage(
+        new_quota_usage = self.quotas_client.show_quota_usage(
             self.demo_tenant_id)
 
         self.assertEqual(quota_usage['volumes']['in_use'] + 1,
@@ -108,7 +108,7 @@
         tenant = identity_client.create_tenant(tenant_name)
         tenant_id = tenant['id']
         self.addCleanup(identity_client.delete_tenant, tenant_id)
-        quota_set_default = self.quotas_client.get_default_quota_set(
+        quota_set_default = self.quotas_client.show_default_quota_set(
             tenant_id)
         volume_default = quota_set_default['volumes']
 
@@ -116,7 +116,7 @@
                                             volumes=(int(volume_default) + 5))
 
         self.quotas_client.delete_quota_set(tenant_id)
-        quota_set_new = self.quotas_client.get_quota_set(tenant_id)
+        quota_set_new = self.quotas_client.show_quota_set(tenant_id)
         self.assertEqual(volume_default, quota_set_new['volumes'])
 
 
diff --git a/tempest/api/volume/admin/test_volume_types.py b/tempest/api/volume/admin/test_volume_types.py
index 681a48a..048b02c 100644
--- a/tempest/api/volume/admin/test_volume_types.py
+++ b/tempest/api/volume/admin/test_volume_types.py
@@ -77,7 +77,7 @@
         self.volumes_client.wait_for_volume_status(volume['id'], 'available')
 
         # Get volume details and Verify
-        fetched_volume = self.volumes_client.get_volume(volume['id'])
+        fetched_volume = self.volumes_client.show_volume(volume['id'])
         self.assertEqual(volume_types[1]['name'],
                          fetched_volume['volume_type'],
                          'The fetched Volume type is different '
@@ -110,7 +110,7 @@
                          "to the requested name")
         self.assertTrue(body['id'] is not None,
                         "Field volume_type id is empty or not found.")
-        fetched_volume_type = self.volume_types_client.get_volume_type(
+        fetched_volume_type = self.volume_types_client.show_volume_type(
             body['id'])
         self.assertEqual(name, fetched_volume_type['name'],
                          'The fetched Volume_type is different '
@@ -146,7 +146,7 @@
 
         # Get encryption type
         fetched_encryption_type = (
-            self.volume_types_client.get_encryption_type(
+            self.volume_types_client.show_encryption_type(
                 encryption_type['volume_type_id']))
         self.assertEqual(provider,
                          fetched_encryption_type['provider'],
@@ -164,7 +164,7 @@
                     "type": "encryption-type"}
         self.volume_types_client.wait_for_resource_deletion(resource)
         deleted_encryption_type = (
-            self.volume_types_client.get_encryption_type(
+            self.volume_types_client.show_encryption_type(
                 encryption_type['volume_type_id']))
         self.assertEmpty(deleted_encryption_type)
 
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 f382a67..0f4dbe5 100644
--- a/tempest/api/volume/admin/test_volume_types_extra_specs.py
+++ b/tempest/api/volume/admin/test_volume_types_extra_specs.py
@@ -77,7 +77,7 @@
         self.assertEqual(extra_specs, body,
                          "Volume type extra spec incorrectly created")
 
-        self.volume_types_client.get_volume_type_extra_specs(
+        self.volume_types_client.show_volume_type_extra_specs(
             self.volume_type['id'],
             extra_specs.keys()[0])
         self.assertEqual(extra_specs, body,
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 7775025..e861c5f 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
@@ -137,7 +137,7 @@
         extra_specs = {"spec1": "val1"}
         self.assertRaises(
             lib_exc.NotFound,
-            self.volume_types_client.get_volume_type_extra_specs,
+            self.volume_types_client.show_volume_type_extra_specs,
             str(uuid.uuid4()), extra_specs.keys()[0])
 
     @test.attr(type='gate')
@@ -147,7 +147,7 @@
             # id.
         self.assertRaises(
             lib_exc.NotFound,
-            self.volume_types_client.get_volume_type_extra_specs,
+            self.volume_types_client.show_volume_type_extra_specs,
             self.volume_type['id'], str(uuid.uuid4()))
 
 
diff --git a/tempest/api/volume/admin/test_volume_types_negative.py b/tempest/api/volume/admin/test_volume_types_negative.py
index d2bf777..d9be337 100644
--- a/tempest/api/volume/admin/test_volume_types_negative.py
+++ b/tempest/api/volume/admin/test_volume_types_negative.py
@@ -45,7 +45,7 @@
     def test_get_nonexistent_type_id(self):
         # Should not be able to get volume type with nonexistent type id.
         self.assertRaises(lib_exc.NotFound,
-                          self.volume_types_client.get_volume_type,
+                          self.volume_types_client.show_volume_type,
                           str(uuid.uuid4()))
 
     @test.attr(type='gate')
diff --git a/tempest/api/volume/admin/test_volumes_actions.py b/tempest/api/volume/admin/test_volumes_actions.py
index 1b69549..feb46a3 100644
--- a/tempest/api/volume/admin/test_volumes_actions.py
+++ b/tempest/api/volume/admin/test_volumes_actions.py
@@ -79,7 +79,7 @@
     def test_volume_reset_status(self):
         # test volume reset status : available->error->available
         self._reset_volume_status(self.volume['id'], 'error')
-        volume_get = self.admin_volume_client.get_volume(
+        volume_get = self.admin_volume_client.show_volume(
             self.volume['id'])
         self.assertEqual('error', volume_get['status'])
 
diff --git a/tempest/api/volume/admin/test_volumes_backup.py b/tempest/api/volume/admin/test_volumes_backup.py
index 6fd2a5e..2d830c8 100644
--- a/tempest/api/volume/admin/test_volumes_backup.py
+++ b/tempest/api/volume/admin/test_volumes_backup.py
@@ -55,11 +55,11 @@
                                                        'available')
 
         # Get a given backup
-        backup = self.backups_adm_client.get_backup(backup['id'])
+        backup = self.backups_adm_client.show_backup(backup['id'])
         self.assertEqual(backup_name, backup['name'])
 
         # Get all backups with detail
-        backups = self.backups_adm_client.list_backups_with_detail()
+        backups = self.backups_adm_client.list_backups(detail=True)
         self.assertIn((backup['name'], backup['id']),
                       [(m['name'], m['id']) for m in backups])
 
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index 1f76b1c..28676b0 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -18,6 +18,7 @@
 from tempest_lib import exceptions as lib_exc
 
 from tempest import clients
+from tempest.common import credentials
 from tempest.common import fixed_network
 from tempest import config
 from tempest import exceptions
@@ -175,14 +176,17 @@
     """Base test case class for all Volume Admin API tests."""
 
     @classmethod
+    def skip_checks(cls):
+        super(BaseVolumeAdminTest, cls).skip_checks()
+        if not credentials.is_admin_available():
+            msg = ("Missing Identity Admin API credentials in configuration.")
+            raise cls.skipException(msg)
+
+    @classmethod
     def setup_credentials(cls):
         super(BaseVolumeAdminTest, cls).setup_credentials()
-        try:
-            cls.adm_creds = cls.isolated_creds.get_admin_creds()
-            cls.os_adm = clients.Manager(credentials=cls.adm_creds)
-        except NotImplementedError:
-            msg = "Missing Volume Admin API credentials in configuration."
-            raise cls.skipException(msg)
+        cls.adm_creds = cls.isolated_creds.get_admin_creds()
+        cls.os_adm = clients.Manager(credentials=cls.adm_creds)
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/volume/test_availability_zone.py b/tempest/api/volume/test_availability_zone.py
index e63cfcd..d544821 100644
--- a/tempest/api/volume/test_availability_zone.py
+++ b/tempest/api/volume/test_availability_zone.py
@@ -32,7 +32,7 @@
     @test.idempotent_id('01f1ae88-eba9-4c6b-a011-6f7ace06b725')
     def test_get_availability_zone_list(self):
         # List of availability zone
-        availability_zone = self.client.get_availability_zone_list()
+        availability_zone = self.client.list_availability_zones()
         self.assertTrue(len(availability_zone) > 0)
 
 
diff --git a/tempest/api/volume/test_qos.py b/tempest/api/volume/test_qos.py
index f806790..edece79 100644
--- a/tempest/api/volume/test_qos.py
+++ b/tempest/api/volume/test_qos.py
@@ -64,7 +64,7 @@
             self.created_qos['id'], vol_type_id)
 
     def _test_get_association_qos(self):
-        body = self.volume_qos_client.get_association_qos(
+        body = self.volume_qos_client.show_association_qos(
             self.created_qos['id'])
 
         associations = []
@@ -102,7 +102,7 @@
     @test.idempotent_id('7aa214cc-ac1a-4397-931f-3bb2e83bb0fd')
     def test_get_qos(self):
         """Tests the detail of a given qos-specs"""
-        body = self.volume_qos_client.get_qos(self.created_qos['id'])
+        body = self.volume_qos_client.show_qos(self.created_qos['id'])
         self.assertEqual(self.qos_name, body['name'])
         self.assertEqual(self.qos_consumer, body['consumer'])
 
@@ -121,7 +121,7 @@
         body = self.volume_qos_client.set_qos_key(self.created_qos['id'],
                                                   iops_bytes='500')
         self.assertEqual(args, body)
-        body = self.volume_qos_client.get_qos(self.created_qos['id'])
+        body = self.volume_qos_client.show_qos(self.created_qos['id'])
         self.assertEqual(args['iops_bytes'], body['specs']['iops_bytes'])
 
         # test the deletion of a specs key from qos-specs
@@ -130,7 +130,7 @@
         operation = 'qos-key-unset'
         self.volume_qos_client.wait_for_qos_operations(self.created_qos['id'],
                                                        operation, keys)
-        body = self.volume_qos_client.get_qos(self.created_qos['id'])
+        body = self.volume_qos_client.show_qos(self.created_qos['id'])
         self.assertNotIn(keys[0], body['specs'])
 
     @test.attr(type='smoke')
diff --git a/tempest/api/volume/test_snapshot_metadata.py b/tempest/api/volume/test_snapshot_metadata.py
index d4efc2a..536648d 100644
--- a/tempest/api/volume/test_snapshot_metadata.py
+++ b/tempest/api/volume/test_snapshot_metadata.py
@@ -50,12 +50,12 @@
         body = self.client.create_snapshot_metadata(self.snapshot_id,
                                                     metadata)
         # Get the metadata of the snapshot
-        body = self.client.get_snapshot_metadata(self.snapshot_id)
+        body = self.client.show_snapshot_metadata(self.snapshot_id)
         self.assertEqual(metadata, body)
         # Delete one item metadata of the snapshot
         self.client.delete_snapshot_metadata_item(
             self.snapshot_id, "key1")
-        body = self.client.get_snapshot_metadata(self.snapshot_id)
+        body = self.client.show_snapshot_metadata(self.snapshot_id)
         self.assertEqual(expected, body)
 
     @test.attr(type='gate')
@@ -71,13 +71,13 @@
         body = self.client.create_snapshot_metadata(self.snapshot_id,
                                                     metadata)
         # Get the metadata of the snapshot
-        body = self.client.get_snapshot_metadata(self.snapshot_id)
+        body = self.client.show_snapshot_metadata(self.snapshot_id)
         self.assertEqual(metadata, body)
         # Update metadata item
         body = self.client.update_snapshot_metadata(
             self.snapshot_id, update)
         # Get the metadata of the snapshot
-        body = self.client.get_snapshot_metadata(self.snapshot_id)
+        body = self.client.show_snapshot_metadata(self.snapshot_id)
         self.assertEqual(update, body)
 
     @test.attr(type='gate')
@@ -95,13 +95,13 @@
         body = self.client.create_snapshot_metadata(self.snapshot_id,
                                                     metadata)
         # Get the metadata of the snapshot
-        body = self.client.get_snapshot_metadata(self.snapshot_id)
+        body = self.client.show_snapshot_metadata(self.snapshot_id)
         self.assertEqual(metadata, body)
         # Update metadata item
         body = self.client.update_snapshot_metadata_item(
             self.snapshot_id, "key3", update_item)
         # Get the metadata of the snapshot
-        body = self.client.get_snapshot_metadata(self.snapshot_id)
+        body = self.client.show_snapshot_metadata(self.snapshot_id)
         self.assertEqual(expect, body)
 
 
diff --git a/tempest/api/volume/test_volume_metadata.py b/tempest/api/volume/test_volume_metadata.py
index e601349..a0e1161 100644
--- a/tempest/api/volume/test_volume_metadata.py
+++ b/tempest/api/volume/test_volume_metadata.py
@@ -45,12 +45,12 @@
         body = self.volumes_client.create_volume_metadata(self.volume_id,
                                                           metadata)
         # Get the metadata of the volume
-        body = self.volumes_client.get_volume_metadata(self.volume_id)
+        body = self.volumes_client.show_volume_metadata(self.volume_id)
         self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
         # Delete one item metadata of the volume
         self.volumes_client.delete_volume_metadata_item(
             self.volume_id, "key1")
-        body = self.volumes_client.get_volume_metadata(self.volume_id)
+        body = self.volumes_client.show_volume_metadata(self.volume_id)
         self.assertNotIn("key1", body)
         del metadata["key1"]
         self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
@@ -70,13 +70,13 @@
         body = self.volumes_client.create_volume_metadata(
             self.volume_id, metadata)
         # Get the metadata of the volume
-        body = self.volumes_client.get_volume_metadata(self.volume_id)
+        body = self.volumes_client.show_volume_metadata(self.volume_id)
         self.assertThat(body.items(), matchers.ContainsAll(metadata.items()))
         # Update metadata
         body = self.volumes_client.update_volume_metadata(
             self.volume_id, update)
         # Get the metadata of the volume
-        body = self.volumes_client.get_volume_metadata(self.volume_id)
+        body = self.volumes_client.show_volume_metadata(self.volume_id)
         self.assertThat(body.items(), matchers.ContainsAll(update.items()))
 
     @test.attr(type='gate')
@@ -98,7 +98,7 @@
         body = self.volumes_client.update_volume_metadata_item(
             self.volume_id, "key3", update_item)
         # Get the metadata of the volume
-        body = self.volumes_client.get_volume_metadata(self.volume_id)
+        body = self.volumes_client.show_volume_metadata(self.volume_id)
         self.assertThat(body.items(), matchers.ContainsAll(expect.items()))
 
 
diff --git a/tempest/api/volume/test_volume_transfers.py b/tempest/api/volume/test_volume_transfers.py
index 40947df..4acab39 100644
--- a/tempest/api/volume/test_volume_transfers.py
+++ b/tempest/api/volume/test_volume_transfers.py
@@ -71,7 +71,7 @@
                                            'awaiting-transfer')
 
         # Get a volume transfer
-        body = self.client.get_volume_transfer(transfer_id)
+        body = self.client.show_volume_transfer(transfer_id)
         self.assertEqual(volume['id'], body['volume_id'])
 
         # List volume transfers, the result should be greater than
diff --git a/tempest/api/volume/test_volumes_actions.py b/tempest/api/volume/test_volumes_actions.py
index 1872ec7..fecb98b 100644
--- a/tempest/api/volume/test_volumes_actions.py
+++ b/tempest/api/volume/test_volumes_actions.py
@@ -86,7 +86,7 @@
                         self.volume['id'],
                         'available')
         self.addCleanup(self.client.detach_volume, self.volume['id'])
-        volume = self.client.get_volume(self.volume['id'])
+        volume = self.client.show_volume(self.volume['id'])
         self.assertIn('attachments', volume)
         attachment = self.client.get_attachment_from_volume(volume)
         self.assertEqual(mountpoint, attachment['device'])
@@ -117,12 +117,12 @@
         # Mark volume as reserved.
         body = self.client.reserve_volume(self.volume['id'])
         # To get the volume info
-        body = self.client.get_volume(self.volume['id'])
+        body = self.client.show_volume(self.volume['id'])
         self.assertIn('attaching', body['status'])
         # Unmark volume as reserved.
         body = self.client.unreserve_volume(self.volume['id'])
         # To get the volume info
-        body = self.client.get_volume(self.volume['id'])
+        body = self.client.show_volume(self.volume['id'])
         self.assertIn('available', body['status'])
 
     def _is_true(self, val):
@@ -136,7 +136,7 @@
         self.client.update_volume_readonly(self.volume['id'],
                                            readonly)
         # Get Volume information
-        fetched_volume = self.client.get_volume(self.volume['id'])
+        fetched_volume = self.client.show_volume(self.volume['id'])
         bool_flag = self._is_true(fetched_volume['metadata']['readonly'])
         self.assertEqual(True, bool_flag)
 
@@ -145,7 +145,7 @@
         self.client.update_volume_readonly(self.volume['id'], readonly)
 
         # Get Volume information
-        fetched_volume = self.client.get_volume(self.volume['id'])
+        fetched_volume = self.client.show_volume(self.volume['id'])
         bool_flag = self._is_true(fetched_volume['metadata']['readonly'])
         self.assertEqual(False, bool_flag)
 
diff --git a/tempest/api/volume/test_volumes_extend.py b/tempest/api/volume/test_volumes_extend.py
index 35c12bc..38bb748 100644
--- a/tempest/api/volume/test_volumes_extend.py
+++ b/tempest/api/volume/test_volumes_extend.py
@@ -35,7 +35,7 @@
         extend_size = int(self.volume['size']) + 1
         self.client.extend_volume(self.volume['id'], extend_size)
         self.client.wait_for_volume_status(self.volume['id'], 'available')
-        volume = self.client.get_volume(self.volume['id'])
+        volume = self.client.show_volume(self.volume['id'])
         self.assertEqual(int(volume['size']), extend_size)
 
 
diff --git a/tempest/api/volume/test_volumes_get.py b/tempest/api/volume/test_volumes_get.py
index 1fa1d5f..1027f48 100644
--- a/tempest/api/volume/test_volumes_get.py
+++ b/tempest/api/volume/test_volumes_get.py
@@ -60,7 +60,7 @@
         self.assertTrue(volume['id'] is not None,
                         "Field volume id is empty or not found.")
         # Get Volume information
-        fetched_volume = self.client.get_volume(volume['id'])
+        fetched_volume = self.client.show_volume(volume['id'])
         self.assertEqual(v_name,
                          fetched_volume[self.name_field],
                          'The fetched Volume name is different '
@@ -92,8 +92,8 @@
         # Assert response body for update_volume method
         self.assertEqual(new_v_name, update_volume[self.name_field])
         self.assertEqual(new_desc, update_volume[self.descrip_field])
-        # Assert response body for get_volume method
-        updated_volume = self.client.get_volume(volume['id'])
+        # Assert response body for show_volume method
+        updated_volume = self.client.show_volume(volume['id'])
         self.assertEqual(volume['id'], updated_volume['id'])
         self.assertEqual(new_v_name, updated_volume[self.name_field])
         self.assertEqual(new_desc, updated_volume[self.descrip_field])
diff --git a/tempest/api/volume/test_volumes_list.py b/tempest/api/volume/test_volumes_list.py
index 29e3324..1c7b1c8 100644
--- a/tempest/api/volume/test_volumes_list.py
+++ b/tempest/api/volume/test_volumes_list.py
@@ -70,7 +70,7 @@
         cls.metadata = {'Type': 'work'}
         for i in range(3):
             volume = cls.create_volume(metadata=cls.metadata)
-            volume = cls.client.get_volume(volume['id'])
+            volume = cls.client.show_volume(volume['id'])
             cls.volume_list.append(volume)
             cls.volume_id_list.append(volume['id'])
 
@@ -89,7 +89,7 @@
         """
         if with_detail:
             fetched_vol_list = \
-                self.client.list_volumes_with_detail(params=params)
+                self.client.list_volumes(detail=True, params=params)
         else:
             fetched_vol_list = self.client.list_volumes(params=params)
 
@@ -125,7 +125,7 @@
     def test_volume_list_with_details(self):
         # Get a list of Volumes with details
         # Fetch all Volumes
-        fetched_list = self.client.list_volumes_with_detail()
+        fetched_list = self.client.list_volumes(detail=True)
         self.assertVolumesIn(fetched_list, self.volume_list)
 
     @test.attr(type='gate')
@@ -133,7 +133,7 @@
     def test_volume_list_by_name(self):
         volume = self.volume_list[data_utils.rand_int_id(0, 2)]
         params = {self.name: volume[self.name]}
-        fetched_vol = self.client.list_volumes(params)
+        fetched_vol = self.client.list_volumes(params=params)
         self.assertEqual(1, len(fetched_vol), str(fetched_vol))
         self.assertEqual(fetched_vol[0][self.name],
                          volume[self.name])
@@ -143,7 +143,7 @@
     def test_volume_list_details_by_name(self):
         volume = self.volume_list[data_utils.rand_int_id(0, 2)]
         params = {self.name: volume[self.name]}
-        fetched_vol = self.client.list_volumes_with_detail(params)
+        fetched_vol = self.client.list_volumes(detail=True, params=params)
         self.assertEqual(1, len(fetched_vol), str(fetched_vol))
         self.assertEqual(fetched_vol[0][self.name],
                          volume[self.name])
@@ -152,7 +152,7 @@
     @test.idempotent_id('39654e13-734c-4dab-95ce-7613bf8407ce')
     def test_volumes_list_by_status(self):
         params = {'status': 'available'}
-        fetched_list = self.client.list_volumes(params)
+        fetched_list = self.client.list_volumes(params=params)
         self._list_by_param_value_and_assert(params)
         self.assertVolumesIn(fetched_list, self.volume_list,
                              fields=self.VOLUME_FIELDS)
@@ -161,7 +161,7 @@
     @test.idempotent_id('2943f712-71ec-482a-bf49-d5ca06216b9f')
     def test_volumes_list_details_by_status(self):
         params = {'status': 'available'}
-        fetched_list = self.client.list_volumes_with_detail(params)
+        fetched_list = self.client.list_volumes(detail=True, params=params)
         for volume in fetched_list:
             self.assertEqual('available', volume['status'])
         self.assertVolumesIn(fetched_list, self.volume_list)
@@ -172,7 +172,7 @@
         volume = self.volume_list[data_utils.rand_int_id(0, 2)]
         zone = volume['availability_zone']
         params = {'availability_zone': zone}
-        fetched_list = self.client.list_volumes(params)
+        fetched_list = self.client.list_volumes(params=params)
         self._list_by_param_value_and_assert(params)
         self.assertVolumesIn(fetched_list, self.volume_list,
                              fields=self.VOLUME_FIELDS)
@@ -183,7 +183,7 @@
         volume = self.volume_list[data_utils.rand_int_id(0, 2)]
         zone = volume['availability_zone']
         params = {'availability_zone': zone}
-        fetched_list = self.client.list_volumes_with_detail(params)
+        fetched_list = self.client.list_volumes(detail=True, params=params)
         for volume in fetched_list:
             self.assertEqual(zone, volume['availability_zone'])
         self.assertVolumesIn(fetched_list, self.volume_list)
diff --git a/tempest/api/volume/test_volumes_negative.py b/tempest/api/volume/test_volumes_negative.py
index a47e964..aba245a 100644
--- a/tempest/api/volume/test_volumes_negative.py
+++ b/tempest/api/volume/test_volumes_negative.py
@@ -43,7 +43,7 @@
     @test.idempotent_id('f131c586-9448-44a4-a8b0-54ca838aa43e')
     def test_volume_get_nonexistent_volume_id(self):
         # Should not be able to get a non-existent volume
-        self.assertRaises(lib_exc.NotFound, self.client.get_volume,
+        self.assertRaises(lib_exc.NotFound, self.client.show_volume,
                           str(uuid.uuid4()))
 
     @test.attr(type=['negative', 'gate'])
@@ -152,14 +152,14 @@
     @test.idempotent_id('30799cfd-7ee4-446c-b66c-45b383ed211b')
     def test_get_invalid_volume_id(self):
         # Should not be able to get volume with invalid id
-        self.assertRaises(lib_exc.NotFound, self.client.get_volume,
+        self.assertRaises(lib_exc.NotFound, self.client.show_volume,
                           '#$%%&^&^')
 
     @test.attr(type=['negative', 'gate'])
     @test.idempotent_id('c6c3db06-29ad-4e91-beb0-2ab195fe49e3')
     def test_get_volume_without_passing_volume_id(self):
         # Should not be able to get volume when empty ID is passed
-        self.assertRaises(lib_exc.NotFound, self.client.get_volume, '')
+        self.assertRaises(lib_exc.NotFound, self.client.show_volume, '')
 
     @test.attr(type=['negative', 'gate'])
     @test.idempotent_id('1f035827-7c32-4019-9240-b4ec2dbd9dfd')
@@ -266,7 +266,7 @@
     def test_list_volumes_with_nonexistent_name(self):
         v_name = data_utils.rand_name('Volume')
         params = {self.name_field: v_name}
-        fetched_volume = self.client.list_volumes(params)
+        fetched_volume = self.client.list_volumes(params=params)
         self.assertEqual(0, len(fetched_volume))
 
     @test.attr(type=['negative', 'gate'])
@@ -275,14 +275,14 @@
         v_name = data_utils.rand_name('Volume')
         params = {self.name_field: v_name}
         fetched_volume = \
-            self.client.list_volumes_with_detail(params)
+            self.client.list_volumes(detail=True, params=params)
         self.assertEqual(0, len(fetched_volume))
 
     @test.attr(type=['negative', 'gate'])
     @test.idempotent_id('143b279b-7522-466b-81be-34a87d564a7c')
     def test_list_volumes_with_invalid_status(self):
         params = {'status': 'null'}
-        fetched_volume = self.client.list_volumes(params)
+        fetched_volume = self.client.list_volumes(params=params)
         self.assertEqual(0, len(fetched_volume))
 
     @test.attr(type=['negative', 'gate'])
@@ -290,7 +290,7 @@
     def test_list_volumes_detail_with_invalid_status(self):
         params = {'status': 'null'}
         fetched_volume = \
-            self.client.list_volumes_with_detail(params)
+            self.client.list_volumes(detail=True, params=params)
         self.assertEqual(0, len(fetched_volume))
 
 
diff --git a/tempest/api/volume/test_volumes_snapshots.py b/tempest/api/volume/test_volumes_snapshots.py
index b277390..2c15f92 100644
--- a/tempest/api/volume/test_volumes_snapshots.py
+++ b/tempest/api/volume/test_volumes_snapshots.py
@@ -50,7 +50,7 @@
         if with_detail:
             fetched_snap_list = \
                 self.snapshots_client.\
-                list_snapshots_with_detail(params=params)
+                list_snapshots(detail=True, params=params)
         else:
             fetched_snap_list = \
                 self.snapshots_client.list_snapshots(params=params)
@@ -98,7 +98,7 @@
         snapshot = self.create_snapshot(self.volume_origin['id'], **params)
 
         # Get the snap and check for some of its details
-        snap_get = self.snapshots_client.get_snapshot(snapshot['id'])
+        snap_get = self.snapshots_client.show_snapshot(snapshot['id'])
         self.assertEqual(self.volume_origin['id'],
                          snap_get['volume_id'],
                          "Referred volume origin mismatch")
@@ -119,9 +119,9 @@
         # Assert response body for update_snapshot method
         self.assertEqual(new_s_name, update_snapshot[self.name_field])
         self.assertEqual(new_desc, update_snapshot[self.descrip_field])
-        # Assert response body for get_snapshot method
+        # Assert response body for show_snapshot method
         updated_snapshot = \
-            self.snapshots_client.get_snapshot(snapshot['id'])
+            self.snapshots_client.show_snapshot(snapshot['id'])
         self.assertEqual(new_s_name, updated_snapshot[self.name_field])
         self.assertEqual(new_desc, updated_snapshot[self.descrip_field])
 
diff --git a/tempest/api/volume/v2/test_volumes_list.py b/tempest/api/volume/v2/test_volumes_list.py
index f6b52a9..04ea361 100644
--- a/tempest/api/volume/v2/test_volumes_list.py
+++ b/tempest/api/volume/v2/test_volumes_list.py
@@ -45,7 +45,7 @@
         cls.metadata = {'Type': 'work'}
         for i in range(3):
             volume = cls.create_volume(metadata=cls.metadata)
-            volume = cls.client.get_volume(volume['id'])
+            volume = cls.client.show_volume(volume['id'])
             cls.volume_list.append(volume)
             cls.volume_id_list.append(volume['id'])
 
@@ -70,7 +70,8 @@
                       'sort_dir': sort_dir,
                       'sort_key': sort_key
                       }
-            fetched_volume = self.client.list_volumes_with_detail(params)
+            fetched_volume = self.client.list_volumes(detail=True,
+                                                      params=params)
             self.assertEqual(limit, len(fetched_volume),
                              "The count of volumes is %s, expected:%s " %
                              (len(fetched_volume), limit))
diff --git a/tempest/api_schema/response/compute/flavors.py b/tempest/api_schema/response/compute/flavors.py
deleted file mode 100644
index 65f2c28..0000000
--- a/tempest/api_schema/response/compute/flavors.py
+++ /dev/null
@@ -1,80 +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.api_schema.response.compute import parameter_types
-
-list_flavors = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'flavors': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'name': {'type': 'string'},
-                        'links': parameter_types.links,
-                        'id': {'type': 'string'}
-                    },
-                    'required': ['name', 'links', 'id']
-                }
-            },
-            'flavors_links': parameter_types.links
-        },
-        # NOTE(gmann): flavors_links attribute is not necessary
-        # to be present always So it is not 'required'.
-        'required': ['flavors']
-    }
-}
-
-common_flavor_info = {
-    'type': 'object',
-    'properties': {
-        'name': {'type': 'string'},
-        'links': parameter_types.links,
-        'ram': {'type': 'integer'},
-        'vcpus': {'type': 'integer'},
-        'swap': {'type': 'integer'},
-        'disk': {'type': 'integer'},
-        'id': {'type': 'string'}
-    },
-    'required': ['name', 'links', 'ram', 'vcpus',
-                 'swap', 'disk', 'id']
-}
-
-common_flavor_list_details = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'flavors': {
-                'type': 'array',
-                'items': common_flavor_info
-            }
-        },
-        'required': ['flavors']
-    }
-}
-
-common_flavor_details = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'flavor': common_flavor_info
-        },
-        'required': ['flavor']
-    }
-}
diff --git a/tempest/api_schema/response/compute/hosts.py b/tempest/api_schema/response/compute/hosts.py
deleted file mode 100644
index 2596c27..0000000
--- a/tempest/api_schema/response/compute/hosts.py
+++ /dev/null
@@ -1,85 +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.
-
-common_start_up_body = {
-    'type': 'object',
-    'properties': {
-        'host': {'type': 'string'},
-        'power_action': {'enum': ['startup']}
-    },
-    'required': ['host', 'power_action']
-}
-
-list_hosts = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'hosts': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'host_name': {'type': 'string'},
-                        'service': {'type': 'string'},
-                        'zone': {'type': 'string'}
-                    },
-                    'required': ['host_name', 'service', 'zone']
-                }
-            }
-        },
-        'required': ['hosts']
-    }
-}
-
-show_host_detail = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'host': {
-                'type': 'array',
-                'item': {
-                    'type': 'object',
-                    'properties': {
-                        'resource': {
-                            'type': 'object',
-                            'properties': {
-                                'cpu': {'type': 'integer'},
-                                'disk_gb': {'type': 'integer'},
-                                'host': {'type': 'string'},
-                                'memory_mb': {'type': 'integer'},
-                                'project': {'type': 'string'}
-                            },
-                            'required': ['cpu', 'disk_gb', 'host',
-                                         'memory_mb', 'project']
-                        }
-                    },
-                    'required': ['resource']
-                }
-            }
-        },
-        'required': ['host']
-    }
-}
-
-update_host_common = {
-    'type': 'object',
-    'properties': {
-        'host': {'type': 'string'},
-        'maintenance_mode': {'enum': ['on_maintenance', 'off_maintenance']},
-        'status': {'enum': ['enabled', 'disabled']}
-    },
-    'required': ['host', 'maintenance_mode', 'status']
-}
diff --git a/tempest/api_schema/response/compute/keypairs.py b/tempest/api_schema/response/compute/keypairs.py
deleted file mode 100644
index 2ae410c..0000000
--- a/tempest/api_schema/response/compute/keypairs.py
+++ /dev/null
@@ -1,62 +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.
-
-list_keypairs = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'keypairs': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'keypair': {
-                            'type': 'object',
-                            'properties': {
-                                'public_key': {'type': 'string'},
-                                'name': {'type': 'string'},
-                                'fingerprint': {'type': 'string'}
-                            },
-                            'required': ['public_key', 'name', 'fingerprint']
-                        }
-                    },
-                    'required': ['keypair']
-                }
-            }
-        },
-        'required': ['keypairs']
-    }
-}
-
-create_keypair = {
-    'type': 'object',
-    'properties': {
-        'keypair': {
-            'type': 'object',
-            'properties': {
-                'fingerprint': {'type': 'string'},
-                'name': {'type': 'string'},
-                'public_key': {'type': 'string'},
-                'user_id': {'type': 'string'},
-                'private_key': {'type': 'string'}
-            },
-            # When create keypair API is being called with 'Public key'
-            # (Importing keypair) then, response body does not contain
-            # 'private_key' So it is not defined as 'required'
-            'required': ['fingerprint', 'name', 'public_key', 'user_id']
-        }
-    },
-    'required': ['keypair']
-}
diff --git a/tempest/api_schema/response/compute/quotas.py b/tempest/api_schema/response/compute/quotas.py
deleted file mode 100644
index 863104c..0000000
--- a/tempest/api_schema/response/compute/quotas.py
+++ /dev/null
@@ -1,46 +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.
-
-common_quota_set = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'quota_set': {
-                'type': 'object',
-                'properties': {
-                    'instances': {'type': 'integer'},
-                    'cores': {'type': 'integer'},
-                    'ram': {'type': 'integer'},
-                    'floating_ips': {'type': 'integer'},
-                    'fixed_ips': {'type': 'integer'},
-                    'metadata_items': {'type': 'integer'},
-                    'key_pairs': {'type': 'integer'},
-                    'security_groups': {'type': 'integer'},
-                    'security_group_rules': {'type': 'integer'},
-                    'server_group_members': {'type': 'integer'},
-                    'server_groups': {'type': 'integer'},
-                },
-                # NOTE: server_group_members and server_groups are represented
-                # when enabling quota_server_group extension. So they should
-                # not be required.
-                'required': ['instances', 'cores', 'ram',
-                             'floating_ips', 'fixed_ips',
-                             'metadata_items', 'key_pairs',
-                             'security_groups', 'security_group_rules']
-            }
-        },
-        'required': ['quota_set']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/flavors.py b/tempest/api_schema/response/compute/v2_1/flavors.py
index 76c4cee..725d17a 100644
--- a/tempest/api_schema/response/compute/v2_1/flavors.py
+++ b/tempest/api_schema/response/compute/v2_1/flavors.py
@@ -12,52 +12,86 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import copy
-
-from tempest.api_schema.response.compute import flavors
 from tempest.api_schema.response.compute import parameter_types
 
-list_flavors_details = copy.deepcopy(flavors.common_flavor_list_details)
+list_flavors = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'flavors': {
+                'type': 'array',
+                'items': {
+                    'type': 'object',
+                    'properties': {
+                        'name': {'type': 'string'},
+                        'links': parameter_types.links,
+                        'id': {'type': 'string'}
+                    },
+                    'required': ['name', 'links', 'id']
+                }
+            },
+            'flavors_links': parameter_types.links
+        },
+        # NOTE(gmann): flavors_links attribute is not necessary
+        # to be present always So it is not 'required'.
+        'required': ['flavors']
+    }
+}
 
-# 'swap' attributes comes as integer value but if it is empty it comes as "".
-# So defining type of as string and integer.
-list_flavors_details['response_body']['properties']['flavors']['items'][
-    'properties']['swap'] = {'type': ['string', 'integer']}
+common_flavor_info = {
+    'type': 'object',
+    'properties': {
+        'name': {'type': 'string'},
+        'links': parameter_types.links,
+        'ram': {'type': 'integer'},
+        'vcpus': {'type': 'integer'},
+        # 'swap' attributes comes as integer value but if it is empty
+        # it comes as "". So defining type of as string and integer.
+        'swap': {'type': ['integer', 'string']},
+        'disk': {'type': 'integer'},
+        'id': {'type': 'string'},
+        'OS-FLV-DISABLED:disabled': {'type': 'boolean'},
+        'os-flavor-access:is_public': {'type': 'boolean'},
+        'rxtx_factor': {'type': 'number'},
+        'OS-FLV-EXT-DATA:ephemeral': {'type': 'integer'}
+    },
+    # 'OS-FLV-DISABLED', 'os-flavor-access', 'rxtx_factor' and
+    # 'OS-FLV-EXT-DATA' are API extensions. So they are not 'required'.
+    'required': ['name', 'links', 'ram', 'vcpus', 'swap', 'disk', 'id']
+}
 
-# Defining 'flavors_links' attributes for V2 flavor schema
-list_flavors_details['response_body'][
-    'properties'].update({'flavors_links': parameter_types.links})
-# NOTE(gmann): flavors_links attribute is not necessary to be
-# present always So it is not 'required'.
-
-# Defining extra attributes for V2 flavor schema
-list_flavors_details['response_body']['properties']['flavors']['items'][
-    'properties'].update({'OS-FLV-DISABLED:disabled': {'type': 'boolean'},
-                          'os-flavor-access:is_public': {'type': 'boolean'},
-                          'rxtx_factor': {'type': 'number'},
-                          'OS-FLV-EXT-DATA:ephemeral': {'type': 'integer'}})
-# 'OS-FLV-DISABLED', 'os-flavor-access', 'rxtx_factor' and 'OS-FLV-EXT-DATA'
-# are API extensions. So they are not 'required'.
+list_flavors_details = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'flavors': {
+                'type': 'array',
+                'items': common_flavor_info
+            },
+            # NOTE(gmann): flavors_links attribute is not necessary
+            # to be present always So it is not 'required'.
+            'flavors_links': parameter_types.links
+        },
+        'required': ['flavors']
+    }
+}
 
 unset_flavor_extra_specs = {
     'status_code': [200]
 }
 
-create_get_flavor_details = copy.deepcopy(flavors.common_flavor_details)
-
-# 'swap' attributes comes as integer value but if it is empty it comes as "".
-# So defining type of as string and integer.
-create_get_flavor_details['response_body']['properties']['flavor'][
-    'properties']['swap'] = {'type': ['string', 'integer']}
-
-# Defining extra attributes for V2 flavor schema
-create_get_flavor_details['response_body']['properties']['flavor'][
-    'properties'].update({'OS-FLV-DISABLED:disabled': {'type': 'boolean'},
-                          'os-flavor-access:is_public': {'type': 'boolean'},
-                          'rxtx_factor': {'type': 'number'},
-                          'OS-FLV-EXT-DATA:ephemeral': {'type': 'integer'}})
-# 'OS-FLV-DISABLED', 'os-flavor-access', 'rxtx_factor' and 'OS-FLV-EXT-DATA'
-# are API extensions. So they are not 'required'.
+create_get_flavor_details = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'flavor': common_flavor_info
+        },
+        'required': ['flavor']
+    }
+}
 
 delete_flavor = {
     'status_code': [202]
diff --git a/tempest/api_schema/response/compute/v2_1/hosts.py b/tempest/api_schema/response/compute/v2_1/hosts.py
index 0944792..72d5a07 100644
--- a/tempest/api_schema/response/compute/v2_1/hosts.py
+++ b/tempest/api_schema/response/compute/v2_1/hosts.py
@@ -14,12 +14,70 @@
 
 import copy
 
-from tempest.api_schema.response.compute import hosts
 
+list_hosts = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'hosts': {
+                'type': 'array',
+                'items': {
+                    'type': 'object',
+                    'properties': {
+                        'host_name': {'type': 'string'},
+                        'service': {'type': 'string'},
+                        'zone': {'type': 'string'}
+                    },
+                    'required': ['host_name', 'service', 'zone']
+                }
+            }
+        },
+        'required': ['hosts']
+    }
+}
+
+get_host_detail = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'host': {
+                'type': 'array',
+                'item': {
+                    'type': 'object',
+                    'properties': {
+                        'resource': {
+                            'type': 'object',
+                            'properties': {
+                                'cpu': {'type': 'integer'},
+                                'disk_gb': {'type': 'integer'},
+                                'host': {'type': 'string'},
+                                'memory_mb': {'type': 'integer'},
+                                'project': {'type': 'string'}
+                            },
+                            'required': ['cpu', 'disk_gb', 'host',
+                                         'memory_mb', 'project']
+                        }
+                    },
+                    'required': ['resource']
+                }
+            }
+        },
+        'required': ['host']
+    }
+}
 
 startup_host = {
     'status_code': [200],
-    'response_body': hosts.common_start_up_body
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'host': {'type': 'string'},
+            'power_action': {'enum': ['startup']}
+        },
+        'required': ['host', 'power_action']
+    }
 }
 
 # The 'power_action' attribute of 'shutdown_host' API is 'shutdown'
@@ -38,5 +96,14 @@
 
 update_host = {
     'status_code': [200],
-    'response_body': hosts.update_host_common
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'host': {'type': 'string'},
+            'maintenance_mode': {'enum': ['on_maintenance',
+                                          'off_maintenance']},
+            'status': {'enum': ['enabled', 'disabled']}
+        },
+        'required': ['host', 'maintenance_mode', 'status']
+    }
 }
diff --git a/tempest/api_schema/response/compute/v2_1/keypairs.py b/tempest/api_schema/response/compute/v2_1/keypairs.py
index ec26fa0..ceae6cf 100644
--- a/tempest/api_schema/response/compute/v2_1/keypairs.py
+++ b/tempest/api_schema/response/compute/v2_1/keypairs.py
@@ -12,8 +12,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.api_schema.response.compute import keypairs
-
 get_keypair = {
     'status_code': [200],
     'response_body': {
@@ -47,9 +45,56 @@
 
 create_keypair = {
     'status_code': [200],
-    'response_body': keypairs.create_keypair
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'keypair': {
+                'type': 'object',
+                'properties': {
+                    'fingerprint': {'type': 'string'},
+                    'name': {'type': 'string'},
+                    'public_key': {'type': 'string'},
+                    'user_id': {'type': 'string'},
+                    'private_key': {'type': 'string'}
+                },
+                # When create keypair API is being called with 'Public key'
+                # (Importing keypair) then, response body does not contain
+                # 'private_key' So it is not defined as 'required'
+                'required': ['fingerprint', 'name', 'public_key', 'user_id']
+            }
+        },
+        'required': ['keypair']
+    }
 }
 
 delete_keypair = {
     'status_code': [202],
 }
+
+list_keypairs = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'keypairs': {
+                'type': 'array',
+                'items': {
+                    'type': 'object',
+                    'properties': {
+                        'keypair': {
+                            'type': 'object',
+                            'properties': {
+                                'public_key': {'type': 'string'},
+                                'name': {'type': 'string'},
+                                'fingerprint': {'type': 'string'}
+                            },
+                            'required': ['public_key', 'name', 'fingerprint']
+                        }
+                    },
+                    'required': ['keypair']
+                }
+            }
+        },
+        'required': ['keypairs']
+    }
+}
diff --git a/tempest/api_schema/response/compute/v2_1/quota_classes.py b/tempest/api_schema/response/compute/v2_1/quota_classes.py
index a7374df..a0cdaf5 100644
--- a/tempest/api_schema/response/compute/v2_1/quota_classes.py
+++ b/tempest/api_schema/response/compute/v2_1/quota_classes.py
@@ -20,12 +20,12 @@
 # NOTE(mriedem): os-quota-class-sets responses are the same as os-quota-sets
 # except for the key in the response body is quota_class_set instead of
 # quota_set, so update this copy of the schema from os-quota-sets.
-quota_set = copy.deepcopy(quotas.quota_set)
-quota_set['response_body']['properties']['quota_class_set'] = (
-    quota_set['response_body']['properties'].pop('quota_set'))
-quota_set['response_body']['required'] = ['quota_class_set']
+get_quota_class_set = copy.deepcopy(quotas.get_quota_set)
+get_quota_class_set['response_body']['properties']['quota_class_set'] = (
+    get_quota_class_set['response_body']['properties'].pop('quota_set'))
+get_quota_class_set['response_body']['required'] = ['quota_class_set']
 
-quota_set_update = copy.deepcopy(quotas.quota_set_update)
-quota_set_update['response_body']['properties']['quota_class_set'] = (
-    quota_set_update['response_body']['properties'].pop('quota_set'))
-quota_set_update['response_body']['required'] = ['quota_class_set']
+update_quota_class_set = copy.deepcopy(quotas.update_quota_set)
+update_quota_class_set['response_body']['properties']['quota_class_set'] = (
+    update_quota_class_set['response_body']['properties'].pop('quota_set'))
+update_quota_class_set['response_body']['required'] = ['quota_class_set']
diff --git a/tempest/api_schema/response/compute/v2_1/quotas.py b/tempest/api_schema/response/compute/v2_1/quotas.py
index 630b227..9141f7e 100644
--- a/tempest/api_schema/response/compute/v2_1/quotas.py
+++ b/tempest/api_schema/response/compute/v2_1/quotas.py
@@ -14,34 +14,49 @@
 
 import copy
 
-from tempest.api_schema.response.compute import quotas
+update_quota_set = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'quota_set': {
+                'type': 'object',
+                'properties': {
+                    'instances': {'type': 'integer'},
+                    'cores': {'type': 'integer'},
+                    'ram': {'type': 'integer'},
+                    'floating_ips': {'type': 'integer'},
+                    'fixed_ips': {'type': 'integer'},
+                    'metadata_items': {'type': 'integer'},
+                    'key_pairs': {'type': 'integer'},
+                    'security_groups': {'type': 'integer'},
+                    'security_group_rules': {'type': 'integer'},
+                    'server_group_members': {'type': 'integer'},
+                    'server_groups': {'type': 'integer'},
+                    'injected_files': {'type': 'integer'},
+                    'injected_file_content_bytes': {'type': 'integer'},
+                    'injected_file_path_bytes': {'type': 'integer'}
+                },
+                # NOTE: server_group_members and server_groups are represented
+                # when enabling quota_server_group extension. So they should
+                # not be required.
+                'required': ['instances', 'cores', 'ram',
+                             'floating_ips', 'fixed_ips',
+                             'metadata_items', 'key_pairs',
+                             'security_groups', 'security_group_rules',
+                             'injected_files', 'injected_file_content_bytes',
+                             'injected_file_path_bytes']
+            }
+        },
+        'required': ['quota_set']
+    }
+}
 
-quota_set = copy.deepcopy(quotas.common_quota_set)
-quota_set['response_body']['properties']['quota_set']['properties'][
+get_quota_set = copy.deepcopy(update_quota_set)
+get_quota_set['response_body']['properties']['quota_set']['properties'][
     'id'] = {'type': 'string'}
-quota_set['response_body']['properties']['quota_set']['properties'][
-    'injected_files'] = {'type': 'integer'}
-quota_set['response_body']['properties']['quota_set']['properties'][
-    'injected_file_content_bytes'] = {'type': 'integer'}
-quota_set['response_body']['properties']['quota_set']['properties'][
-    'injected_file_path_bytes'] = {'type': 'integer'}
-quota_set['response_body']['properties']['quota_set']['required'].extend([
-    'id',
-    'injected_files',
-    'injected_file_content_bytes',
-    'injected_file_path_bytes'])
-
-quota_set_update = copy.deepcopy(quotas.common_quota_set)
-quota_set_update['response_body']['properties']['quota_set']['properties'][
-    'injected_files'] = {'type': 'integer'}
-quota_set_update['response_body']['properties']['quota_set']['properties'][
-    'injected_file_content_bytes'] = {'type': 'integer'}
-quota_set_update['response_body']['properties']['quota_set']['properties'][
-    'injected_file_path_bytes'] = {'type': 'integer'}
-quota_set_update['response_body']['properties']['quota_set'][
-    'required'].extend(['injected_files',
-                        'injected_file_content_bytes',
-                        'injected_file_path_bytes'])
+get_quota_set['response_body']['properties']['quota_set']['required'].extend([
+    'id'])
 
 delete_quota = {
     'status_code': [202]
diff --git a/tempest/cmd/javelin.py b/tempest/cmd/javelin.py
index fec3bd4..f84771f 100755
--- a/tempest/cmd/javelin.py
+++ b/tempest/cmd/javelin.py
@@ -77,7 +77,8 @@
     - name: javelin_cirros
       owner: javelin
       file: cirros-0.3.2-x86_64-blank.img
-      format: ami
+      disk_format: ami
+      container_format: ami
       aki: cirros-0.3.2-x86_64-vmlinuz
       ari: cirros-0.3.2-x86_64-initrd
 
@@ -629,6 +630,15 @@
     for image in images:
         client = client_for_user(image['owner'])
 
+        # DEPRECATED: 'format' was used for ami images
+        # Use 'disk_format' and 'container_format' instead
+        if 'format' in image:
+            LOG.warning("Deprecated: 'format' is deprecated for images "
+                        "description. Please use 'disk_format' and 'container_"
+                        "format' instead.")
+            image['disk_format'] = image['format']
+            image['container_format'] = image['format']
+
         # only upload a new image if the name isn't there
         if _get_image_by_name(client, image['name']):
             LOG.info("Image '%s' already exists" % image['name'])
@@ -636,7 +646,7 @@
 
         # special handling for 3 part image
         extras = {}
-        if image['format'] == 'ami':
+        if image['disk_format'] == 'ami':
             name, fname = _resolve_image(image, 'aki')
             aki = client.images.create_image(
                 'javelin_' + name, 'aki', 'aki')
@@ -651,7 +661,8 @@
 
         _, fname = _resolve_image(image, 'file')
         body = client.images.create_image(
-            image['name'], image['format'], image['format'], **extras)
+            image['name'], image['container_format'],
+            image['disk_format'], **extras)
         image_id = body.get('id')
         client.images.store_image(image_id, open(fname, 'r'))
 
diff --git a/tempest/cmd/verify_tempest_config.py b/tempest/cmd/verify_tempest_config.py
index 3c71e07..b61f286 100755
--- a/tempest/cmd/verify_tempest_config.py
+++ b/tempest/cmd/verify_tempest_config.py
@@ -24,6 +24,7 @@
 from six import moves
 
 from tempest import clients
+from tempest.common import credentials
 from tempest import config
 
 
@@ -254,7 +255,11 @@
     }
     # Get catalog list for endpoints to use for validation
     _token, auth_data = os.auth_provider.get_auth()
-    for entry in auth_data['serviceCatalog']:
+    if os.auth_version == 'v2':
+        catalog_key = 'serviceCatalog'
+    else:
+        catalog_key = 'catalog'
+    for entry in auth_data[catalog_key]:
         services.append(entry['type'])
     # Pull all catalog types from config file and compare against endpoint list
     for cfgname in dir(CONF._config):
@@ -329,7 +334,8 @@
         CONF_PARSER = moves.configparser.SafeConfigParser()
         CONF_PARSER.optionxform = str
         CONF_PARSER.readfp(conf_file)
-    os = clients.Manager()
+    icreds = credentials.get_isolated_credentials('verify_tempest_config')
+    os = clients.Manager(icreds.get_primary_creds())
     services = check_service_availability(os, update)
     results = {}
     for service in ['nova', 'cinder', 'neutron', 'swift']:
diff --git a/tempest/common/accounts.py b/tempest/common/accounts.py
index 6d376d6..acf6d4f 100644
--- a/tempest/common/accounts.py
+++ b/tempest/common/accounts.py
@@ -19,7 +19,9 @@
 from oslo_log import log as logging
 import yaml
 
+from tempest import clients
 from tempest.common import cred_provider
+from tempest.common import fixed_network
 from tempest import config
 from tempest import exceptions
 
@@ -60,15 +62,18 @@
 
     @classmethod
     def get_hash_dict(cls, accounts):
-        hash_dict = {'roles': {}, 'creds': {}}
+        hash_dict = {'roles': {}, 'creds': {}, 'networks': {}}
         # Loop over the accounts read from the yaml file
         for account in accounts:
             roles = []
             types = []
+            resources = []
             if 'roles' in account:
                 roles = account.pop('roles')
             if 'types' in account:
                 types = account.pop('types')
+            if 'resources' in account:
+                resources = account.pop('resources')
             temp_hash = hashlib.md5()
             temp_hash.update(str(account))
             temp_hash_key = temp_hash.hexdigest()
@@ -91,6 +96,13 @@
                         CONF.object_storage.reseller_admin_role,
                         temp_hash_key,
                         hash_dict)
+            # Populate the network subdict
+            for resource in resources:
+                if resource == 'network':
+                    hash_dict['networks'][temp_hash_key] = resources[resource]
+                else:
+                    LOG.warning('Unkown resource type %s, ignoring this field'
+                                % resource)
         return hash_dict
 
     def is_multi_user(self):
@@ -174,7 +186,7 @@
                 "Account file %s doesn't exist" % CONF.auth.test_accounts_file)
         useable_hashes = self._get_match_hash_list(roles)
         free_hash = self._get_free_hash(useable_hashes)
-        return self.hash_dict['creds'][free_hash]
+        return self._wrap_creds_with_network(free_hash)
 
     @lockutils.synchronized('test_accounts_io', external=True)
     def remove_hash(self, hash_string):
@@ -190,8 +202,15 @@
     def get_hash(self, creds):
         for _hash in self.hash_dict['creds']:
             # Comparing on the attributes that are expected in the YAML
-            if all([getattr(creds, k) == self.hash_dict['creds'][_hash][k] for
-                   k in creds.get_init_attributes()]):
+            init_attributes = creds.get_init_attributes()
+            hash_attributes = self.hash_dict['creds'][_hash].copy()
+            if ('user_domain_name' in init_attributes and 'user_domain_name'
+                    not in hash_attributes):
+                # Allow for the case of domain_name populated from config
+                domain_name = CONF.identity.admin_domain_name
+                hash_attributes['user_domain_name'] = domain_name
+            if all([getattr(creds, k) == hash_attributes[k] for
+                   k in init_attributes]):
                 return _hash
         raise AttributeError('Invalid credentials %s' % creds)
 
@@ -202,20 +221,16 @@
     def get_primary_creds(self):
         if self.isolated_creds.get('primary'):
             return self.isolated_creds.get('primary')
-        creds = self._get_creds()
-        primary_credential = cred_provider.get_credentials(
-            identity_version=self.identity_version, **creds)
-        self.isolated_creds['primary'] = primary_credential
-        return primary_credential
+        net_creds = self._get_creds()
+        self.isolated_creds['primary'] = net_creds
+        return net_creds
 
     def get_alt_creds(self):
         if self.isolated_creds.get('alt'):
             return self.isolated_creds.get('alt')
-        creds = self._get_creds()
-        alt_credential = cred_provider.get_credentials(
-            identity_version=self.identity_version, **creds)
-        self.isolated_creds['alt'] = alt_credential
-        return alt_credential
+        net_creds = self._get_creds()
+        self.isolated_creds['alt'] = net_creds
+        return net_creds
 
     def get_creds_by_roles(self, roles, force_new=False):
         roles = list(set(roles))
@@ -228,11 +243,9 @@
         elif exist_creds and force_new:
             new_index = str(roles) + '-' + str(len(self.isolated_creds))
             self.isolated_creds[new_index] = exist_creds
-        creds = self._get_creds(roles=roles)
-        role_credential = cred_provider.get_credentials(
-            identity_version=self.identity_version, **creds)
-        self.isolated_creds[str(roles)] = role_credential
-        return role_credential
+        net_creds = self._get_creds(roles=roles)
+        self.isolated_creds[str(roles)] = net_creds
+        return net_creds
 
     def clear_isolated_creds(self):
         for creds in self.isolated_creds.values():
@@ -252,6 +265,19 @@
     def admin_available(self):
         return self.is_role_available(CONF.identity.admin_role)
 
+    def _wrap_creds_with_network(self, hash):
+        creds_dict = self.hash_dict['creds'][hash]
+        credential = cred_provider.get_credentials(
+            identity_version=self.identity_version, **creds_dict)
+        net_creds = cred_provider.TestResources(credential)
+        net_clients = clients.Manager(credentials=credential)
+        compute_network_client = net_clients.networks_client
+        net_name = self.hash_dict['networks'].get(hash, None)
+        network = fixed_network.get_network_from_name(
+            net_name, compute_network_client)
+        net_creds.set_resources(network=network)
+        return net_creds
+
 
 class NotLockingAccounts(Accounts):
     """Credentials provider which always returns the first and second
@@ -282,8 +308,9 @@
             return self.isolated_creds.get('primary')
         primary_credential = cred_provider.get_configured_credentials(
             credential_type='user', identity_version=self.identity_version)
-        self.isolated_creds['primary'] = primary_credential
-        return primary_credential
+        self.isolated_creds['primary'] = cred_provider.TestResources(
+            primary_credential)
+        return self.isolated_creds['primary']
 
     def get_alt_creds(self):
         if self.isolated_creds.get('alt'):
@@ -291,8 +318,9 @@
         alt_credential = cred_provider.get_configured_credentials(
             credential_type='alt_user',
             identity_version=self.identity_version)
-        self.isolated_creds['alt'] = alt_credential
-        return alt_credential
+        self.isolated_creds['alt'] = cred_provider.TestResources(
+            alt_credential)
+        return self.isolated_creds['alt']
 
     def clear_isolated_creds(self):
         self.isolated_creds = {}
@@ -300,8 +328,8 @@
     def get_admin_creds(self):
         creds = cred_provider.get_configured_credentials(
             "identity_admin", fill_in=False)
-        self.isolated_creds['admin'] = creds
-        return creds
+        self.isolated_creds['admin'] = cred_provider.TestResources(creds)
+        return self.isolated_creds['admin']
 
     def get_creds_by_roles(self, roles, force_new=False):
         msg = "Credentials being specified through the config file can not be"\
diff --git a/tempest/common/cred_provider.py b/tempest/common/cred_provider.py
index 2c6763d..3223027 100644
--- a/tempest/common/cred_provider.py
+++ b/tempest/common/cred_provider.py
@@ -84,6 +84,8 @@
         domain_fields = set(x for x in auth.KeystoneV3Credentials.ATTRIBUTES
                             if 'domain' in x)
         if not domain_fields.intersection(kwargs.keys()):
+            # TODO(andreaf) It might be better here to use a dedicated config
+            # option such as CONF.auth.tenant_isolation_domain_name
             params['user_domain_name'] = CONF.identity.admin_domain_name
         auth_url = CONF.identity.uri_v3
     else:
diff --git a/tempest/common/fixed_network.py b/tempest/common/fixed_network.py
index 67fbab1..1557474 100644
--- a/tempest/common/fixed_network.py
+++ b/tempest/common/fixed_network.py
@@ -13,17 +13,70 @@
 import copy
 from oslo_log import log as logging
 
+from tempest_lib.common.utils import misc as misc_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest.common import isolated_creds
 from tempest import config
-from tempest import exceptions
 
 CONF = config.CONF
 
 LOG = logging.getLogger(__name__)
 
 
+def get_network_from_name(name, compute_networks_client):
+    """Get a full network dict from just a network name
+
+    :param str name: the name of the network to use
+    :param NetworksClientJSON compute_networks_client: The network client
+        object to use for making the network lists api request
+    :return: The full dictionary for the network in question, unless the
+        network for the supplied name can not be found. In which case a dict
+        with just the name will be returned.
+    :rtype: dict
+    """
+    caller = misc_utils.find_test_caller()
+    if not name:
+        network = {'name': name}
+    else:
+        try:
+            resp = compute_networks_client.list_networks(name=name)
+            if isinstance(resp, list):
+                networks = resp
+            elif isinstance(resp, dict):
+                networks = resp['networks']
+            else:
+                raise lib_exc.NotFound()
+            if len(networks) > 0:
+                network = networks[0]
+            else:
+                msg = "Network with name: %s not found" % name
+                if caller:
+                    LOG.warn('(%s) %s' % (caller, msg))
+                else:
+                    LOG.warn(msg)
+                raise lib_exc.NotFound()
+            # To be consistent with network isolation, add name is only
+            # label is available
+            name = network.get('name', network.get('label'))
+            if name:
+                network['name'] = name
+            else:
+                raise lib_exc.NotFound()
+        except lib_exc.NotFound:
+            # In case of nova network, if the fixed_network_name is not
+            # owned by the tenant, and the network client is not an admin
+            # one, list_networks will not find it
+            msg = ('Unable to find network %s. '
+                   'Starting instance without specifying a network.' %
+                   name)
+            if caller:
+                LOG.info('(%s) %s' % (caller, msg))
+            else:
+                LOG.info(msg)
+            network = {'name': name}
+    return network
+
+
 def get_tenant_network(creds_provider, compute_networks_client):
     """Get a network usable by the primary tenant
 
@@ -35,43 +88,25 @@
            is the network to be used, and it's not visible to the tenant
     :return a dict with 'id' and 'name' of the network
     """
+    caller = misc_utils.find_test_caller()
     fixed_network_name = CONF.compute.fixed_network_name
-    network = None
-    # NOTE(andreaf) get_primary_network will always be available once
-    # bp test-accounts-continued is implemented
-    if (isinstance(creds_provider, isolated_creds.IsolatedCreds) and
-        (CONF.service_available.neutron and
-         not CONF.service_available.ironic)):
-        # tenant_allow_isolation == True, so network is defined
-        network = creds_provider.get_primary_creds().network
-    else:
+    net_creds = creds_provider.get_primary_creds()
+    network = getattr(net_creds, 'network', None)
+    if not network or not network.get('name'):
         if fixed_network_name:
-            try:
-                resp = compute_networks_client.list_networks(
-                    name=fixed_network_name)
-                if isinstance(resp, list):
-                    networks = resp
-                elif isinstance(resp, dict):
-                    networks = resp['networks']
-                else:
-                    raise lib_exc.NotFound()
-                if len(networks) > 0:
-                    network = networks[0]
-                else:
-                    msg = "Configured fixed_network_name not found"
-                    raise exceptions.InvalidConfiguration(msg)
-                # To be consistent with network isolation, add name is only
-                # label is available
-                network['name'] = network.get('name', network.get('label'))
-            except lib_exc.NotFound:
-                # In case of nova network, if the fixed_network_name is not
-                # owned by the tenant, and the network client is not an admin
-                # one, list_networks will not find it
-                LOG.info('Unable to find network %s. '
-                         'Starting instance without specifying a network.' %
-                         fixed_network_name)
-                network = {'name': fixed_network_name}
-    LOG.info('Found network %s available for tenant' % network)
+            msg = ('No valid network provided or created, defaulting to '
+                   'fixed_network_name')
+            if caller:
+                LOG.debug('(%s) %s' % (caller, msg))
+            else:
+                LOG.debug(msg)
+            network = get_network_from_name(fixed_network_name,
+                                            compute_networks_client)
+    msg = ('Found network %s available for tenant' % network)
+    if caller:
+        LOG.info('(%s) %s' % (caller, msg))
+    else:
+        LOG.info(msg)
     return network
 
 
@@ -87,5 +122,9 @@
         return params
 
     if network:
-        params.update({"networks": [{'uuid': network['id']}]})
+        if 'id' in network.keys():
+            params.update({"networks": [{'uuid': network['id']}]})
+        else:
+            LOG.warn('The provided network dict: %s was invalid and did not '
+                     ' contain an id' % network)
     return params
diff --git a/tempest/common/utils/linux/remote_client.py b/tempest/common/utils/linux/remote_client.py
index b19faef..29fb493 100644
--- a/tempest/common/utils/linux/remote_client.py
+++ b/tempest/common/utils/linux/remote_client.py
@@ -87,10 +87,11 @@
         cmd = 'sudo sh -c "echo \\"%s\\" >/dev/console"' % message
         return self.exec_command(cmd)
 
-    def ping_host(self, host):
+    def ping_host(self, host, count=CONF.compute.ping_count,
+                  size=CONF.compute.ping_size):
         addr = netaddr.IPAddress(host)
         cmd = 'ping6' if addr.version == 6 else 'ping'
-        cmd += ' -c1 -w1 {0}'.format(host)
+        cmd += ' -c{0} -w{0} -s{1} {2}'.format(count, size, host)
         return self.exec_command(cmd)
 
     def get_mac_address(self):
diff --git a/tempest/config.py b/tempest/config.py
index 3725f58..6b8113e 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -187,10 +187,6 @@
                default="root",
                help="User name used to authenticate to an instance using "
                     "the alternate image."),
-    cfg.StrOpt('image_alt_ssh_password',
-               default="password",
-               help="Password used to authenticate to an instance using "
-                    "the alternate image."),
     cfg.IntOpt('build_interval',
                default=1,
                help="Time in seconds between build status checks."),
@@ -205,16 +201,17 @@
     cfg.StrOpt('ssh_auth_method',
                default='keypair',
                help="Auth method used for authenticate to the instance. "
-                    "Valid choices are: keypair, configured, adminpass. "
-                    "keypair: start the servers with an ssh keypair. "
-                    "configured: use the configured user and password. "
-                    "adminpass: use the injected adminPass. "
-                    "disabled: avoid using ssh when it is an option."),
+                    "Valid choices are: keypair, configured, adminpass "
+                    "and disabled. "
+                    "Keypair: start the servers with a ssh keypair. "
+                    "Configured: use the configured user and password. "
+                    "Adminpass: use the injected adminPass. "
+                    "Disabled: avoid using ssh when it is an option."),
     cfg.StrOpt('ssh_connect_method',
-               default='fixed',
+               default='floating',
                help="How to connect to the instance? "
                     "fixed: using the first ip belongs the fixed network "
-                    "floating: creating and using a floating ip"),
+                    "floating: creating and using a floating ip."),
     cfg.StrOpt('ssh_user',
                default='root',
                help="User name used to authenticate to an instance."),
@@ -222,6 +219,14 @@
                default=120,
                help="Timeout in seconds to wait for ping to "
                     "succeed."),
+    cfg.IntOpt('ping_size',
+               default=56,
+               help="The packet size for ping packets originating "
+                    "from remote linux hosts"),
+    cfg.IntOpt('ping_count',
+               default=1,
+               help="The number of ping packets originating from remote "
+                    "linux hosts"),
     cfg.IntOpt('ssh_timeout',
                default=300,
                help="Timeout in seconds to wait for authentication to "
@@ -239,7 +244,8 @@
                     "tenants. If multiple networks are available for a tenant"
                     " this is the network which will be used for creating "
                     "servers if tempest does not create a network or a "
-                    "network is not specified elsewhere"),
+                    "network is not specified elsewhere. It may be used for "
+                    "ssh validation only if floating IPs are disabled."),
     cfg.StrOpt('network_for_ssh',
                default='public',
                help="Network used for SSH connections. Ignored if "
@@ -264,9 +270,6 @@
                choices=['public', 'admin', 'internal',
                         'publicURL', 'adminURL', 'internalURL'],
                help="The endpoint type to use for the compute service."),
-    cfg.StrOpt('path_to_private_key',
-               help="Path to a private key file for SSH access to remote "
-                    "hosts"),
     cfg.StrOpt('volume_device_name',
                default='vdb',
                help="Expected device name when a volume is attached to "
@@ -449,12 +452,16 @@
                help="The mask bits for tenant ipv6 subnets"),
     cfg.BoolOpt('tenant_networks_reachable',
                 default=False,
-                help="Whether tenant network connectivity should be "
-                     "evaluated directly"),
+                help="Whether tenant networks can be reached directly from "
+                     "the test client. This must be set to True when the "
+                     "'fixed' ssh_connect_method is selected."),
     cfg.StrOpt('public_network_id',
                default="",
                help="Id of the public network that provides external "
                     "connectivity"),
+    cfg.StrOpt('floating_network_name',
+               help="Default floating network name. Used to allocate floating "
+                    "IPs when neutron is enabled."),
     cfg.StrOpt('public_router_id',
                default="",
                help="Id of the public router that provides external "
@@ -536,6 +543,37 @@
                help='The maximum grace period for a claim'),
 ]
 
+validation_group = cfg.OptGroup(name='validation',
+                                title='SSH Validation options')
+
+ValidationGroup = [
+    cfg.StrOpt('connect_method',
+               default='floating',
+               choices=['fixed', 'floating'],
+               help='Default IP type used for validation: '
+                    '-fixed: uses the first IP belonging to the fixed network '
+                    '-floating: creates and uses a floating IP'),
+    cfg.StrOpt('auth_method',
+               default='keypair',
+               choices=['keypair'],
+               help='Default authentication method to the instance. '
+                    'Only ssh via keypair is supported for now. '
+                    'Additional methods will be handled in a separate spec.'),
+    cfg.IntOpt('ip_version_for_ssh',
+               default=4,
+               help='Default IP version for ssh connections.'),
+    cfg.IntOpt('ping_timeout',
+               default=120,
+               help='Timeout in seconds to wait for ping to succeed.'),
+    cfg.IntOpt('connect_timeout',
+               default=60,
+               help='Timeout in seconds to wait for the TCP connection to be '
+                    'successful.'),
+    cfg.IntOpt('ssh_timeout',
+               default=300,
+               help='Timeout in seconds to wait for the ssh banner.'),
+]
+
 volume_group = cfg.OptGroup(name='volume',
                             title='Block Storage Options')
 
@@ -1088,6 +1126,7 @@
     (network_group, NetworkGroup),
     (network_feature_group, NetworkFeaturesGroup),
     (messaging_group, MessagingGroup),
+    (validation_group, ValidationGroup),
     (volume_group, VolumeGroup),
     (volume_feature_group, VolumeFeaturesGroup),
     (object_storage_group, ObjectStoreGroup),
@@ -1148,6 +1187,7 @@
         self.image_feature_enabled = _CONF['image-feature-enabled']
         self.network = _CONF.network
         self.network_feature_enabled = _CONF['network-feature-enabled']
+        self.validation = _CONF.validation
         self.volume = _CONF.volume
         self.volume_feature_enabled = _CONF['volume-feature-enabled']
         self.object_storage = _CONF['object-storage']
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index eb2276a..d2c41f0 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -235,7 +235,7 @@
         self.volumes_client.wait_for_volume_status(volume['id'], 'available')
         # The volume retrieved on creation has a non-up-to-date status.
         # Retrieval after it becomes active ensures correct details.
-        volume = self.volumes_client.get_volume(volume['id'])
+        volume = self.volumes_client.show_volume(volume['id'])
         return volume
 
     def _create_loginable_secgroup_rule(self, secgroup_id=None):
@@ -309,8 +309,13 @@
         if isinstance(server_or_ip, six.string_types):
             ip = server_or_ip
         else:
-            addr = server_or_ip['addresses'][CONF.compute.network_for_ssh][0]
-            ip = addr['addr']
+            addrs = server_or_ip['addresses'][CONF.compute.network_for_ssh]
+            try:
+                ip = (addr['addr'] for addr in addrs if
+                      netaddr.valid_ipv4(addr['addr'])).next()
+            except StopIteration:
+                raise lib_exc.NotFound("No IPv4 addresses to use for SSH to "
+                                       "remote server.")
 
         if username is None:
             username = CONF.scenario.ssh_user
@@ -426,14 +431,14 @@
         self.assertEqual(self.volume['id'], volume['id'])
         self.volumes_client.wait_for_volume_status(volume['id'], 'in-use')
         # Refresh the volume after the attachment
-        self.volume = self.volumes_client.get_volume(volume['id'])
+        self.volume = self.volumes_client.show_volume(volume['id'])
 
     def nova_volume_detach(self):
         self.servers_client.detach_volume(self.server['id'], self.volume['id'])
         self.volumes_client.wait_for_volume_status(self.volume['id'],
                                                    'available')
 
-        volume = self.volumes_client.get_volume(self.volume['id'])
+        volume = self.volumes_client.show_volume(self.volume['id'])
         self.assertEqual('available', volume['status'])
 
     def rebuild_server(self, server_id, image=None,
diff --git a/tempest/scenario/test_aggregates_basic_ops.py b/tempest/scenario/test_aggregates_basic_ops.py
index 92e6c74..c5e8012 100644
--- a/tempest/scenario/test_aggregates_basic_ops.py
+++ b/tempest/scenario/test_aggregates_basic_ops.py
@@ -16,6 +16,7 @@
 from oslo_log import log as logging
 from tempest_lib.common.utils import data_utils
 
+from tempest.common import credentials
 from tempest.common import tempest_fixtures as fixtures
 from tempest.scenario import manager
 from tempest import test
@@ -34,6 +35,13 @@
     Deletes aggregate
     """
     @classmethod
+    def skip_checks(cls):
+        super(TestAggregatesBasicOps, cls).skip_checks()
+        if not credentials.is_admin_available():
+            msg = ("Missing Identity Admin API credentials in configuration.")
+            raise cls.skipException(msg)
+
+    @classmethod
     def setup_clients(cls):
         super(TestAggregatesBasicOps, cls).setup_clients()
         cls.aggregates_client = cls.manager.aggregates_client
diff --git a/tempest/scenario/test_minimum_basic.py b/tempest/scenario/test_minimum_basic.py
index c780464..45923ce 100644
--- a/tempest/scenario/test_minimum_basic.py
+++ b/tempest/scenario/test_minimum_basic.py
@@ -73,7 +73,7 @@
         self.assertIn(self.volume['id'], [x['id'] for x in volumes])
 
     def cinder_show(self):
-        volume = self.volumes_client.get_volume(self.volume['id'])
+        volume = self.volumes_client.show_volume(self.volume['id'])
         self.assertEqual(self.volume, volume)
 
     def nova_volume_attach(self):
@@ -83,7 +83,7 @@
         self.assertEqual(self.volume['id'], volume['id'])
         self.volumes_client.wait_for_volume_status(volume['id'], 'in-use')
         # Refresh the volume after the attachment
-        self.volume = self.volumes_client.get_volume(volume['id'])
+        self.volume = self.volumes_client.show_volume(volume['id'])
 
     def nova_reboot(self):
         self.servers_client.reboot(self.server['id'], 'SOFT')
@@ -99,7 +99,7 @@
         self.volumes_client.wait_for_volume_status(self.volume['id'],
                                                    'available')
 
-        volume = self.volumes_client.get_volume(self.volume['id'])
+        volume = self.volumes_client.show_volume(self.volume['id'])
         self.assertEqual('available', volume['status'])
 
     def create_and_add_security_group(self):
diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py
index 14909e8..2c9e845 100644
--- a/tempest/scenario/test_network_basic_ops.py
+++ b/tempest/scenario/test_network_basic_ops.py
@@ -318,11 +318,15 @@
             LOG.info(msg)
             return
 
-        subnet = self._list_subnets(
-            network_id=CONF.network.public_network_id)
-        self.assertEqual(1, len(subnet), "Found %d subnets" % len(subnet))
+        # We ping the external IP from the instance using its floating IP
+        # which is always IPv4, so we must only test connectivity to
+        # external IPv4 IPs if the external network is dualstack.
+        v4_subnets = [s for s in self._list_subnets(
+            network_id=CONF.network.public_network_id) if s['ip_version'] == 4]
+        self.assertEqual(1, len(v4_subnets),
+                         "Found %d IPv4 subnets" % len(v4_subnets))
 
-        external_ips = [subnet[0]['gateway_ip']]
+        external_ips = [v4_subnets[0]['gateway_ip']]
         self._check_server_connectivity(self.floating_ip_tuple.floating_ip,
                                         external_ips)
 
diff --git a/tempest/scenario/test_stamp_pattern.py b/tempest/scenario/test_stamp_pattern.py
index 056159e..53b471a 100644
--- a/tempest/scenario/test_stamp_pattern.py
+++ b/tempest/scenario/test_stamp_pattern.py
@@ -85,7 +85,7 @@
         def cleaner():
             self.snapshots_client.delete_snapshot(snapshot['id'])
             try:
-                while self.snapshots_client.get_snapshot(snapshot['id']):
+                while self.snapshots_client.show_snapshot(snapshot['id']):
                     time.sleep(1)
             except lib_exc.NotFound:
                 pass
diff --git a/tempest/services/compute/json/flavors_client.py b/tempest/services/compute/json/flavors_client.py
index 25b1869..2de43cf 100644
--- a/tempest/services/compute/json/flavors_client.py
+++ b/tempest/services/compute/json/flavors_client.py
@@ -16,11 +16,10 @@
 import json
 import urllib
 
-from tempest.api_schema.response.compute import flavors as common_schema
 from tempest.api_schema.response.compute import flavors_access as schema_access
 from tempest.api_schema.response.compute import flavors_extra_specs \
     as schema_extra_specs
-from tempest.api_schema.response.compute.v2_1 import flavors as v2schema
+from tempest.api_schema.response.compute.v2_1 import flavors as schema
 from tempest.common import service_client
 
 
@@ -33,7 +32,7 @@
 
         resp, body = self.get(url)
         body = json.loads(body)
-        self.validate_response(common_schema.list_flavors, resp, body)
+        self.validate_response(schema.list_flavors, resp, body)
         return service_client.ResponseBodyList(resp, body['flavors'])
 
     def list_flavors_with_detail(self, params=None):
@@ -43,13 +42,13 @@
 
         resp, body = self.get(url)
         body = json.loads(body)
-        self.validate_response(v2schema.list_flavors_details, resp, body)
+        self.validate_response(schema.list_flavors_details, resp, body)
         return service_client.ResponseBodyList(resp, body['flavors'])
 
     def get_flavor_details(self, flavor_id):
         resp, body = self.get("flavors/%s" % str(flavor_id))
         body = json.loads(body)
-        self.validate_response(v2schema.create_get_flavor_details, resp, body)
+        self.validate_response(schema.create_get_flavor_details, resp, body)
         return service_client.ResponseBody(resp, body['flavor'])
 
     def create_flavor(self, name, ram, vcpus, disk, flavor_id, **kwargs):
@@ -73,13 +72,13 @@
         resp, body = self.post('flavors', post_body)
 
         body = json.loads(body)
-        self.validate_response(v2schema.create_get_flavor_details, resp, body)
+        self.validate_response(schema.create_get_flavor_details, resp, body)
         return service_client.ResponseBody(resp, body['flavor'])
 
     def delete_flavor(self, flavor_id):
         """Deletes the given flavor."""
         resp, body = self.delete("flavors/{0}".format(flavor_id))
-        self.validate_response(v2schema.delete_flavor, resp, body)
+        self.validate_response(schema.delete_flavor, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def is_resource_deleted(self, id):
@@ -137,7 +136,7 @@
         """Unsets extra Specs from the mentioned flavor."""
         resp, body = self.delete('flavors/%s/os-extra_specs/%s' %
                                  (str(flavor_id), key))
-        self.validate_response(v2schema.unset_flavor_extra_specs, resp, body)
+        self.validate_response(schema.unset_flavor_extra_specs, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def list_flavor_access(self, flavor_id):
diff --git a/tempest/services/compute/json/hosts_client.py b/tempest/services/compute/json/hosts_client.py
index de925a9..088e695 100644
--- a/tempest/services/compute/json/hosts_client.py
+++ b/tempest/services/compute/json/hosts_client.py
@@ -15,8 +15,7 @@
 import json
 import urllib
 
-from tempest.api_schema.response.compute import hosts as schema
-from tempest.api_schema.response.compute.v2_1 import hosts as v2_schema
+from tempest.api_schema.response.compute.v2_1 import hosts as schema
 from tempest.common import service_client
 
 
@@ -39,7 +38,7 @@
 
         resp, body = self.get("os-hosts/%s" % str(hostname))
         body = json.loads(body)
-        self.validate_response(schema.show_host_detail, resp, body)
+        self.validate_response(schema.get_host_detail, resp, body)
         return service_client.ResponseBodyList(resp, body['host'])
 
     def update_host(self, hostname, **kwargs):
@@ -54,7 +53,7 @@
 
         resp, body = self.put("os-hosts/%s" % str(hostname), request_body)
         body = json.loads(body)
-        self.validate_response(v2_schema.update_host, resp, body)
+        self.validate_response(schema.update_host, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def startup_host(self, hostname):
@@ -62,7 +61,7 @@
 
         resp, body = self.get("os-hosts/%s/startup" % str(hostname))
         body = json.loads(body)
-        self.validate_response(v2_schema.startup_host, resp, body)
+        self.validate_response(schema.startup_host, resp, body)
         return service_client.ResponseBody(resp, body['host'])
 
     def shutdown_host(self, hostname):
@@ -70,7 +69,7 @@
 
         resp, body = self.get("os-hosts/%s/shutdown" % str(hostname))
         body = json.loads(body)
-        self.validate_response(v2_schema.shutdown_host, resp, body)
+        self.validate_response(schema.shutdown_host, resp, body)
         return service_client.ResponseBody(resp, body['host'])
 
     def reboot_host(self, hostname):
@@ -78,5 +77,5 @@
 
         resp, body = self.get("os-hosts/%s/reboot" % str(hostname))
         body = json.loads(body)
-        self.validate_response(v2_schema.reboot_host, resp, body)
+        self.validate_response(schema.reboot_host, resp, body)
         return service_client.ResponseBody(resp, body['host'])
diff --git a/tempest/services/compute/json/keypairs_client.py b/tempest/services/compute/json/keypairs_client.py
index 722aefa..7fe335b 100644
--- a/tempest/services/compute/json/keypairs_client.py
+++ b/tempest/services/compute/json/keypairs_client.py
@@ -15,7 +15,6 @@
 
 import json
 
-from tempest.api_schema.response.compute import keypairs as common_schema
 from tempest.api_schema.response.compute.v2_1 import keypairs as schema
 from tempest.common import service_client
 
@@ -30,7 +29,7 @@
         # servers, etc. A bug?
         # For now we shall adhere to the spec, but the spec for keypairs
         # is yet to be found
-        self.validate_response(common_schema.list_keypairs, resp, body)
+        self.validate_response(schema.list_keypairs, resp, body)
         return service_client.ResponseBodyList(resp, body['keypairs'])
 
     def get_keypair(self, key_name):
diff --git a/tempest/services/compute/json/quotas_client.py b/tempest/services/compute/json/quotas_client.py
index 89f4acd..6e38c47 100644
--- a/tempest/services/compute/json/quotas_client.py
+++ b/tempest/services/compute/json/quotas_client.py
@@ -31,7 +31,7 @@
             url += '?user_id=%s' % str(user_id)
         resp, body = self.get(url)
         body = json.loads(body)
-        self.validate_response(schema.quota_set, resp, body)
+        self.validate_response(schema.get_quota_set, resp, body)
         return service_client.ResponseBody(resp, body['quota_set'])
 
     def get_default_quota_set(self, tenant_id):
@@ -40,7 +40,7 @@
         url = 'os-quota-sets/%s/defaults' % str(tenant_id)
         resp, body = self.get(url)
         body = json.loads(body)
-        self.validate_response(schema.quota_set, resp, body)
+        self.validate_response(schema.get_quota_set, resp, body)
         return service_client.ResponseBody(resp, body['quota_set'])
 
     def update_quota_set(self, tenant_id, user_id=None,
@@ -105,7 +105,7 @@
                                   post_body)
 
         body = json.loads(body)
-        self.validate_response(schema.quota_set_update, resp, body)
+        self.validate_response(schema.update_quota_set, resp, body)
         return service_client.ResponseBody(resp, body['quota_set'])
 
     def delete_quota_set(self, tenant_id):
@@ -123,7 +123,7 @@
         url = 'os-quota-class-sets/%s' % str(quota_class_id)
         resp, body = self.get(url)
         body = json.loads(body)
-        self.validate_response(classes_schema.quota_set, resp, body)
+        self.validate_response(classes_schema.get_quota_class_set, resp, body)
         return service_client.ResponseBody(resp, body['quota_class_set'])
 
     def update_quota_class_set(self, quota_class_id, **kwargs):
@@ -136,5 +136,6 @@
                               post_body)
 
         body = json.loads(body)
-        self.validate_response(classes_schema.quota_set_update, resp, body)
+        self.validate_response(classes_schema.update_quota_class_set,
+                               resp, body)
         return service_client.ResponseBody(resp, body['quota_class_set'])
diff --git a/tempest/services/orchestration/json/orchestration_client.py b/tempest/services/orchestration/json/orchestration_client.py
index 1a4c5d9..debf39b 100644
--- a/tempest/services/orchestration/json/orchestration_client.py
+++ b/tempest/services/orchestration/json/orchestration_client.py
@@ -105,7 +105,7 @@
         headers['X-Auth-User'] = self.user
         return headers, body
 
-    def get_stack(self, stack_identifier):
+    def show_stack(self, stack_identifier):
         """Returns the details of a single stack."""
         url = "stacks/%s" % stack_identifier
         resp, body = self.get(url)
@@ -137,7 +137,7 @@
         body = json.loads(body)
         return service_client.ResponseBodyList(resp, body['resources'])
 
-    def get_resource(self, stack_identifier, resource_name):
+    def show_resource(self, stack_identifier, resource_name):
         """Returns the details of a single resource."""
         url = "stacks/%s/resources/%s" % (stack_identifier, resource_name)
         resp, body = self.get(url)
@@ -159,7 +159,7 @@
 
         while True:
             try:
-                body = self.get_resource(
+                body = self.show_resource(
                     stack_identifier, resource_name)
             except lib_exc.NotFound:
                 # ignore this, as the resource may not have
@@ -195,7 +195,7 @@
 
         while True:
             try:
-                body = self.get_stack(stack_identifier)
+                body = self.show_stack(stack_identifier)
             except lib_exc.NotFound:
                 if status == 'DELETE_COMPLETE':
                     return
@@ -295,14 +295,14 @@
         body = json.loads(body)
         return service_client.ResponseBodyList(resp, body['resource_types'])
 
-    def get_resource_type(self, resource_type_name):
+    def show_resource_type(self, resource_type_name):
         """Return the schema of a resource type."""
         url = 'resource_types/%s' % resource_type_name
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, json.loads(body))
 
-    def get_resource_type_template(self, resource_type_name):
+    def show_resource_type_template(self, resource_type_name):
         """Return the template of a resource type."""
         url = 'resource_types/%s/template' % resource_type_name
         resp, body = self.get(url)
@@ -320,7 +320,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_software_config(self, conf_id):
+    def show_software_config(self, conf_id):
         """Returns a software configuration resource."""
         url = 'software_configs/%s' % str(conf_id)
         resp, body = self.get(url)
@@ -365,7 +365,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_software_deploy_list(self):
+    def list_software_deployments(self):
         """Returns a list of all deployments."""
         url = 'software_deployments'
         resp, body = self.get(url)
@@ -373,7 +373,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_software_deploy(self, deploy_id):
+    def show_software_deployment(self, deploy_id):
         """Returns a specific software deployment."""
         url = 'software_deployments/%s' % str(deploy_id)
         resp, body = self.get(url)
@@ -381,7 +381,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_software_deploy_meta(self, server_id):
+    def show_software_deployment_metadata(self, server_id):
         """Return a config metadata for a specific server."""
         url = 'software_deployments/metadata/%s' % server_id
         resp, body = self.get(url)
diff --git a/tempest/services/volume/json/admin/volume_quotas_client.py b/tempest/services/volume/json/admin/volume_quotas_client.py
index abd36c1..5092afc 100644
--- a/tempest/services/volume/json/admin/volume_quotas_client.py
+++ b/tempest/services/volume/json/admin/volume_quotas_client.py
@@ -26,7 +26,7 @@
 
     TYPE = "json"
 
-    def get_default_quota_set(self, tenant_id):
+    def show_default_quota_set(self, tenant_id):
         """List the default volume quota set for a tenant."""
 
         url = 'os-quota-sets/%s/defaults' % tenant_id
@@ -34,7 +34,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, self._parse_resp(body))
 
-    def get_quota_set(self, tenant_id, params=None):
+    def show_quota_set(self, tenant_id, params=None):
         """List the quota set for a tenant."""
 
         url = 'os-quota-sets/%s' % tenant_id
@@ -45,10 +45,10 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, self._parse_resp(body))
 
-    def get_quota_usage(self, tenant_id):
+    def show_quota_usage(self, tenant_id):
         """List the quota set for a tenant."""
 
-        body = self.get_quota_set(tenant_id, params={'usage': True})
+        body = self.show_quota_set(tenant_id, params={'usage': True})
         return body
 
     def update_quota_set(self, tenant_id, gigabytes=None, volumes=None,
diff --git a/tempest/services/volume/json/admin/volume_types_client.py b/tempest/services/volume/json/admin/volume_types_client.py
index c905155..9366984 100644
--- a/tempest/services/volume/json/admin/volume_types_client.py
+++ b/tempest/services/volume/json/admin/volume_types_client.py
@@ -33,9 +33,9 @@
         #             "type": resource_type}
         try:
             if resource['type'] == "volume-type":
-                self.get_volume_type(resource['id'])
+                self.show_volume_type(resource['id'])
             elif resource['type'] == "encryption-type":
-                body = self.get_encryption_type(resource['id'])
+                body = self.show_encryption_type(resource['id'])
                 if not body:
                     return True
             else:
@@ -61,7 +61,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBodyList(resp, body['volume_types'])
 
-    def get_volume_type(self, volume_id):
+    def show_volume_type(self, volume_id):
         """Returns the details of a single volume_type."""
         url = "types/%s" % str(volume_id)
         resp, body = self.get(url)
@@ -104,7 +104,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body['extra_specs'])
 
-    def get_volume_type_extra_specs(self, vol_type_id, extra_spec_name):
+    def show_volume_type_extra_specs(self, vol_type_id, extra_spec_name):
         """Returns the details of a single volume_type extra spec."""
         url = "types/%s/extra_specs/%s" % (str(vol_type_id),
                                            str(extra_spec_name))
@@ -150,7 +150,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def get_encryption_type(self, vol_type_id):
+    def show_encryption_type(self, vol_type_id):
         """
         Get the volume encryption type for the specified volume type.
         vol_type_id: Id of volume_type.
diff --git a/tempest/services/volume/json/availability_zone_client.py b/tempest/services/volume/json/availability_zone_client.py
index bb5e39b..dc0388f 100644
--- a/tempest/services/volume/json/availability_zone_client.py
+++ b/tempest/services/volume/json/availability_zone_client.py
@@ -20,7 +20,7 @@
 
 class BaseVolumeAvailabilityZoneClientJSON(service_client.ServiceClient):
 
-    def get_availability_zone_list(self):
+    def list_availability_zones(self):
         resp, body = self.get('os-availability-zone')
         body = json.loads(body)
         self.expected_success(200, resp.status)
diff --git a/tempest/services/volume/json/backups_client.py b/tempest/services/volume/json/backups_client.py
index dad5aff..83ec182 100644
--- a/tempest/services/volume/json/backups_client.py
+++ b/tempest/services/volume/json/backups_client.py
@@ -56,7 +56,7 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def get_backup(self, backup_id):
+    def show_backup(self, backup_id):
         """Returns the details of a single backup."""
         url = "backups/%s" % str(backup_id)
         resp, body = self.get(url)
@@ -64,9 +64,11 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body['backup'])
 
-    def list_backups_with_detail(self):
+    def list_backups(self, detail=False):
         """Information for all the tenant's backups."""
-        url = "backups/detail"
+        url = "backups"
+        if detail:
+            url += "/detail"
         resp, body = self.get(url)
         body = json.loads(body)
         self.expected_success(200, resp.status)
@@ -74,13 +76,13 @@
 
     def wait_for_backup_status(self, backup_id, status):
         """Waits for a Backup to reach a given status."""
-        body = self.get_backup(backup_id)
+        body = self.show_backup(backup_id)
         backup_status = body['status']
         start = int(time.time())
 
         while backup_status != status:
             time.sleep(self.build_interval)
-            body = self.get_backup(backup_id)
+            body = self.show_backup(backup_id)
             backup_status = body['status']
             if backup_status == 'error':
                 raise exceptions.VolumeBackupException(backup_id=backup_id)
diff --git a/tempest/services/volume/json/qos_client.py b/tempest/services/volume/json/qos_client.py
index 14ff506..e9d3777 100644
--- a/tempest/services/volume/json/qos_client.py
+++ b/tempest/services/volume/json/qos_client.py
@@ -26,7 +26,7 @@
 
     def is_resource_deleted(self, qos_id):
         try:
-            self.get_qos(qos_id)
+            self.show_qos(qos_id)
         except lib_exc.NotFound:
             return True
         return False
@@ -48,15 +48,15 @@
         start_time = int(time.time())
         while True:
             if operation == 'qos-key-unset':
-                body = self.get_qos(qos_id)
+                body = self.show_qos(qos_id)
                 if not any(key in body['specs'] for key in args):
                     return
             elif operation == 'disassociate':
-                body = self.get_association_qos(qos_id)
+                body = self.show_association_qos(qos_id)
                 if not any(args in body[i]['id'] for i in range(0, len(body))):
                     return
             elif operation == 'disassociate-all':
-                body = self.get_association_qos(qos_id)
+                body = self.show_association_qos(qos_id)
                 if not body:
                     return
             else:
@@ -96,7 +96,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBodyList(resp, body['qos_specs'])
 
-    def get_qos(self, qos_id):
+    def show_qos(self, qos_id):
         """Get the specified QoS specification."""
         url = "qos-specs/%s" % str(qos_id)
         resp, body = self.get(url)
@@ -133,7 +133,7 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def get_association_qos(self, qos_id):
+    def show_association_qos(self, qos_id):
         """Get the association of the specified QoS specification."""
         url = "qos-specs/%s/associations" % str(qos_id)
         resp, body = self.get(url)
diff --git a/tempest/services/volume/json/snapshots_client.py b/tempest/services/volume/json/snapshots_client.py
index 9f88085..2140c62 100644
--- a/tempest/services/volume/json/snapshots_client.py
+++ b/tempest/services/volume/json/snapshots_client.py
@@ -29,29 +29,20 @@
 
     create_resp = 200
 
-    def list_snapshots(self, params=None):
+    def list_snapshots(self, detail=False, params=None):
         """List all the snapshot."""
         url = 'snapshots'
+        if detail:
+            url += '/detail'
         if params:
-                url += '?%s' % urllib.urlencode(params)
+            url += '?%s' % urllib.urlencode(params)
 
         resp, body = self.get(url)
         body = json.loads(body)
         self.expected_success(200, resp.status)
         return service_client.ResponseBodyList(resp, body['snapshots'])
 
-    def list_snapshots_with_detail(self, params=None):
-        """List the details of all snapshots."""
-        url = 'snapshots/detail'
-        if params:
-                url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBodyList(resp, body['snapshots'])
-
-    def get_snapshot(self, snapshot_id):
+    def show_snapshot(self, snapshot_id):
         """Returns the details of a single snapshot."""
         url = "snapshots/%s" % str(snapshot_id)
         resp, body = self.get(url)
@@ -85,7 +76,7 @@
 
     # NOTE(afazekas): just for the wait function
     def _get_snapshot_status(self, snapshot_id):
-        body = self.get_snapshot(snapshot_id)
+        body = self.show_snapshot(snapshot_id)
         status = body['status']
         # NOTE(afazekas): snapshot can reach an "error"
         # state in a "normal" lifecycle
@@ -128,7 +119,7 @@
 
     def is_resource_deleted(self, id):
         try:
-            self.get_snapshot(id)
+            self.show_snapshot(id)
         except lib_exc.NotFound:
             return True
         return False
@@ -166,7 +157,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body['metadata'])
 
-    def get_snapshot_metadata(self, snapshot_id):
+    def show_snapshot_metadata(self, snapshot_id):
         """Get metadata of the snapshot."""
         url = "snapshots/%s/metadata" % str(snapshot_id)
         resp, body = self.get(url)
diff --git a/tempest/services/volume/json/volumes_client.py b/tempest/services/volume/json/volumes_client.py
index 059664c..a82291a 100644
--- a/tempest/services/volume/json/volumes_client.py
+++ b/tempest/services/volume/json/volumes_client.py
@@ -40,29 +40,20 @@
         """Return the element 'attachment' from input volumes."""
         return volume['attachments'][0]
 
-    def list_volumes(self, params=None):
+    def list_volumes(self, detail=False, params=None):
         """List all the volumes created."""
         url = 'volumes'
+        if detail:
+            url += '/detail'
         if params:
-                url += '?%s' % urllib.urlencode(params)
+            url += '?%s' % urllib.urlencode(params)
 
         resp, body = self.get(url)
         body = json.loads(body)
         self.expected_success(200, resp.status)
         return service_client.ResponseBodyList(resp, body['volumes'])
 
-    def list_volumes_with_detail(self, params=None):
-        """List the details of all volumes."""
-        url = 'volumes/detail'
-        if params:
-                url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBodyList(resp, body['volumes'])
-
-    def get_volume(self, volume_id):
+    def show_volume(self, volume_id):
         """Returns the details of a single volume."""
         url = "volumes/%s" % str(volume_id)
         resp, body = self.get(url)
@@ -161,13 +152,13 @@
 
     def wait_for_volume_status(self, volume_id, status):
         """Waits for a Volume to reach a given status."""
-        body = self.get_volume(volume_id)
+        body = self.show_volume(volume_id)
         volume_status = body['status']
         start = int(time.time())
 
         while volume_status != status:
             time.sleep(self.build_interval)
-            body = self.get_volume(volume_id)
+            body = self.show_volume(volume_id)
             volume_status = body['status']
             if volume_status == 'error':
                 raise exceptions.VolumeBuildErrorException(volume_id=volume_id)
@@ -183,7 +174,7 @@
 
     def is_resource_deleted(self, id):
         try:
-            self.get_volume(id)
+            self.show_volume(id)
         except lib_exc.NotFound:
             return True
         return False
@@ -240,7 +231,7 @@
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body['transfer'])
 
-    def get_volume_transfer(self, transfer_id):
+    def show_volume_transfer(self, transfer_id):
         """Returns the details of a volume transfer."""
         url = "os-volume-transfer/%s" % str(transfer_id)
         resp, body = self.get(url)
@@ -303,7 +294,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body['metadata'])
 
-    def get_volume_metadata(self, volume_id):
+    def show_volume_metadata(self, volume_id):
         """Get metadata of the volume."""
         url = "volumes/%s/metadata" % str(volume_id)
         resp, body = self.get(url)
diff --git a/tempest/stress/cleanup.py b/tempest/stress/cleanup.py
index d0b1be1..29c4401 100644
--- a/tempest/stress/cleanup.py
+++ b/tempest/stress/cleanup.py
@@ -80,7 +80,7 @@
     # volume deletion may block
 
     _, snaps = admin_manager.snapshots_client.\
-        list_snapshots({"all_tenants": True})
+        list_snapshots(params={"all_tenants": True})
     LOG.info("Cleanup::remove %s snapshots" % len(snaps))
     for v in snaps:
         try:
@@ -96,7 +96,8 @@
         except Exception:
             pass
 
-    vols = admin_manager.volumes_client.list_volumes({"all_tenants": True})
+    vols = admin_manager.volumes_client.list_volumes(
+        params={"all_tenants": True})
     LOG.info("Cleanup::remove %s volumes" % len(vols))
     for v in vols:
         try:
diff --git a/tempest/test.py b/tempest/test.py
index 2585999..d57b1d8 100644
--- a/tempest/test.py
+++ b/tempest/test.py
@@ -472,8 +472,6 @@
         super(NegativeAutoTest, cls).setUpClass()
         os = cls.get_client_manager()
         cls.client = os.negative_client
-        os_admin = clients.AdminManager(service=cls._service)
-        cls.admin_client = os_admin.negative_client
 
     @staticmethod
     def load_tests(*args):
@@ -601,7 +599,13 @@
                             "mechanism")
 
         if "admin_client" in description and description["admin_client"]:
-            client = self.admin_client
+            if not credentials.is_admin_available():
+                msg = ("Missing Identity Admin API credentials in"
+                       "configuration.")
+                raise self.skipException(msg)
+            creds = self.isolated_creds.get_admin_creds()
+            os_adm = clients.Manager(credentials=creds)
+            client = os_adm.negative_client
         else:
             client = self.client
         resp, resp_body = client.send_request(method, new_url,
diff --git a/tempest/tests/common/test_accounts.py b/tempest/tests/common/test_accounts.py
index 6371e49..b176675 100644
--- a/tempest/tests/common/test_accounts.py
+++ b/tempest/tests/common/test_accounts.py
@@ -23,11 +23,13 @@
 
 from tempest import auth
 from tempest.common import accounts
+from tempest.common import cred_provider
 from tempest import config
 from tempest import exceptions
 from tempest.services.identity.v2.json import token_client
 from tempest.tests import base
 from tempest.tests import fake_config
+from tempest.tests import fake_http
 from tempest.tests import fake_identity
 
 
@@ -37,6 +39,9 @@
         super(TestAccount, self).setUp()
         self.useFixture(fake_config.ConfigFixture())
         self.stubs.Set(config, 'TempestConfigPrivate', fake_config.FakePrivate)
+        self.fake_http = fake_http.fake_httplib2(return_type=200)
+        self.stubs.Set(token_client.TokenClientJSON, 'raw_request',
+                       fake_identity._fake_v2_response)
         self.useFixture(lockutils_fixtures.ExternalLockFixture())
         self.test_accounts = [
             {'username': 'test_user1', 'tenant_name': 'test_tenant1',
@@ -63,6 +68,11 @@
              'password': 'p', 'roles': [cfg.CONF.identity.admin_role]},
             {'username': 'test_user12', 'tenant_name': 'test_tenant12',
              'password': 'p', 'roles': [cfg.CONF.identity.admin_role]},
+            {'username': 'test_user13', 'tenant_name': 'test_tenant13',
+             'password': 'p', 'resources': {'network': 'network-1'}},
+            {'username': 'test_user14', 'tenant_name': 'test_tenant14',
+             'password': 'p', 'roles': ['role-7', 'role-11'],
+             'resources': {'network': 'network-2'}},
         ]
         self.useFixture(mockpatch.Patch(
             'tempest.common.accounts.read_accounts_yaml',
@@ -271,10 +281,27 @@
         calls = get_free_hash_mock.mock.mock_calls
         self.assertEqual(len(calls), 1)
         args = calls[0][1][0]
-        self.assertEqual(len(args), 10)
+        self.assertEqual(len(args), 12)
         for i in admin_hashes:
             self.assertNotIn(i, args)
 
+    def test_networks_returned_with_creds(self):
+        self.useFixture(mockpatch.Patch(
+            'tempest.common.accounts.read_accounts_yaml',
+            return_value=self.test_accounts))
+        test_accounts_class = accounts.Accounts('v2', 'test_name')
+        with mock.patch('tempest.services.compute.json.networks_client.'
+                        'NetworksClientJSON.list_networks',
+                        return_value=[{'name': 'network-2', 'id': 'fake-id'}]):
+            creds = test_accounts_class.get_creds_by_roles(['role-7'])
+        self.assertTrue(isinstance(creds, cred_provider.TestResources))
+        network = creds.network
+        self.assertIsNotNone(network)
+        self.assertIn('name', network)
+        self.assertIn('id', network)
+        self.assertEqual('fake-id', network['id'])
+        self.assertEqual('network-2', network['name'])
+
 
 class TestNotLockingAccount(base.TestCase):
 
diff --git a/tempest/tests/common/utils/linux/test_remote_client.py b/tempest/tests/common/utils/linux/test_remote_client.py
index 40b7b32..d6377e6 100644
--- a/tempest/tests/common/utils/linux/test_remote_client.py
+++ b/tempest/tests/common/utils/linux/test_remote_client.py
@@ -100,15 +100,17 @@
         self._assert_exec_called_with('cut -f1 -d. /proc/uptime')
 
     def test_ping_host(self):
-        ping_response = """PING localhost (127.0.0.1) 56(84) bytes of data.
-64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.048 ms
+        ping_response = """PING localhost (127.0.0.1) 70(98) bytes of data.
+78 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.048 ms
+78 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.048 ms
 
 --- localhost ping statistics ---
-1 packets transmitted, 1 received, 0% packet loss, time 0ms
+2 packets transmitted, 2 received, 0% packet loss, time 0ms
 rtt min/avg/max/mdev = 0.048/0.048/0.048/0.000 ms"""
         self.ssh_mock.mock.exec_command.return_value = ping_response
-        self.assertEqual(self.conn.ping_host('127.0.0.1'), ping_response)
-        self._assert_exec_called_with('ping -c1 -w1 127.0.0.1')
+        self.assertEqual(self.conn.ping_host('127.0.0.1', count=2, size=70),
+                         ping_response)
+        self._assert_exec_called_with('ping -c2 -w2 -s70 127.0.0.1')
 
     def test_get_mac_address(self):
         macs = """0a:0b:0c:0d:0e:0f
diff --git a/tempest/thirdparty/boto/test_ec2_network.py b/tempest/thirdparty/boto/test_ec2_network.py
deleted file mode 100644
index ce20156..0000000
--- a/tempest/thirdparty/boto/test_ec2_network.py
+++ /dev/null
@@ -1,44 +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.
-
-from tempest import test
-from tempest.thirdparty.boto import test as boto_test
-
-
-class EC2NetworkTest(boto_test.BotoTestCase):
-
-    @classmethod
-    def setup_clients(cls):
-        super(EC2NetworkTest, cls).setup_clients()
-        cls.ec2_client = cls.os.ec2api_client
-
-    # Note(afazekas): these tests for things duable without an instance
-    @test.idempotent_id('48b912af-9403-4b4f-aa69-fa76d690a81f')
-    def test_disassociate_not_associated_floating_ip(self):
-        # EC2 disassociate not associated floating ip
-        ec2_codes = self.ec2_error_code
-        address = self.ec2_client.allocate_address()
-        public_ip = address.public_ip
-        rcuk = self.addResourceCleanUp(self.ec2_client.release_address,
-                                       public_ip)
-        addresses_get = self.ec2_client.get_all_addresses(
-            addresses=(public_ip,))
-        self.assertEqual(len(addresses_get), 1)
-        self.assertEqual(addresses_get[0].public_ip, public_ip)
-        self.assertBotoError(ec2_codes.client.InvalidAssociationID.NotFound,
-                             address.disassociate)
-        self.ec2_client.release_address(public_ip)
-        self.assertAddressReleasedWait(address)
-        self.cancelResourceCleanUp(rcuk)