Merge "Add run_stress to cliff-based cli framework"
diff --git a/requirements.txt b/requirements.txt
index 17d063d..d470c30 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -22,6 +22,6 @@
 iso8601>=0.1.9
 fixtures>=1.3.1
 testscenarios>=0.4
-tempest-lib>=0.10.0
+tempest-lib>=0.11.0
 PyYAML>=3.1.0
 stevedore>=1.5.0 # Apache-2.0
diff --git a/tempest/api/compute/admin/test_security_groups.py b/tempest/api/compute/admin/test_security_groups.py
index b0a3086..e31129b 100644
--- a/tempest/api/compute/admin/test_security_groups.py
+++ b/tempest/api/compute/admin/test_security_groups.py
@@ -28,7 +28,7 @@
     @classmethod
     def setup_clients(cls):
         super(SecurityGroupsTestAdminJSON, cls).setup_clients()
-        cls.adm_client = cls.os_adm.security_groups_client
+        cls.adm_client = cls.os_adm.compute_security_groups_client
         cls.client = cls.security_groups_client
 
     def _delete_security_group(self, securitygroup_id, admin=True):
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index 5bc0769..2321b4e 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -69,7 +69,7 @@
         cls.floating_ips_client = cls.os.compute_floating_ips_client
         cls.keypairs_client = cls.os.keypairs_client
         cls.security_group_rules_client = cls.os.security_group_rules_client
-        cls.security_groups_client = cls.os.security_groups_client
+        cls.security_groups_client = cls.os.compute_security_groups_client
         cls.quotas_client = cls.os.quotas_client
         cls.quota_classes_client = cls.os.quota_classes_client
         cls.compute_networks_client = cls.os.compute_networks_client
diff --git a/tempest/api/compute/security_groups/test_security_groups.py b/tempest/api/compute/security_groups/test_security_groups.py
index dbbeb70..ee840be 100644
--- a/tempest/api/compute/security_groups/test_security_groups.py
+++ b/tempest/api/compute/security_groups/test_security_groups.py
@@ -100,7 +100,7 @@
         server_id = server['id']
         waiters.wait_for_server_status(self.servers_client, server_id,
                                        'ACTIVE')
-        self.servers_client.add_security_group(server_id, sg['name'])
+        self.servers_client.add_security_group(server_id, name=sg['name'])
 
         # Check that we are not able to delete the security
         # group since it is in use by an active server
@@ -112,7 +112,7 @@
         self.servers_client.reboot_server(server_id, 'HARD')
         waiters.wait_for_server_status(self.servers_client, server_id,
                                        'ACTIVE')
-        self.servers_client.add_security_group(server_id, sg2['name'])
+        self.servers_client.add_security_group(server_id, name=sg2['name'])
 
         # Check that we are not able to delete the other security
         # group since it is in use by an active server
diff --git a/tempest/api/compute/servers/test_server_actions.py b/tempest/api/compute/servers/test_server_actions.py
index 0754d27..45cdeaf 100644
--- a/tempest/api/compute/servers/test_server_actions.py
+++ b/tempest/api/compute/servers/test_server_actions.py
@@ -81,7 +81,7 @@
     def test_change_server_password(self):
         # The server's password should be set to the provided password
         new_password = 'Newpass1234'
-        self.client.change_password(self.server_id, new_password)
+        self.client.change_password(self.server_id, adminPass=new_password)
         waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
 
         if CONF.validation.run_validation:
@@ -279,9 +279,9 @@
         # create the first and the second backup
         backup1 = data_utils.rand_name('backup-1')
         resp = self.client.create_backup(self.server_id,
-                                         'daily',
-                                         2,
-                                         backup1).response
+                                         backup_type='daily',
+                                         rotation=2,
+                                         name=backup1).response
         oldest_backup_exist = True
 
         # the oldest one should be deleted automatically in this test
@@ -303,9 +303,9 @@
         backup2 = data_utils.rand_name('backup-2')
         waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
         resp = self.client.create_backup(self.server_id,
-                                         'daily',
-                                         2,
-                                         backup2).response
+                                         backup_type='daily',
+                                         rotation=2,
+                                         name=backup2).response
         image2_id = data_utils.parse_image_id(resp['location'])
         self.addCleanup(self.os.image_client.delete_image, image2_id)
         self.os.image_client.wait_for_image_status(image2_id, 'active')
@@ -331,9 +331,9 @@
         backup3 = data_utils.rand_name('backup-3')
         waiters.wait_for_server_status(self.client, self.server_id, 'ACTIVE')
         resp = self.client.create_backup(self.server_id,
-                                         'daily',
-                                         2,
-                                         backup3).response
+                                         backup_type='daily',
+                                         rotation=2,
+                                         name=backup3).response
         image3_id = data_utils.parse_image_id(resp['location'])
         self.addCleanup(self.os.image_client.delete_image, image3_id)
         # the first back up should be deleted
diff --git a/tempest/api/compute/servers/test_server_rescue.py b/tempest/api/compute/servers/test_server_rescue.py
index 96ce45e..1552848 100644
--- a/tempest/api/compute/servers/test_server_rescue.py
+++ b/tempest/api/compute/servers/test_server_rescue.py
@@ -116,7 +116,8 @@
         self.addCleanup(self._unrescue, self.server_id)
 
         # Add Security group
-        self.servers_client.add_security_group(self.server_id, self.sg_name)
+        self.servers_client.add_security_group(self.server_id,
+                                               name=self.sg_name)
 
         # Delete Security group
         self.servers_client.remove_security_group(self.server_id,
diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py
index 436ed2f..1a1cc1c 100644
--- a/tempest/api/compute/test_authorization.py
+++ b/tempest/api/compute/test_authorization.py
@@ -51,13 +51,14 @@
         cls.images_client = cls.os.images_client
         cls.glance_client = cls.os.image_client
         cls.keypairs_client = cls.os.keypairs_client
-        cls.security_client = cls.os.security_groups_client
+        cls.security_client = cls.os.compute_security_groups_client
         cls.rule_client = cls.os.security_group_rules_client
 
         cls.alt_client = cls.alt_manager.servers_client
         cls.alt_images_client = cls.alt_manager.images_client
         cls.alt_keypairs_client = cls.alt_manager.keypairs_client
-        cls.alt_security_client = cls.alt_manager.security_groups_client
+        cls.alt_security_client = (
+            cls.alt_manager.compute_security_groups_client)
         cls.alt_rule_client = cls.alt_manager.security_group_rules_client
 
     @classmethod
@@ -150,7 +151,7 @@
     def test_change_password_for_alt_account_fails(self):
         # A change password request for another user's server should fail
         self.assertRaises(lib_exc.NotFound, self.alt_client.change_password,
-                          self.server['id'], 'newpass')
+                          self.server['id'], adminPass='newpass')
 
     @test.idempotent_id('14cb5ff5-f646-45ca-8f51-09081d6c0c24')
     def test_reboot_server_for_alt_account_fails(self):
diff --git a/tempest/api/database/flavors/test_flavors.py b/tempest/api/database/flavors/test_flavors.py
index 62c1e05..f75b867 100644
--- a/tempest/api/database/flavors/test_flavors.py
+++ b/tempest/api/database/flavors/test_flavors.py
@@ -28,7 +28,7 @@
     @test.idempotent_id('c94b825e-0132-4686-8049-8a4a2bc09525')
     def test_get_db_flavor(self):
         # The expected flavor details should be returned
-        flavor = (self.client.get_db_flavor_details(self.db_flavor_ref)
+        flavor = (self.client.show_db_flavor(self.db_flavor_ref)
                   ['flavor'])
         self.assertEqual(self.db_flavor_ref, str(flavor['id']))
         self.assertIn('ram', flavor)
@@ -38,7 +38,7 @@
     @test.attr(type='smoke')
     @test.idempotent_id('685025d6-0cec-4673-8a8d-995cb8e0d3bb')
     def test_list_db_flavors(self):
-        flavor = (self.client.get_db_flavor_details(self.db_flavor_ref)
+        flavor = (self.client.show_db_flavor(self.db_flavor_ref)
                   ['flavor'])
         # List of all flavors should contain the expected flavor
         flavors = self.client.list_db_flavors()['flavors']
@@ -67,7 +67,7 @@
                          (os_flavors, db_flavors))
         for os_flavor in os_flavors:
             db_flavor =\
-                self.client.get_db_flavor_details(os_flavor['id'])['flavor']
+                self.client.show_db_flavor(os_flavor['id'])['flavor']
             self._check_values(['id', 'name', 'ram'], db_flavor, os_flavor)
             self._check_values(['disk', 'vcpus', 'swap'], db_flavor, os_flavor,
                                in_db=False)
diff --git a/tempest/api/database/flavors/test_flavors_negative.py b/tempest/api/database/flavors/test_flavors_negative.py
index 68cb7d6..3dee96f 100644
--- a/tempest/api/database/flavors/test_flavors_negative.py
+++ b/tempest/api/database/flavors/test_flavors_negative.py
@@ -31,4 +31,4 @@
     def test_get_non_existent_db_flavor(self):
         # flavor details are not returned for non-existent flavors
         self.assertRaises(lib_exc.NotFound,
-                          self.client.get_db_flavor_details, -1)
+                          self.client.show_db_flavor, -1)
diff --git a/tempest/api/identity/admin/v3/test_credentials.py b/tempest/api/identity/admin/v3/test_credentials.py
index 048c53a..5e1c3cc 100644
--- a/tempest/api/identity/admin/v3/test_credentials.py
+++ b/tempest/api/identity/admin/v3/test_credentials.py
@@ -76,7 +76,7 @@
         self.assertEqual(update_body['blob']['access'], new_keys[0])
         self.assertEqual(update_body['blob']['secret'], new_keys[1])
 
-        get_body = self.creds_client.get_credential(cred['id'])['credential']
+        get_body = self.creds_client.show_credential(cred['id'])['credential']
         for value1 in self.creds_list[0]:
             self.assertEqual(update_body[value1],
                              get_body[value1])
diff --git a/tempest/api/identity/admin/v3/test_policies.py b/tempest/api/identity/admin/v3/test_policies.py
index 44e5c7b..f38d25d 100644
--- a/tempest/api/identity/admin/v3/test_policies.py
+++ b/tempest/api/identity/admin/v3/test_policies.py
@@ -64,7 +64,7 @@
             policy['id'], type=update_type)['policy']
         self.assertIn('type', data)
         # Assertion for updated value with fetched value
-        fetched_policy = self.policy_client.get_policy(policy['id'])['policy']
+        fetched_policy = self.policy_client.show_policy(policy['id'])['policy']
         self.assertIn('id', fetched_policy)
         self.assertIn('blob', fetched_policy)
         self.assertIn('type', fetched_policy)
diff --git a/tempest/api/identity/admin/v3/test_regions.py b/tempest/api/identity/admin/v3/test_regions.py
index 0dbbae0..ec1b12e 100644
--- a/tempest/api/identity/admin/v3/test_regions.py
+++ b/tempest/api/identity/admin/v3/test_regions.py
@@ -46,7 +46,7 @@
     def _delete_region(self, region_id):
         self.client.delete_region(region_id)
         self.assertRaises(lib_exc.NotFound,
-                          self.client.get_region, region_id)
+                          self.client.show_region, region_id)
 
     @test.idempotent_id('56186092-82e4-43f2-b954-91013218ba42')
     def test_create_update_get_delete_region(self):
@@ -68,7 +68,7 @@
         self.assertEqual(self.setup_regions[1]['id'],
                          region['parent_region_id'])
         # Get the details of region
-        region = self.client.get_region(region['id'])['region']
+        region = self.client.show_region(region['id'])['region']
         self.assertEqual(r_alt_description, region['description'])
         self.assertEqual(self.setup_regions[1]['id'],
                          region['parent_region_id'])
diff --git a/tempest/api/identity/admin/v3/test_users.py b/tempest/api/identity/admin/v3/test_users.py
index b56c9e6..60abde7 100644
--- a/tempest/api/identity/admin/v3/test_users.py
+++ b/tempest/api/identity/admin/v3/test_users.py
@@ -13,6 +13,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import time
+
 from tempest.api.identity import base
 from tempest.common.utils import data_utils
 from tempest import test
@@ -76,6 +78,14 @@
         new_password = data_utils.rand_name('pass1')
         self.client.update_user_password(user['id'], new_password,
                                          original_password)
+        # TODO(lbragstad): Sleeping after the response status has been checked
+        # and the body loaded as JSON allows requests to fail-fast. The sleep
+        # is necessary because keystone will err on the side of security and
+        # invalidate tokens within a small margin of error (within the same
+        # wall clock second) after a revocation event is issued (such as a
+        # password change). Remove this once keystone and Fernet support
+        # sub-second precision, see bug 1517697 for more details.
+        time.sleep(1)
         resp = self.token.auth(user_id=user['id'],
                                password=new_password).response
         subject_token = resp['x-subject-token']
diff --git a/tempest/api/identity/v2/test_ec2_credentials.py b/tempest/api/identity/v2/test_ec2_credentials.py
index 763d8de..88161a3 100644
--- a/tempest/api/identity/v2/test_ec2_credentials.py
+++ b/tempest/api/identity/v2/test_ec2_credentials.py
@@ -38,7 +38,7 @@
         """Create user ec2 credentials."""
         resp = self.non_admin_client.create_user_ec2_credentials(
             self.creds.credentials.user_id,
-            self.creds.credentials.tenant_id)["credential"]
+            tenant_id=self.creds.credentials.tenant_id)["credential"]
         access = resp['access']
         self.addCleanup(
             self.non_admin_client.delete_user_ec2_credentials,
@@ -56,12 +56,12 @@
         # create first ec2 credentials
         creds1 = self.non_admin_client.create_user_ec2_credentials(
             self.creds.credentials.user_id,
-            self.creds.credentials.tenant_id)["credential"]
+            tenant_id=self.creds.credentials.tenant_id)["credential"]
         created_creds.append(creds1['access'])
         # create second ec2 credentials
         creds2 = self.non_admin_client.create_user_ec2_credentials(
             self.creds.credentials.user_id,
-            self.creds.credentials.tenant_id)["credential"]
+            tenant_id=self.creds.credentials.tenant_id)["credential"]
         created_creds.append(creds2['access'])
         # add credentials to be cleaned up
         self.addCleanup(
@@ -86,7 +86,7 @@
         """Get the definite user ec2 credentials."""
         resp = self.non_admin_client.create_user_ec2_credentials(
             self.creds.credentials.user_id,
-            self.creds.credentials.tenant_id)["credential"]
+            tenant_id=self.creds.credentials.tenant_id)["credential"]
         self.addCleanup(
             self.non_admin_client.delete_user_ec2_credentials,
             self.creds.credentials.user_id, resp['access'])
@@ -102,7 +102,7 @@
         """Delete user ec2 credentials."""
         resp = self.non_admin_client.create_user_ec2_credentials(
             self.creds.credentials.user_id,
-            self.creds.credentials.tenant_id)["credential"]
+            tenant_id=self.creds.credentials.tenant_id)["credential"]
         access = resp['access']
         self.non_admin_client.delete_user_ec2_credentials(
             self.creds.credentials.user_id, access)
diff --git a/tempest/api/identity/v2/test_users.py b/tempest/api/identity/v2/test_users.py
index 03c6621..5f2a8c4 100644
--- a/tempest/api/identity/v2/test_users.py
+++ b/tempest/api/identity/v2/test_users.py
@@ -56,8 +56,8 @@
             old_pass=new_pass)
 
         # user updates own password
-        resp = self.non_admin_client.update_user_own_password(
-            user_id=user_id, new_pass=new_pass, old_pass=old_pass)['access']
+        self.non_admin_client.update_user_own_password(
+            user_id=user_id, new_pass=new_pass, old_pass=old_pass)
 
         # TODO(lbragstad): Sleeping after the response status has been checked
         # and the body loaded as JSON allows requests to fail-fast. The sleep
@@ -68,8 +68,6 @@
         # sub-second precision.
         time.sleep(1)
 
-        # check authorization with new token
-        self.non_admin_token_client.auth_token(resp['token']['id'])
         # check authorization with new password
         self.non_admin_token_client.auth(self.username,
                                          new_pass,
diff --git a/tempest/api/image/v2/test_images_member.py b/tempest/api/image/v2/test_images_member.py
index 98ff64b..bb73318 100644
--- a/tempest/api/image/v2/test_images_member.py
+++ b/tempest/api/image/v2/test_images_member.py
@@ -19,8 +19,8 @@
     @test.idempotent_id('5934c6ea-27dc-4d6e-9421-eeb5e045494a')
     def test_image_share_accept(self):
         image_id = self._create_image()
-        member = self.os_img_client.add_image_member(image_id,
-                                                     member=self.alt_tenant_id)
+        member = self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.assertEqual(member['member_id'], self.alt_tenant_id)
         self.assertEqual(member['image_id'], image_id)
         self.assertEqual(member['status'], 'pending')
@@ -40,8 +40,8 @@
     @test.idempotent_id('d9e83e5f-3524-4b38-a900-22abcb26e90e')
     def test_image_share_reject(self):
         image_id = self._create_image()
-        member = self.os_img_client.add_image_member(image_id,
-                                                     member=self.alt_tenant_id)
+        member = self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.assertEqual(member['member_id'], self.alt_tenant_id)
         self.assertEqual(member['image_id'], image_id)
         self.assertEqual(member['status'], 'pending')
@@ -54,8 +54,8 @@
     @test.idempotent_id('a6ee18b9-4378-465e-9ad9-9a6de58a3287')
     def test_get_image_member(self):
         image_id = self._create_image()
-        self.os_img_client.add_image_member(image_id,
-                                            member=self.alt_tenant_id)
+        self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
                                                 status='accepted')
@@ -70,8 +70,8 @@
     @test.idempotent_id('72989bc7-2268-48ed-af22-8821e835c914')
     def test_remove_image_member(self):
         image_id = self._create_image()
-        self.os_img_client.add_image_member(image_id,
-                                            member=self.alt_tenant_id)
+        self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
                                                 status='accepted')
@@ -93,8 +93,8 @@
     @test.idempotent_id('cb961424-3f68-4d21-8e36-30ad66fb6bfb')
     def test_get_private_image(self):
         image_id = self._create_image()
-        member = self.os_img_client.add_image_member(image_id,
-                                                     member=self.alt_tenant_id)
+        member = self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.assertEqual(member['member_id'], self.alt_tenant_id)
         self.assertEqual(member['image_id'], image_id)
         self.assertEqual(member['status'], 'pending')
diff --git a/tempest/api/image/v2/test_images_member_negative.py b/tempest/api/image/v2/test_images_member_negative.py
index d5ea291..eb90719 100644
--- a/tempest/api/image/v2/test_images_member_negative.py
+++ b/tempest/api/image/v2/test_images_member_negative.py
@@ -22,8 +22,8 @@
     @test.idempotent_id('b79efb37-820d-4cf0-b54c-308b00cf842c')
     def test_image_share_invalid_status(self):
         image_id = self._create_image()
-        member = self.os_img_client.add_image_member(image_id,
-                                                     member=self.alt_tenant_id)
+        member = self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.assertEqual(member['status'], 'pending')
         self.assertRaises(lib_exc.BadRequest,
                           self.alt_img_client.update_image_member,
@@ -34,8 +34,8 @@
     @test.idempotent_id('27002f74-109e-4a37-acd0-f91cd4597967')
     def test_image_share_owner_cannot_accept(self):
         image_id = self._create_image()
-        member = self.os_img_client.add_image_member(image_id,
-                                                     member=self.alt_tenant_id)
+        member = self.os_img_client.create_image_member(
+            image_id, member=self.alt_tenant_id)
         self.assertEqual(member['status'], 'pending')
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
         self.assertRaises(lib_exc.Forbidden,
diff --git a/tempest/api/network/admin/test_l3_agent_scheduler.py b/tempest/api/network/admin/test_l3_agent_scheduler.py
index d5556b8..36747a3 100644
--- a/tempest/api/network/admin/test_l3_agent_scheduler.py
+++ b/tempest/api/network/admin/test_l3_agent_scheduler.py
@@ -97,7 +97,7 @@
         l3_agent_ids = list()
         self.admin_client.add_router_to_l3_agent(
             self.agent['id'],
-            self.router['id'])
+            router_id=self.router['id'])
         body = (
             self.admin_client.list_l3_agents_hosting_router(self.router['id']))
         for agent in body['agents']:
diff --git a/tempest/api/network/admin/test_negative_quotas.py b/tempest/api/network/admin/test_negative_quotas.py
new file mode 100644
index 0000000..5c4c421
--- /dev/null
+++ b/tempest/api/network/admin/test_negative_quotas.py
@@ -0,0 +1,68 @@
+# Copyright 2015 Cloudwatt
+# 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.network import base
+from tempest import test
+from tempest_lib import exceptions as lib_exc
+
+
+class QuotasNegativeTest(base.BaseAdminNetworkTest):
+    """Tests the following operations in the Neutron API:
+
+        set network quota and exceed this quota
+
+    v2.0 of the API is assumed.
+    It is also assumed that the per-tenant quota extension API is configured
+    in /etc/neutron/neutron.conf as follows:
+
+        quota_driver = neutron.db.quota_db.DbQuotaDriver
+    """
+
+    @classmethod
+    def skip_checks(cls):
+        super(QuotasNegativeTest, cls).skip_checks()
+        if not test.is_extension_enabled('quotas', 'network'):
+            msg = "quotas extension not enabled."
+            raise cls.skipException(msg)
+
+    @classmethod
+    def setup_clients(cls):
+        super(QuotasNegativeTest, cls).setup_clients()
+        cls.identity_admin_client = cls.os_adm.identity_client
+
+    @test.idempotent_id('644f4e1b-1bf9-4af0-9fd8-eb56ac0f51cf')
+    def test_network_quota_exceeding(self):
+        # Set the network quota to two
+        self.admin_client.update_quotas(self.networks_client.tenant_id,
+                                        network=2)
+        self.addCleanup(self.admin_client.reset_quotas,
+                        self.networks_client.tenant_id)
+
+        # Create two networks
+        n1 = self.networks_client.create_network()
+        self.addCleanup(self.networks_client.delete_network,
+                        n1['network']['id'])
+        n2 = self.networks_client.create_network()
+        self.addCleanup(self.networks_client.delete_network,
+                        n2['network']['id'])
+
+        # Try to create a third network while the quota is two
+        with self.assertRaisesRegexp(
+                lib_exc.Conflict,
+                "An object with that identifier already exists\\n" +
+                "Details.*Quota exceeded for resources: \['network'\].*"):
+            n3 = self.networks_client.create_network()
+            self.addCleanup(self.networks_client.delete_network,
+                            n3['network']['id'])
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index b4ea29b..c5a3dff 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -98,9 +98,12 @@
                     floating_ip['id'])
 
             # Clean up metering label rules
+            # Not all classes in the hierarchy have the client class variable
+            if len(cls.metering_label_rules) > 0:
+                label_rules_client = cls.admin_metering_label_rules_client
             for metering_label_rule in cls.metering_label_rules:
                 cls._try_delete_resource(
-                    cls.admin_client.delete_metering_label_rule,
+                    label_rules_client.delete_metering_label_rule,
                     metering_label_rule['id'])
             # Clean up metering labels
             for metering_label in cls.metering_labels:
@@ -273,6 +276,8 @@
         cls.admin_ports_client = cls.os_adm.ports_client
         cls.admin_floating_ips_client = cls.os_adm.floating_ips_client
         cls.admin_metering_labels_client = cls.os_adm.metering_labels_client
+        cls.admin_metering_label_rules_client = (
+            cls.os_adm.metering_label_rules_client)
 
     @classmethod
     def create_metering_label(cls, name, description):
@@ -288,7 +293,8 @@
     def create_metering_label_rule(cls, remote_ip_prefix, direction,
                                    metering_label_id):
         """Wrapper utility that returns a test metering label rule."""
-        body = cls.admin_client.create_metering_label_rule(
+        client = cls.admin_metering_label_rules_client
+        body = client.create_metering_label_rule(
             remote_ip_prefix=remote_ip_prefix, direction=direction,
             metering_label_id=metering_label_id)
         metering_label_rule = body['metering_label_rule']
diff --git a/tempest/api/network/test_metering_extensions.py b/tempest/api/network/test_metering_extensions.py
index c4021b4..007ba3b 100644
--- a/tempest/api/network/test_metering_extensions.py
+++ b/tempest/api/network/test_metering_extensions.py
@@ -59,12 +59,11 @@
         self.assertEqual(len(labels['metering_labels']), 0)
 
     def _delete_metering_label_rule(self, metering_label_rule_id):
+        client = self.admin_metering_label_rules_client
         # Deletes a rule and verifies if it is deleted or not
-        self.admin_client.delete_metering_label_rule(
-            metering_label_rule_id)
+        client.delete_metering_label_rule(metering_label_rule_id)
         # Asserting that the rule is not found in list after deletion
-        rules = (self.admin_client.list_metering_label_rules(
-                 id=metering_label_rule_id))
+        rules = client.list_metering_label_rules(id=metering_label_rule_id)
         self.assertEqual(len(rules['metering_label_rules']), 0)
 
     @test.idempotent_id('e2fb2f8c-45bf-429a-9f17-171c70444612')
@@ -105,8 +104,9 @@
 
     @test.idempotent_id('cc832399-6681-493b-9d79-0202831a1281')
     def test_list_metering_label_rules(self):
+        client = self.admin_metering_label_rules_client
         # Verify rule filtering
-        body = self.admin_client.list_metering_label_rules(id=33)
+        body = client.list_metering_label_rules(id=33)
         metering_label_rules = body['metering_label_rules']
         self.assertEqual(0, len(metering_label_rules))
 
@@ -115,7 +115,8 @@
         # Creates a rule
         remote_ip_prefix = ("10.0.1.0/24" if self._ip_version == 4
                             else "fd03::/64")
-        body = (self.admin_client.create_metering_label_rule(
+        client = self.admin_metering_label_rules_client
+        body = (client.create_metering_label_rule(
                 remote_ip_prefix=remote_ip_prefix,
                 direction="ingress",
                 metering_label_id=self.metering_label['id']))
@@ -124,14 +125,14 @@
                         metering_label_rule['id'])
         # Assert whether created rules are found in rules list or fail
         # if created rules are not found in rules list
-        rules = (self.admin_client.list_metering_label_rules(
-                 id=metering_label_rule['id']))
+        rules = client.list_metering_label_rules(id=metering_label_rule['id'])
         self.assertEqual(len(rules['metering_label_rules']), 1)
 
     @test.idempotent_id('b7354489-96ea-41f3-9452-bace120fb4a7')
     def test_show_metering_label_rule(self):
         # Verifies the details of a rule
-        body = (self.admin_client.show_metering_label_rule(
+        client = self.admin_metering_label_rules_client
+        body = (client.show_metering_label_rule(
                 self.metering_label_rule['id']))
         metering_label_rule = body['metering_label_rule']
         self.assertEqual(self.metering_label_rule['id'],
diff --git a/tempest/api/volume/admin/test_volume_services.py b/tempest/api/volume/admin/test_volume_services.py
index 6692594..2b7ee45 100644
--- a/tempest/api/volume/admin/test_volume_services.py
+++ b/tempest/api/volume/admin/test_volume_services.py
@@ -39,9 +39,8 @@
 
     @test.idempotent_id('63a3e1ca-37ee-4983-826d-83276a370d25')
     def test_get_service_by_service_binary_name(self):
-        params = {'binary': self.binary_name}
-        services = (self.admin_volume_services_client.list_services(params)
-                    ['services'])
+        services = (self.admin_volume_services_client.list_services(
+            binary=self.binary_name)['services'])
         self.assertNotEqual(0, len(services))
         for service in services:
             self.assertEqual(self.binary_name, service['binary'])
@@ -50,10 +49,9 @@
     def test_get_service_by_host_name(self):
         services_on_host = [service for service in self.services if
                             service['host'] == self.host_name]
-        params = {'host': self.host_name}
 
-        services = (self.admin_volume_services_client.list_services(params)
-                    ['services'])
+        services = (self.admin_volume_services_client.list_services(
+            host=self.host_name)['services'])
 
         # we could have a periodic job checkin between the 2 service
         # lookups, so only compare binary lists.
@@ -65,10 +63,10 @@
 
     @test.idempotent_id('ffa6167c-4497-4944-a464-226bbdb53908')
     def test_get_service_by_service_and_host_name(self):
-        params = {'host': self.host_name, 'binary': self.binary_name}
 
-        services = (self.admin_volume_services_client.list_services(params)
-                    ['services'])
+        services = (self.admin_volume_services_client.list_services(
+            host=self.host_name, binary=self.binary_name))['services']
+
         self.assertEqual(1, len(services))
         self.assertEqual(self.host_name, services[0]['host'])
         self.assertEqual(self.binary_name, services[0]['binary'])
diff --git a/tempest/api/volume/admin/test_volumes_backup.py b/tempest/api/volume/admin/test_volumes_backup.py
index 0399413..ed34a9b 100644
--- a/tempest/api/volume/admin/test_volumes_backup.py
+++ b/tempest/api/volume/admin/test_volumes_backup.py
@@ -48,7 +48,7 @@
         # Create backup
         backup_name = data_utils.rand_name('Backup')
         create_backup = self.backups_adm_client.create_backup
-        backup = create_backup(self.volume['id'],
+        backup = create_backup(volume_id=self.volume['id'],
                                name=backup_name)['backup']
         self.addCleanup(self.backups_adm_client.delete_backup,
                         backup['id'])
@@ -85,9 +85,8 @@
     def test_volume_backup_export_import(self):
         # Create backup
         backup_name = data_utils.rand_name('Backup')
-        backup = (self.backups_adm_client.create_backup(self.volume['id'],
-                                                        name=backup_name)
-                  ['backup'])
+        backup = (self.backups_adm_client.create_backup(
+            volume_id=self.volume['id'], name=backup_name)['backup'])
         self.addCleanup(self._delete_backup, backup['id'])
         self.assertEqual(backup_name, backup['name'])
         self.backups_adm_client.wait_for_backup_status(backup['id'],
diff --git a/tempest/api_schema/response/compute/v2_1/interfaces.py b/tempest/api_schema/response/compute/v2_1/interfaces.py
deleted file mode 100644
index 130775b..0000000
--- a/tempest/api_schema/response/compute/v2_1/interfaces.py
+++ /dev/null
@@ -1,73 +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.v2_1 import parameter_types
-
-interface_common_info = {
-    'type': 'object',
-    'properties': {
-        'port_state': {'type': 'string'},
-        'fixed_ips': {
-            'type': 'array',
-            'items': {
-                'type': 'object',
-                'properties': {
-                    'subnet_id': {
-                        'type': 'string',
-                        'format': 'uuid'
-                    },
-                    'ip_address': parameter_types.ip_address
-                },
-                'additionalProperties': False,
-                'required': ['subnet_id', 'ip_address']
-            }
-        },
-        'port_id': {'type': 'string', 'format': 'uuid'},
-        'net_id': {'type': 'string', 'format': 'uuid'},
-        'mac_addr': parameter_types.mac_address
-    },
-    'additionalProperties': False,
-    'required': ['port_state', 'fixed_ips', 'port_id', 'net_id', 'mac_addr']
-}
-
-get_create_interfaces = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'interfaceAttachment': interface_common_info
-        },
-        'additionalProperties': False,
-        'required': ['interfaceAttachment']
-    }
-}
-
-list_interfaces = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'interfaceAttachments': {
-                'type': 'array',
-                'items': interface_common_info
-            }
-        },
-        'additionalProperties': False,
-        'required': ['interfaceAttachments']
-    }
-}
-
-delete_interface = {
-    'status_code': [202]
-}
diff --git a/tempest/api_schema/response/compute/v2_1/volumes.py b/tempest/api_schema/response/compute/v2_1/volumes.py
deleted file mode 100644
index bb34acb..0000000
--- a/tempest/api_schema/response/compute/v2_1/volumes.py
+++ /dev/null
@@ -1,120 +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.
-
-create_get_volume = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'volume': {
-                'type': 'object',
-                'properties': {
-                    'id': {'type': 'string'},
-                    'status': {'type': 'string'},
-                    'displayName': {'type': ['string', 'null']},
-                    'availabilityZone': {'type': 'string'},
-                    'createdAt': {'type': 'string'},
-                    'displayDescription': {'type': ['string', 'null']},
-                    'volumeType': {'type': ['string', 'null']},
-                    'snapshotId': {'type': ['string', 'null']},
-                    'metadata': {'type': 'object'},
-                    'size': {'type': 'integer'},
-                    'attachments': {
-                        'type': 'array',
-                        'items': {
-                            'type': 'object',
-                            'properties': {
-                                'id': {'type': 'string'},
-                                'device': {'type': 'string'},
-                                'volumeId': {'type': 'string'},
-                                'serverId': {'type': 'string'}
-                            },
-                            'additionalProperties': False,
-                            # NOTE- If volume is not attached to any server
-                            # then, 'attachments' attributes comes as array
-                            # with empty objects "[{}]" due to that elements
-                            # of 'attachments' cannot defined as 'required'.
-                            # If it would come as empty array "[]" then,
-                            # those elements can be defined as 'required'.
-                        }
-                    }
-                },
-                'additionalProperties': False,
-                'required': ['id', 'status', 'displayName', 'availabilityZone',
-                             'createdAt', 'displayDescription', 'volumeType',
-                             'snapshotId', 'metadata', 'size', 'attachments']
-            }
-        },
-        'additionalProperties': False,
-        'required': ['volume']
-    }
-}
-
-list_volumes = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'volumes': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'id': {'type': 'string'},
-                        'status': {'type': 'string'},
-                        'displayName': {'type': ['string', 'null']},
-                        'availabilityZone': {'type': 'string'},
-                        'createdAt': {'type': 'string'},
-                        'displayDescription': {'type': ['string', 'null']},
-                        'volumeType': {'type': ['string', 'null']},
-                        'snapshotId': {'type': ['string', 'null']},
-                        'metadata': {'type': 'object'},
-                        'size': {'type': 'integer'},
-                        'attachments': {
-                            'type': 'array',
-                            'items': {
-                                'type': 'object',
-                                'properties': {
-                                    'id': {'type': 'string'},
-                                    'device': {'type': 'string'},
-                                    'volumeId': {'type': 'string'},
-                                    'serverId': {'type': 'string'}
-                                },
-                                'additionalProperties': False,
-                                # NOTE- If volume is not attached to any server
-                                # then, 'attachments' attributes comes as array
-                                # with empty object "[{}]" due to that elements
-                                # of 'attachments' cannot defined as 'required'
-                                # If it would come as empty array "[]" then,
-                                # those elements can be defined as 'required'.
-                            }
-                        }
-                    },
-                    'additionalProperties': False,
-                    'required': ['id', 'status', 'displayName',
-                                 'availabilityZone', 'createdAt',
-                                 'displayDescription', 'volumeType',
-                                 'snapshotId', 'metadata', 'size',
-                                 'attachments']
-                }
-            }
-        },
-        'additionalProperties': False,
-        'required': ['volumes']
-    }
-}
-
-delete_volume = {
-    'status_code': [202]
-}
diff --git a/tempest/clients.py b/tempest/clients.py
index d16b47b..955748b 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -39,6 +39,7 @@
     as ComputeImagesClient
 from tempest_lib.services.compute.instance_usage_audit_log_client import \
     InstanceUsagesAuditLogClient
+from tempest_lib.services.compute.interfaces_client import InterfacesClient
 from tempest_lib.services.compute.limits_client import LimitsClient
 from tempest_lib.services.compute.migrations_client import MigrationsClient
 from tempest_lib.services.compute.networks_client import NetworksClient \
@@ -49,7 +50,7 @@
 from tempest_lib.services.compute.security_group_default_rules_client import \
     SecurityGroupDefaultRulesClient
 from tempest_lib.services.compute.security_groups_client import \
-    SecurityGroupsClient
+    SecurityGroupsClient as ComputeSecurityGroupsClient
 from tempest_lib.services.compute.services_client import ServicesClient
 from tempest_lib.services.compute.snapshots_client import \
     SnapshotsClient as ComputeSnapshotsClient
@@ -58,6 +59,8 @@
 from tempest_lib.services.compute.tenant_usages_client import \
     TenantUsagesClient
 from tempest_lib.services.compute.versions_client import VersionsClient
+from tempest_lib.services.compute.volumes_client import \
+    VolumesClient as ComputeVolumesClient
 from tempest_lib.services.identity.v2.token_client import TokenClient
 from tempest_lib.services.identity.v3.token_client import V3TokenClient
 
@@ -70,16 +73,12 @@
 from tempest.services import botoclients
 from tempest.services.compute.json.floating_ips_client import \
     FloatingIPsClient as ComputeFloatingIPsClient
-from tempest.services.compute.json.interfaces_client import \
-    InterfacesClient
 from tempest.services.compute.json.keypairs_client import KeyPairsClient
 from tempest.services.compute.json.security_group_rules_client import \
     SecurityGroupRulesClient
 from tempest.services.compute.json.server_groups_client import \
     ServerGroupsClient
 from tempest.services.compute.json.servers_client import ServersClient
-from tempest.services.compute.json.volumes_client import \
-    VolumesClient as ComputeVolumesClient
 from tempest.services.data_processing.v1_1.data_processing_client import \
     DataProcessingClient
 from tempest.services.database.json.flavors_client import \
@@ -108,6 +107,8 @@
 from tempest.services.messaging.json.messaging_client import \
     MessagingClient
 from tempest.services.network.json.floating_ips_client import FloatingIPsClient
+from tempest.services.network.json.metering_label_rules_client import \
+    MeteringLabelRulesClient
 from tempest.services.network.json.metering_labels_client import \
     MeteringLabelsClient
 from tempest.services.network.json.network_client import NetworkClient
@@ -122,39 +123,42 @@
 from tempest.services.telemetry.json.alarming_client import AlarmingClient
 from tempest.services.telemetry.json.telemetry_client import \
     TelemetryClient
-from tempest.services.volume.v1.json.admin.volume_hosts_client import \
-    VolumeHostsClient
-from tempest.services.volume.v1.json.admin.volume_quotas_client import \
-    VolumeQuotasClient
-from tempest.services.volume.v1.json.admin.volume_services_client import \
-    VolumesServicesClient
-from tempest.services.volume.v1.json.admin.volume_types_client import \
-    VolumeTypesClient
+from tempest.services.volume.v1.json.admin.hosts_client import \
+    HostsClient as VolumeHostsClient
+from tempest.services.volume.v1.json.admin.quotas_client import \
+    QuotasClient as VolumeQuotasClient
+from tempest.services.volume.v1.json.admin.services_client import \
+    ServicesClient as VolumeServicesClient
+from tempest.services.volume.v1.json.admin.types_client import \
+    TypesClient as VolumeTypesClient
 from tempest.services.volume.v1.json.availability_zone_client import \
-    VolumeAvailabilityZoneClient
+    AvailabilityZoneClient as VolumeAvailabilityZoneClient
 from tempest.services.volume.v1.json.backups_client import BackupsClient
 from tempest.services.volume.v1.json.extensions_client import \
-    ExtensionsClient as VolumeExtensionClient
+    ExtensionsClient as VolumeExtensionsClient
 from tempest.services.volume.v1.json.qos_client import QosSpecsClient
 from tempest.services.volume.v1.json.snapshots_client import SnapshotsClient
 from tempest.services.volume.v1.json.volumes_client import VolumesClient
-from tempest.services.volume.v2.json.admin.volume_hosts_client import \
-    VolumeHostsV2Client
-from tempest.services.volume.v2.json.admin.volume_quotas_client import \
-    VolumeQuotasV2Client
-from tempest.services.volume.v2.json.admin.volume_services_client import \
-    VolumesServicesV2Client
-from tempest.services.volume.v2.json.admin.volume_types_client import \
-    VolumeTypesV2Client
+from tempest.services.volume.v2.json.admin.hosts_client import \
+    HostsClient as VolumeHostsV2Client
+from tempest.services.volume.v2.json.admin.quotas_client import \
+    QuotasClient as VolumeQuotasV2Client
+from tempest.services.volume.v2.json.admin.services_client import \
+    ServicesClient as VolumeServicesV2Client
+from tempest.services.volume.v2.json.admin.types_client import \
+    TypesClient as VolumeTypesV2Client
 from tempest.services.volume.v2.json.availability_zone_client import \
-    VolumeV2AvailabilityZoneClient
-from tempest.services.volume.v2.json.backups_client import BackupsClientV2
+    AvailabilityZoneClient as VolumeAvailabilityZoneV2Client
+from tempest.services.volume.v2.json.backups_client import \
+    BackupsClient as BackupsV2Client
 from tempest.services.volume.v2.json.extensions_client import \
-    ExtensionsV2Client as VolumeV2ExtensionClient
-from tempest.services.volume.v2.json.qos_client import QosSpecsV2Client
+    ExtensionsClient as VolumeExtensionsV2Client
+from tempest.services.volume.v2.json.qos_client import \
+    QosSpecsClient as QosSpecsV2Client
 from tempest.services.volume.v2.json.snapshots_client import \
-    SnapshotsV2Client
-from tempest.services.volume.v2.json.volumes_client import VolumesV2Client
+    SnapshotsClient as SnapshotsV2Client
+from tempest.services.volume.v2.json.volumes_client import \
+    VolumesClient as VolumesV2Client
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -241,6 +245,14 @@
             build_interval=CONF.network.build_interval,
             build_timeout=CONF.network.build_timeout,
             **self.default_params)
+        self.metering_label_rules_client = MeteringLabelRulesClient(
+            self.auth_provider,
+            CONF.network.catalog_type,
+            CONF.network.region or CONF.identity.region,
+            endpoint_type=CONF.network.endpoint_type,
+            build_interval=CONF.network.build_interval,
+            build_timeout=CONF.network.build_timeout,
+            **self.default_params)
         self.messaging_client = MessagingClient(
             self.auth_provider,
             CONF.messaging.catalog_type,
@@ -346,7 +358,7 @@
             self.auth_provider, **params)
         self.security_group_rules_client = SecurityGroupRulesClient(
             self.auth_provider, **params)
-        self.security_groups_client = SecurityGroupsClient(
+        self.compute_security_groups_client = ComputeSecurityGroupsClient(
             self.auth_provider, **params)
         self.interfaces_client = InterfacesClient(self.auth_provider,
                                                   **params)
@@ -462,10 +474,12 @@
                                                 **params)
         self.volume_qos_v2_client = QosSpecsV2Client(
             self.auth_provider, **params)
-        self.volume_services_v2_client = VolumesServicesV2Client(
+        self.volume_services_client = VolumeServicesClient(
+            self.auth_provider, **params)
+        self.volume_services_v2_client = VolumeServicesV2Client(
             self.auth_provider, **params)
         self.backups_client = BackupsClient(self.auth_provider, **params)
-        self.backups_v2_client = BackupsClientV2(self.auth_provider,
+        self.backups_v2_client = BackupsV2Client(self.auth_provider,
                                                  **params)
         self.snapshots_client = SnapshotsClient(self.auth_provider,
                                                 **params)
@@ -479,7 +493,7 @@
             **params)
         self.volume_types_client = VolumeTypesClient(self.auth_provider,
                                                      **params)
-        self.volume_services_client = VolumesServicesClient(
+        self.volume_types_v2_client = VolumeTypesV2Client(
             self.auth_provider, **params)
         self.volume_hosts_client = VolumeHostsClient(self.auth_provider,
                                                      **params)
@@ -489,16 +503,14 @@
                                                        **params)
         self.volume_quotas_v2_client = VolumeQuotasV2Client(self.auth_provider,
                                                             **params)
-        self.volumes_extension_client = VolumeExtensionClient(
+        self.volumes_extension_client = VolumeExtensionsClient(
             self.auth_provider, **params)
-        self.volumes_v2_extension_client = VolumeV2ExtensionClient(
+        self.volumes_v2_extension_client = VolumeExtensionsV2Client(
             self.auth_provider, **params)
         self.volume_availability_zone_client = \
             VolumeAvailabilityZoneClient(self.auth_provider, **params)
         self.volume_v2_availability_zone_client = \
-            VolumeV2AvailabilityZoneClient(self.auth_provider, **params)
-        self.volume_types_v2_client = VolumeTypesV2Client(
-            self.auth_provider, **params)
+            VolumeAvailabilityZoneV2Client(self.auth_provider, **params)
 
     def _set_object_storage_clients(self):
         params = {
diff --git a/tempest/cmd/cleanup_service.py b/tempest/cmd/cleanup_service.py
index f2dd7af..4fd92ab 100644
--- a/tempest/cmd/cleanup_service.py
+++ b/tempest/cmd/cleanup_service.py
@@ -269,7 +269,7 @@
 class SecurityGroupService(BaseService):
     def __init__(self, manager, **kwargs):
         super(SecurityGroupService, self).__init__(kwargs)
-        self.client = manager.security_groups_client
+        self.client = manager.compute_security_groups_client
 
     def list(self):
         client = self.client
@@ -388,6 +388,7 @@
         self.ports_client = manager.ports_client
         self.floating_ips_client = manager.floating_ips_client
         self.metering_labels_client = manager.metering_labels_client
+        self.metering_label_rules_client = manager.metering_label_rules_client
 
     def _filter_by_conf_networks(self, item_list):
         if not item_list or not all(('network_id' in i for i in item_list)):
@@ -577,7 +578,7 @@
 class NetworkMeteringLabelRuleService(NetworkService):
 
     def list(self):
-        client = self.client
+        client = self.metering_label_rules_client
         rules = client.list_metering_label_rules()
         rules = rules['metering_label_rules']
         rules = self._filter_by_tenant_id(rules)
@@ -585,7 +586,7 @@
         return rules
 
     def delete(self):
-        client = self.client
+        client = self.metering_label_rules_client
         rules = self.list()
         for rule in rules:
             try:
diff --git a/tempest/cmd/javelin.py b/tempest/cmd/javelin.py
index c5e4a7e..c98073b 100755
--- a/tempest/cmd/javelin.py
+++ b/tempest/cmd/javelin.py
@@ -895,7 +895,7 @@
         client.servers.wait_for_server_status(server_id, 'ACTIVE')
         # create security group(s) after server spawning
         for secgroup in server['secgroups']:
-            client.servers.add_security_group(server_id, secgroup)
+            client.servers.add_security_group(server_id, name=secgroup)
         if CONF.compute.use_floatingip_for_ssh:
             floating_ip_pool = server.get('floating_ip_pool')
             floating_ip = client.floating_ips.create_floating_ip(
diff --git a/tempest/common/api_version_request.py b/tempest/common/api_version_request.py
index 72a11ea..d8a5b56 100644
--- a/tempest/common/api_version_request.py
+++ b/tempest/common/api_version_request.py
@@ -54,6 +54,8 @@
             None value should be used to create Null APIVersionRequest,
             which is equal to 0.0
         """
+        # NOTE(gmann): 'version_string' as String "None" will be considered as
+        # invalid version string.
         self.ver_major = 0
         self.ver_minor = 0
 
diff --git a/tempest/common/validation_resources.py b/tempest/common/validation_resources.py
index 1908b68..f526299 100644
--- a/tempest/common/validation_resources.py
+++ b/tempest/common/validation_resources.py
@@ -23,7 +23,7 @@
 
 
 def create_ssh_security_group(os, add_rule=False):
-    security_groups_client = os.security_groups_client
+    security_groups_client = os.compute_security_groups_client
     security_group_rules_client = os.security_group_rules_client
     sg_name = data_utils.rand_name('securitygroup-')
     sg_description = data_utils.rand_name('description-')
@@ -81,7 +81,7 @@
                 if not has_exception:
                     has_exception = exc
         if 'security_group' in validation_data:
-            security_group_client = os.security_groups_client
+            security_group_client = os.compute_security_groups_client
             sec_id = validation_data['security_group']['id']
             try:
                 security_group_client.delete_security_group(sec_id)
diff --git a/tempest/config.py b/tempest/config.py
index 26dda2d..a6212fb 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -347,16 +347,18 @@
                     "The format is 'X.Y', where 'X' and 'Y' are int values. "
                     "Tempest selects tests based on the range between "
                     "min_microversion and max_microversion. "
-                    "If both values are None, Tempest avoids tests which "
-                    "require a microversion."),
+                    "If both values are not specified, Tempest avoids tests "
+                    "which require a microversion. Valid values are string "
+                    "with format 'X.Y' or string 'latest'"),
     cfg.StrOpt('max_microversion',
                default=None,
                help="Upper version of the test target microversion range. "
                     "The format is 'X.Y', where 'X' and 'Y' are int values. "
                     "Tempest selects tests based on the range between "
                     "min_microversion and max_microversion. "
-                    "If both values are None, Tempest avoids tests which "
-                    "require a microversion."),
+                    "If both values are not specified, Tempest avoids tests "
+                    "which require a microversion. Valid values are string "
+                    "with format 'X.Y' or string 'latest'"),
     cfg.BoolOpt('disk_config',
                 default=True,
                 help="If false, skip disk config tests"),
diff --git a/tempest/exceptions.py b/tempest/exceptions.py
index 8537898..1d725af 100644
--- a/tempest/exceptions.py
+++ b/tempest/exceptions.py
@@ -177,8 +177,8 @@
 
 
 class InvalidAPIVersionString(TempestException):
-    msg_fmt = ("API Version String %(version)s is of invalid format. Must "
-               "be of format MajorNum.MinorNum.")
+    message = ("API Version String %(version)s is of invalid format. Must "
+               "be of format MajorNum.MinorNum or string 'latest'.")
 
 
 class CommandFailed(Exception):
diff --git a/tempest/hacking/ignored_list_T110.txt b/tempest/hacking/ignored_list_T110.txt
index 211a7d6..8de3151 100644
--- a/tempest/hacking/ignored_list_T110.txt
+++ b/tempest/hacking/ignored_list_T110.txt
@@ -1,8 +1,4 @@
-./tempest/services/database/json/flavors_client.py
-./tempest/services/identity/v3/json/credentials_client.py
 ./tempest/services/identity/v3/json/identity_client.py
-./tempest/services/identity/v3/json/policy_client.py
-./tempest/services/identity/v3/json/region_client.py
 ./tempest/services/messaging/json/messaging_client.py
 ./tempest/services/object_storage/object_client.py
 ./tempest/services/telemetry/json/alarming_client.py
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index 24877f4..c304136 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -55,7 +55,8 @@
         cls.images_client = cls.manager.images_client
         cls.keypairs_client = cls.manager.keypairs_client
         # Nova security groups client
-        cls.security_groups_client = cls.manager.security_groups_client
+        cls.compute_security_groups_client = (
+            cls.manager.compute_security_groups_client)
         cls.security_group_rules_client = (
             cls.manager.security_group_rules_client)
         cls.servers_client = cls.manager.servers_client
@@ -286,7 +287,7 @@
         return volume
 
     def _create_loginable_secgroup_rule(self, secgroup_id=None):
-        _client = self.security_groups_client
+        _client = self.compute_security_groups_client
         _client_rules = self.security_group_rules_client
         if secgroup_id is None:
             sgs = _client.list_security_groups()['security_groups']
@@ -328,13 +329,14 @@
         # Create security group
         sg_name = data_utils.rand_name(self.__class__.__name__)
         sg_desc = sg_name + " description"
-        secgroup = self.security_groups_client.create_security_group(
+        secgroup = self.compute_security_groups_client.create_security_group(
             name=sg_name, description=sg_desc)['security_group']
         self.assertEqual(secgroup['name'], sg_name)
         self.assertEqual(secgroup['description'], sg_desc)
-        self.addCleanup(self.delete_wrapper,
-                        self.security_groups_client.delete_security_group,
-                        secgroup['id'])
+        self.addCleanup(
+            self.delete_wrapper,
+            self.compute_security_groups_client.delete_security_group,
+            secgroup['id'])
 
         # Add rules to the security group
         self._create_loginable_secgroup_rule(secgroup['id'])
diff --git a/tempest/scenario/test_large_ops.py b/tempest/scenario/test_large_ops.py
index f45fb3a..b549ecb 100644
--- a/tempest/scenario/test_large_ops.py
+++ b/tempest/scenario/test_large_ops.py
@@ -85,11 +85,12 @@
         # Explicitly create secgroup to avoid cleanup at the end of testcases.
         # Since no traffic is tested, we don't need to actually add rules to
         # secgroup
-        secgroup = self.security_groups_client.create_security_group(
+        secgroup = self.compute_security_groups_client.create_security_group(
             name='secgroup-%s' % name,
             description='secgroup-desc-%s' % name)['security_group']
-        self.addCleanupClass(self.security_groups_client.delete_security_group,
-                             secgroup['id'])
+        self.addCleanupClass(
+            self.compute_security_groups_client.delete_security_group,
+            secgroup['id'])
         create_kwargs = {
             'min_count': CONF.scenario.large_ops_number,
             'security_groups': [{'name': secgroup['name']}]
diff --git a/tempest/scenario/test_minimum_basic.py b/tempest/scenario/test_minimum_basic.py
index 25e3e6f..585b19d 100644
--- a/tempest/scenario/test_minimum_basic.py
+++ b/tempest/scenario/test_minimum_basic.py
@@ -95,7 +95,7 @@
     def create_and_add_security_group_to_server(self, server):
         secgroup = self._create_security_group()
         self.servers_client.add_security_group(server['id'],
-                                               secgroup['name'])
+                                               name=secgroup['name'])
         self.addCleanup(self.servers_client.remove_security_group,
                         server['id'], secgroup['name'])
 
diff --git a/tempest/scenario/test_network_basic_ops.py b/tempest/scenario/test_network_basic_ops.py
index 41d13fe..20ccc59 100644
--- a/tempest/scenario/test_network_basic_ops.py
+++ b/tempest/scenario/test_network_basic_ops.py
@@ -726,7 +726,7 @@
         target_agent = list(hosting_agents if no_migration else
                             agent_list - hosting_agents)[0]
         schedule_router(target_agent,
-                        self.router['id'])
+                        router_id=self.router['id'])
         self.assertEqual(
             target_agent,
             list_hosts(self.router.id)['agents'][0]['id'],
diff --git a/tempest/services/baremetal/base.py b/tempest/services/baremetal/base.py
index 004c0de..d8cb99d 100644
--- a/tempest/services/baremetal/base.py
+++ b/tempest/services/baremetal/base.py
@@ -59,7 +59,7 @@
 
         :param resource_name: The name of the REST resource, e.g., 'nodes'.
         :param uuid: The unique identifier of an object in UUID format.
-        :return: Relative URI for the resource or object.
+        :returns: Relative URI for the resource or object.
 
         """
         prefix = self.uri_prefix if not permanent else ''
@@ -68,18 +68,18 @@
                                            res=resource_name,
                                            uuid='/%s' % uuid if uuid else '')
 
-    def _make_patch(self, allowed_attributes, **kw):
+    def _make_patch(self, allowed_attributes, **kwargs):
         """Create a JSON patch according to RFC 6902.
 
         :param allowed_attributes: An iterable object that contains a set of
             allowed attributes for an object.
-        :param **kw: Attributes and new values for them.
-        :return: A JSON path that sets values of the specified attributes to
+        :param **kwargs: Attributes and new values for them.
+        :returns: A JSON path that sets values of the specified attributes to
             the new ones.
 
         """
-        def get_change(kw, path='/'):
-            for name, value in six.iteritems(kw):
+        def get_change(kwargs, path='/'):
+            for name, value in six.iteritems(kwargs):
                 if isinstance(value, dict):
                     for ch in get_change(value, path + '%s/' % name):
                         yield ch
@@ -92,7 +92,7 @@
                                'value': value,
                                'op': 'replace'}
 
-        patch = [ch for ch in get_change(kw)
+        patch = [ch for ch in get_change(kwargs)
                  if ch['path'].lstrip('/') in allowed_attributes]
 
         return patch
@@ -101,8 +101,8 @@
         """Get the list of objects of the specified type.
 
         :param resource: The name of the REST resource, e.g., 'nodes'.
-        "param **kw: Parameters for the request.
-        :return: A tuple with the server response and deserialized JSON list
+        :param **kwargs: Parameters for the request.
+        :returns: A tuple with the server response and deserialized JSON list
                  of objects
 
         """
@@ -119,7 +119,7 @@
         """Gets a specific object of the specified type.
 
         :param uuid: Unique identifier of the object in UUID format.
-        :return: Serialized object as a dictionary.
+        :returns: Serialized object as a dictionary.
 
         """
         if 'uri' in kwargs:
@@ -137,7 +137,7 @@
         :param resource: The name of the REST resource, e.g., 'nodes'.
         :param object_dict: A Python dict that represents an object of the
                             specified type.
-        :return: A tuple with the server response and the deserialized created
+        :returns: A tuple with the server response and the deserialized created
                  object.
 
         """
@@ -154,7 +154,7 @@
 
         :param resource: The name of the REST resource, e.g., 'nodes'.
         :param uuid: The unique identifier of an object in UUID format.
-        :return: A tuple with the server response and the response body.
+        :returns: A tuple with the server response and the response body.
 
         """
         uri = self._get_uri(resource, uuid)
@@ -168,7 +168,7 @@
 
         :param resource: The name of the REST resource, e.g., 'nodes'.
         :param uuid: The unique identifier of an object in UUID format.
-        :return: A tuple with the server response and the serialized patched
+        :returns: A tuple with the server response and the serialized patched
                  object.
 
         """
@@ -190,7 +190,7 @@
         """Retrieves the desctription of the API.
 
         :param version: The version of the API. Default: 'v1'.
-        :return: Serialized description of API resources.
+        :returns: Serialized description of API resources.
 
         """
         return self._list_request(version, permanent=True)
diff --git a/tempest/services/botoclients.py b/tempest/services/botoclients.py
index e117719..9d452ff 100644
--- a/tempest/services/botoclients.py
+++ b/tempest/services/botoclients.py
@@ -101,8 +101,8 @@
                 break
         else:
             ec2_cred = (identity_client.create_user_ec2_credentials(
-                identity_client.user_id, identity_client.tenant_id)
-                ['credential'])
+                identity_client.user_id,
+                tenant_id=identity_client.tenant_id)['credential'])
         if not all((ec2_cred, ec2_cred['access'], ec2_cred['secret'])):
             raise lib_exc.NotFound("Unable to get access and secret keys")
         else:
diff --git a/tempest/services/compute/json/interfaces_client.py b/tempest/services/compute/json/interfaces_client.py
deleted file mode 100644
index fe076d8..0000000
--- a/tempest/services/compute/json/interfaces_client.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2013 IBM Corp.
-# 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 oslo_serialization import jsonutils as json
-
-from tempest.api_schema.response.compute.v2_1 import interfaces as schema
-from tempest.common import service_client
-
-
-class InterfacesClient(service_client.ServiceClient):
-
-    def list_interfaces(self, server_id):
-        resp, body = self.get('servers/%s/os-interface' % server_id)
-        body = json.loads(body)
-        self.validate_response(schema.list_interfaces, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def create_interface(self, server_id, **kwargs):
-        post_body = {'interfaceAttachment': kwargs}
-        post_body = json.dumps(post_body)
-        resp, body = self.post('servers/%s/os-interface' % server_id,
-                               body=post_body)
-        body = json.loads(body)
-        self.validate_response(schema.get_create_interfaces, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_interface(self, server_id, port_id):
-        resp, body = self.get('servers/%s/os-interface/%s' % (server_id,
-                                                              port_id))
-        body = json.loads(body)
-        self.validate_response(schema.get_create_interfaces, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_interface(self, server_id, port_id):
-        resp, body = self.delete('servers/%s/os-interface/%s' % (server_id,
-                                                                 port_id))
-        self.validate_response(schema.delete_interface, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/servers_client.py b/tempest/services/compute/json/servers_client.py
index a0251f1..80b3094 100644
--- a/tempest/services/compute/json/servers_client.py
+++ b/tempest/services/compute/json/servers_client.py
@@ -32,7 +32,10 @@
         self.enable_instance_password = enable_instance_password
 
     def create_server(self, **kwargs):
-        """Create server
+        """Create server.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#createServer
 
         Most parameters except the following are passed to the API without
         any changes.
@@ -69,7 +72,10 @@
         return service_client.ResponseBody(resp, body)
 
     def update_server(self, server_id, **kwargs):
-        """Update server
+        """Update server.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#updateServer
 
         Most parameters except the following are passed to the API without
         any changes.
@@ -85,20 +91,26 @@
         return service_client.ResponseBody(resp, body)
 
     def show_server(self, server_id):
-        """Get server details"""
+        """Get server details."""
         resp, body = self.get("servers/%s" % server_id)
         body = json.loads(body)
         self.validate_response(schema.get_server, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def delete_server(self, server_id):
-        """Delete server"""
+        """Delete server."""
         resp, body = self.delete("servers/%s" % server_id)
         self.validate_response(schema.delete_server, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def list_servers(self, detail=False, **params):
-        """List servers"""
+        """List servers.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#listServers
+                          and http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#listDetailServers
+        """
 
         url = 'servers'
         _schema = schema.list_servers
@@ -140,17 +152,21 @@
         self.validate_response(schema, resp, body)
         return service_client.ResponseBody(resp, body)
 
-    def create_backup(self, server_id, backup_type, rotation, name):
-        """Backup a server instance."""
-        return self.action(server_id, "createBackup",
-                           backup_type=backup_type,
-                           rotation=rotation,
-                           name=name)
+    def create_backup(self, server_id, **kwargs):
+        """Backup a server instance.
 
-    def change_password(self, server_id, adminPass):
-        """Changes the root password for the server."""
-        return self.action(server_id, 'changePassword',
-                           adminPass=adminPass)
+        Available params: see http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#createBackup
+        """
+        return self.action(server_id, "createBackup", **kwargs)
+
+    def change_password(self, server_id, **kwargs):
+        """Change the root password for the server.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#changePassword
+        """
+        return self.action(server_id, 'changePassword', **kwargs)
 
     def show_password(self, server_id):
         resp, body = self.get("servers/%s/os-server-password" %
@@ -205,7 +221,11 @@
         return self.action(server_id, 'resize', **kwargs)
 
     def confirm_resize_server(self, server_id, **kwargs):
-        """Confirms the flavor change for a server."""
+        """Confirm the flavor change for a server.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-compute-v2.1.html#confirmResize
+        """
         return self.action(server_id, 'confirmResize',
                            schema.server_actions_confirm_resize,
                            **kwargs)
@@ -301,9 +321,16 @@
         self.validate_response(schema.list_volume_attachments, resp, body)
         return service_client.ResponseBody(resp, body)
 
-    def add_security_group(self, server_id, name):
-        """Adds a security group to the server."""
-        return self.action(server_id, 'addSecurityGroup', name=name)
+    def add_security_group(self, server_id, **kwargs):
+        """Add a security group to the server.
+
+        Available params: TODO
+        """
+        # TODO(oomichi): The api-site doesn't contain this API description.
+        # So the above should be changed to the api-site link after
+        # adding the description on the api-site.
+        # LP: https://bugs.launchpad.net/openstack-api-site/+bug/1524199
+        return self.action(server_id, 'addSecurityGroup', **kwargs)
 
     def remove_security_group(self, server_id, name):
         """Removes a security group from the server."""
@@ -311,13 +338,7 @@
 
     def live_migrate_server(self, server_id, **kwargs):
         """This should be called with administrator privileges ."""
-
-        req_body = json.dumps({'os-migrateLive': kwargs})
-
-        resp, body = self.post("servers/%s/action" % server_id, req_body)
-        self.validate_response(schema.server_actions_common_schema,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
+        return self.action(server_id, 'os-migrateLive', **kwargs)
 
     def migrate_server(self, server_id, **kwargs):
         """Migrates a server to a new host."""
@@ -431,7 +452,11 @@
                            type=console_type)
 
     def add_fixed_ip(self, server_id, **kwargs):
-        """Add a fixed IP to input server instance."""
+        """Add a fixed IP to server instance.
+
+        Available params: http://developer.openstack.org/
+                          api-ref-compute-v2.1.html#addFixedIp
+        """
         return self.action(server_id, 'addFixedIp', **kwargs)
 
     def remove_fixed_ip(self, server_id, **kwargs):
diff --git a/tempest/services/compute/json/volumes_client.py b/tempest/services/compute/json/volumes_client.py
deleted file mode 100644
index 69d982e..0000000
--- a/tempest/services/compute/json/volumes_client.py
+++ /dev/null
@@ -1,78 +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 oslo_serialization import jsonutils as json
-from six.moves.urllib import parse as urllib
-from tempest_lib import exceptions as lib_exc
-
-from tempest.api_schema.response.compute.v2_1 import volumes as schema
-from tempest.common import service_client
-
-
-class VolumesClient(service_client.ServiceClient):
-
-    def list_volumes(self, detail=False, **params):
-        """List all the volumes created."""
-        url = 'os-volumes'
-
-        if detail:
-            url += '/detail'
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_volumes, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_volume(self, volume_id):
-        """Returns the details of a single volume."""
-        url = "os-volumes/%s" % volume_id
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.create_get_volume, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def create_volume(self, **kwargs):
-        """Creates a new Volume.
-
-        size(Required): Size of volume in GB.
-        Following optional keyword arguments are accepted:
-        display_name: Optional Volume Name.
-        metadata: A dictionary of values to be used as metadata.
-        """
-        post_body = json.dumps({'volume': kwargs})
-        resp, body = self.post('os-volumes', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.create_get_volume, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_volume(self, volume_id):
-        """Deletes the Specified Volume."""
-        resp, body = self.delete("os-volumes/%s" % volume_id)
-        self.validate_response(schema.delete_volume, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def is_resource_deleted(self, id):
-        try:
-            self.show_volume(id)
-        except lib_exc.NotFound:
-            return True
-        return False
-
-    @property
-    def resource_type(self):
-        """Returns the primary type of resource this client works with."""
-        return 'volume'
diff --git a/tempest/services/database/json/flavors_client.py b/tempest/services/database/json/flavors_client.py
index 88feb17..34a91ba 100644
--- a/tempest/services/database/json/flavors_client.py
+++ b/tempest/services/database/json/flavors_client.py
@@ -31,8 +31,8 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_db_flavor_details(self, db_flavor_id):
-        resp, body = self.get("flavors/%s" % str(db_flavor_id))
+    def show_db_flavor(self, db_flavor_id):
+        resp, body = self.get("flavors/%s" % db_flavor_id)
         self.expected_success(200, resp.status)
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/identity/v2/json/identity_client.py b/tempest/services/identity/v2/json/identity_client.py
index 3f6727d..3e7a598 100644
--- a/tempest/services/identity/v2/json/identity_client.py
+++ b/tempest/services/identity/v2/json/identity_client.py
@@ -307,8 +307,11 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def create_user_ec2_credentials(self, user_id, tenant_id):
-        post_body = json.dumps({'tenant_id': tenant_id})
+    def create_user_ec2_credentials(self, user_id, **kwargs):
+        # TODO(piyush): Current api-site doesn't contain this API description.
+        # After fixing the api-site, we need to fix here also for putting the
+        # link to api-site.
+        post_body = json.dumps(kwargs)
         resp, body = self.post('/users/%s/credentials/OS-EC2' % user_id,
                                post_body)
         self.expected_success(200, resp.status)
diff --git a/tempest/services/identity/v3/json/credentials_client.py b/tempest/services/identity/v3/json/credentials_client.py
index 7d4cf9a..753e960 100644
--- a/tempest/services/identity/v3/json/credentials_client.py
+++ b/tempest/services/identity/v3/json/credentials_client.py
@@ -51,7 +51,7 @@
         body['credential']['blob'] = json.loads(body['credential']['blob'])
         return service_client.ResponseBody(resp, body)
 
-    def get_credential(self, credential_id):
+    def show_credential(self, credential_id):
         """To GET Details of a credential."""
         resp, body = self.get('credentials/%s' % credential_id)
         self.expected_success(200, resp.status)
diff --git a/tempest/services/identity/v3/json/policy_client.py b/tempest/services/identity/v3/json/policy_client.py
index ecc9df7..7927ed5 100644
--- a/tempest/services/identity/v3/json/policy_client.py
+++ b/tempest/services/identity/v3/json/policy_client.py
@@ -44,7 +44,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_policy(self, policy_id):
+    def show_policy(self, policy_id):
         """Lists out the given policy."""
         url = 'policies/%s' % policy_id
         resp, body = self.get(url)
diff --git a/tempest/services/identity/v3/json/region_client.py b/tempest/services/identity/v3/json/region_client.py
index 6ccdc31..3595391 100644
--- a/tempest/services/identity/v3/json/region_client.py
+++ b/tempest/services/identity/v3/json/region_client.py
@@ -59,7 +59,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_region(self, region_id):
+    def show_region(self, region_id):
         """Get region."""
         url = 'regions/%s' % region_id
         resp, body = self.get(url)
diff --git a/tempest/services/image/v1/json/images_client.py b/tempest/services/image/v1/json/images_client.py
index 4884106..3406db8 100644
--- a/tempest/services/image/v1/json/images_client.py
+++ b/tempest/services/image/v1/json/images_client.py
@@ -265,11 +265,14 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def add_member(self, member_id, image_id, can_share=False):
+    def add_member(self, member_id, image_id, **kwargs):
+        """Add a member to an image.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-image-v1.html#addMember-v1
+        """
         url = 'v1/images/%s/members/%s' % (image_id, member_id)
-        body = None
-        if can_share:
-            body = json.dumps({'member': {'can_share': True}})
+        body = json.dumps({'member': kwargs})
         resp, __ = self.put(url, body)
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp)
diff --git a/tempest/services/image/v2/json/images_client.py b/tempest/services/image/v2/json/images_client.py
index 33bfcb8..44062ea 100644
--- a/tempest/services/image/v2/json/images_client.py
+++ b/tempest/services/image/v2/json/images_client.py
@@ -13,7 +13,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import jsonschema
 from oslo_serialization import jsonutils as json
 from six.moves.urllib import parse as urllib
 from tempest_lib import exceptions as lib_exc
@@ -49,14 +48,6 @@
                                       insecure=self.dscv,
                                       ca_certs=self.ca_certs)
 
-    def _validate_schema(self, body, type='image'):
-        if type in ['image', 'images']:
-            schema = self.show_schema(type)
-        else:
-            raise ValueError("%s is not a valid schema type" % type)
-
-        jsonschema.validate(body, schema)
-
     @property
     def http(self):
         if self._http is None:
@@ -65,8 +56,6 @@
 
     def update_image(self, image_id, patch):
         data = json.dumps(patch)
-        self._validate_schema(data)
-
         headers = {"Content-Type": "application/openstack-images-v2.0"
                                    "-json-patch"}
         resp, body = self.patch('v2/images/%s' % image_id, data, headers)
@@ -89,8 +78,6 @@
                 params[option] = value
 
         data = json.dumps(params)
-        self._validate_schema(data)
-
         resp, body = self.post('v2/images', data)
         self.expected_success(201, resp.status)
         body = json.loads(body)
@@ -123,7 +110,6 @@
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
         body = json.loads(body)
-        self._validate_schema(body, type='images')
         return service_client.ResponseBody(resp, body)
 
     def show_image(self, image_id):
@@ -178,7 +164,12 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def add_image_member(self, image_id, **kwargs):
+    def create_image_member(self, image_id, **kwargs):
+        """Create an image member.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-image-v2.html#createImageMember-v2
+        """
         url = 'v2/images/%s/members' % image_id
         data = json.dumps(kwargs)
         resp, body = self.post(url, data)
@@ -232,8 +223,6 @@
                               api-ref-image-v2.html#createNamespace-v2
         """
         data = json.dumps(kwargs)
-        self._validate_schema(data)
-
         resp, body = self.post('/v2/metadefs/namespaces', data)
         self.expected_success(201, resp.status)
         body = json.loads(body)
@@ -257,7 +246,6 @@
         params = {'namespace': namespace}
         params.update(kwargs)
         data = json.dumps(params)
-        self._validate_schema(data)
         url = '/v2/metadefs/namespaces/%s' % namespace
         resp, body = self.put(url, body=data)
         self.expected_success(200, resp.status)
diff --git a/tempest/services/network/json/metering_label_rules_client.py b/tempest/services/network/json/metering_label_rules_client.py
new file mode 100644
index 0000000..374a89c
--- /dev/null
+++ b/tempest/services/network/json/metering_label_rules_client.py
@@ -0,0 +1,33 @@
+#    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.services.network.json import base
+
+
+class MeteringLabelRulesClient(base.BaseNetworkClient):
+
+    def create_metering_label_rule(self, **kwargs):
+        uri = '/metering/metering-label-rules'
+        post_data = {'metering_label_rule': kwargs}
+        return self.create_resource(uri, post_data)
+
+    def show_metering_label_rule(self, metering_label_rule_id, **fields):
+        uri = '/metering/metering-label-rules/%s' % metering_label_rule_id
+        return self.show_resource(uri, **fields)
+
+    def delete_metering_label_rule(self, metering_label_rule_id):
+        uri = '/metering/metering-label-rules/%s' % metering_label_rule_id
+        return self.delete_resource(uri)
+
+    def list_metering_label_rules(self, **filters):
+        uri = '/metering/metering-label-rules'
+        return self.list_resources(uri, **filters)
diff --git a/tempest/services/network/json/network_client.py b/tempest/services/network/json/network_client.py
index b525143..08316be 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -35,23 +35,6 @@
     quotas
     """
 
-    def create_metering_label_rule(self, **kwargs):
-        uri = '/metering/metering-label-rules'
-        post_data = {'metering_label_rule': kwargs}
-        return self.create_resource(uri, post_data)
-
-    def show_metering_label_rule(self, metering_label_rule_id, **fields):
-        uri = '/metering/metering-label-rules/%s' % metering_label_rule_id
-        return self.show_resource(uri, **fields)
-
-    def delete_metering_label_rule(self, metering_label_rule_id):
-        uri = '/metering/metering-label-rules/%s' % metering_label_rule_id
-        return self.delete_resource(uri)
-
-    def list_metering_label_rules(self, **filters):
-        uri = '/metering/metering-label-rules'
-        return self.list_resources(uri, **filters)
-
     def create_security_group(self, **kwargs):
         uri = '/security-groups'
         post_data = {'security_group': kwargs}
@@ -300,10 +283,12 @@
         uri = '/routers/%s/l3-agents' % router_id
         return self.list_resources(uri)
 
-    def add_router_to_l3_agent(self, agent_id, router_id):
+    def add_router_to_l3_agent(self, agent_id, **kwargs):
+        # TODO(piyush): Current api-site doesn't contain this API description.
+        # After fixing the api-site, we need to fix here also for putting the
+        # link to api-site.
         uri = '/agents/%s/l3-routers' % agent_id
-        post_body = {"router_id": router_id}
-        return self.create_resource(uri, post_body)
+        return self.create_resource(uri, kwargs)
 
     def remove_router_from_l3_agent(self, agent_id, router_id):
         uri = '/agents/%s/l3-routers/%s' % (agent_id, router_id)
diff --git a/tempest/services/volume/base/admin/base_volume_hosts_client.py b/tempest/services/volume/base/admin/base_hosts_client.py
similarity index 95%
rename from tempest/services/volume/base/admin/base_volume_hosts_client.py
rename to tempest/services/volume/base/admin/base_hosts_client.py
index 97bb007..074f87f 100644
--- a/tempest/services/volume/base/admin/base_volume_hosts_client.py
+++ b/tempest/services/volume/base/admin/base_hosts_client.py
@@ -19,7 +19,7 @@
 from tempest.common import service_client
 
 
-class BaseVolumeHostsClient(service_client.ServiceClient):
+class BaseHostsClient(service_client.ServiceClient):
     """Client class to send CRUD Volume Hosts API requests"""
 
     def list_hosts(self, **params):
diff --git a/tempest/services/volume/base/admin/base_volume_quotas_client.py b/tempest/services/volume/base/admin/base_quotas_client.py
similarity index 97%
rename from tempest/services/volume/base/admin/base_volume_quotas_client.py
rename to tempest/services/volume/base/admin/base_quotas_client.py
index ad8ba03..e063a31 100644
--- a/tempest/services/volume/base/admin/base_volume_quotas_client.py
+++ b/tempest/services/volume/base/admin/base_quotas_client.py
@@ -18,7 +18,7 @@
 from tempest.common import service_client
 
 
-class BaseVolumeQuotasClient(service_client.ServiceClient):
+class BaseQuotasClient(service_client.ServiceClient):
     """Client class to send CRUD Volume Quotas API requests"""
 
     TYPE = "json"
diff --git a/tempest/services/volume/base/admin/base_volume_services_client.py b/tempest/services/volume/base/admin/base_services_client.py
similarity index 90%
rename from tempest/services/volume/base/admin/base_volume_services_client.py
rename to tempest/services/volume/base/admin/base_services_client.py
index 1790421..3626469 100644
--- a/tempest/services/volume/base/admin/base_volume_services_client.py
+++ b/tempest/services/volume/base/admin/base_services_client.py
@@ -19,9 +19,9 @@
 from tempest.common import service_client
 
 
-class BaseVolumesServicesClient(service_client.ServiceClient):
+class BaseServicesClient(service_client.ServiceClient):
 
-    def list_services(self, params=None):
+    def list_services(self, **params):
         url = 'os-services'
         if params:
             url += '?%s' % urllib.urlencode(params)
diff --git a/tempest/services/volume/base/admin/base_volume_types_client.py b/tempest/services/volume/base/admin/base_types_client.py
similarity index 99%
rename from tempest/services/volume/base/admin/base_volume_types_client.py
rename to tempest/services/volume/base/admin/base_types_client.py
index 8fcf57c..de6ea8a 100644
--- a/tempest/services/volume/base/admin/base_volume_types_client.py
+++ b/tempest/services/volume/base/admin/base_types_client.py
@@ -20,7 +20,7 @@
 from tempest.common import service_client
 
 
-class BaseVolumeTypesClient(service_client.ServiceClient):
+class BaseTypesClient(service_client.ServiceClient):
     """Client class to send CRUD Volume Types API requests"""
 
     def is_resource_deleted(self, resource):
diff --git a/tempest/services/volume/base/base_availability_zone_client.py b/tempest/services/volume/base/base_availability_zone_client.py
index d5a2fda..b63fdc2 100644
--- a/tempest/services/volume/base/base_availability_zone_client.py
+++ b/tempest/services/volume/base/base_availability_zone_client.py
@@ -18,7 +18,7 @@
 from tempest.common import service_client
 
 
-class BaseVolumeAvailabilityZoneClient(service_client.ServiceClient):
+class BaseAvailabilityZoneClient(service_client.ServiceClient):
 
     def list_availability_zones(self):
         resp, body = self.get('os-availability-zone')
diff --git a/tempest/services/volume/base/base_backups_client.py b/tempest/services/volume/base/base_backups_client.py
index be926e6..fc9a40a 100644
--- a/tempest/services/volume/base/base_backups_client.py
+++ b/tempest/services/volume/base/base_backups_client.py
@@ -25,26 +25,17 @@
 class BaseBackupsClient(service_client.ServiceClient):
     """Client class to send CRUD Volume backup API requests"""
 
-    def create_backup(self, volume_id, container=None, name=None,
-                      description=None):
+    def create_backup(self, **kwargs):
         """Creates a backup of volume."""
-        post_body = {'volume_id': volume_id}
-        if container:
-            post_body['container'] = container
-        if name:
-            post_body['name'] = name
-        if description:
-            post_body['description'] = description
-        post_body = json.dumps({'backup': post_body})
+        post_body = json.dumps({'backup': kwargs})
         resp, body = self.post('backups', post_body)
         body = json.loads(body)
         self.expected_success(202, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def restore_backup(self, backup_id, volume_id=None):
+    def restore_backup(self, backup_id, **kwargs):
         """Restore volume from backup."""
-        post_body = {'volume_id': volume_id}
-        post_body = json.dumps({'restore': post_body})
+        post_body = json.dumps({'restore': kwargs})
         resp, body = self.post('backups/%s/restore' % (backup_id), post_body)
         body = json.loads(body)
         self.expected_success(202, resp.status)
@@ -82,11 +73,9 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def import_backup(self, backup_service, backup_url):
+    def import_backup(self, **kwargs):
         """Import backup metadata record."""
-        post_body = {'backup_service': backup_service,
-                     'backup_url': backup_url}
-        post_body = json.dumps({'backup-record': post_body})
+        post_body = json.dumps({'backup-record': kwargs})
         resp, body = self.post("backups/import_record", post_body)
         body = json.loads(body)
         self.expected_success(201, resp.status)
diff --git a/tempest/services/volume/v1/json/admin/volume_hosts_client.py b/tempest/services/volume/v1/json/admin/hosts_client.py
similarity index 82%
rename from tempest/services/volume/v1/json/admin/volume_hosts_client.py
rename to tempest/services/volume/v1/json/admin/hosts_client.py
index e564469..3b52968 100644
--- a/tempest/services/volume/v1/json/admin/volume_hosts_client.py
+++ b/tempest/services/volume/v1/json/admin/hosts_client.py
@@ -13,8 +13,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_hosts_client
+from tempest.services.volume.base.admin import base_hosts_client
 
 
-class VolumeHostsClient(base_volume_hosts_client.BaseVolumeHostsClient):
+class HostsClient(base_hosts_client.BaseHostsClient):
     """Client class to send CRUD Volume Host API V1 requests"""
diff --git a/tempest/services/volume/v1/json/admin/volume_quotas_client.py b/tempest/services/volume/v1/json/admin/quotas_client.py
similarity index 82%
rename from tempest/services/volume/v1/json/admin/volume_quotas_client.py
rename to tempest/services/volume/v1/json/admin/quotas_client.py
index b0dde19..27fc301 100644
--- a/tempest/services/volume/v1/json/admin/volume_quotas_client.py
+++ b/tempest/services/volume/v1/json/admin/quotas_client.py
@@ -12,8 +12,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_quotas_client
+from tempest.services.volume.base.admin import base_quotas_client
 
 
-class VolumeQuotasClient(base_volume_quotas_client.BaseVolumeQuotasClient):
+class QuotasClient(base_quotas_client.BaseQuotasClient):
     """Client class to send CRUD Volume Type API V1 requests"""
diff --git a/tempest/services/volume/v1/json/admin/volume_services_client.py b/tempest/services/volume/v1/json/admin/services_client.py
similarity index 80%
rename from tempest/services/volume/v1/json/admin/volume_services_client.py
rename to tempest/services/volume/v1/json/admin/services_client.py
index 00810ed..2bffd55 100644
--- a/tempest/services/volume/v1/json/admin/volume_services_client.py
+++ b/tempest/services/volume/v1/json/admin/services_client.py
@@ -13,9 +13,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_services_client
+from tempest.services.volume.base.admin import base_services_client
 
 
-class VolumesServicesClient(
-        base_volume_services_client.BaseVolumesServicesClient):
+class ServicesClient(base_services_client.BaseServicesClient):
     """Volume V1 volume services client"""
diff --git a/tempest/services/volume/v1/json/admin/volume_types_client.py b/tempest/services/volume/v1/json/admin/types_client.py
similarity index 82%
rename from tempest/services/volume/v1/json/admin/volume_types_client.py
rename to tempest/services/volume/v1/json/admin/types_client.py
index 28524d1..0e84296 100644
--- a/tempest/services/volume/v1/json/admin/volume_types_client.py
+++ b/tempest/services/volume/v1/json/admin/types_client.py
@@ -13,8 +13,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_types_client
+from tempest.services.volume.base.admin import base_types_client
 
 
-class VolumeTypesClient(base_volume_types_client.BaseVolumeTypesClient):
+class TypesClient(base_types_client.BaseTypesClient):
     """Volume V1 Volume Types client"""
diff --git a/tempest/services/volume/v1/json/availability_zone_client.py b/tempest/services/volume/v1/json/availability_zone_client.py
index d8180fa..3a27027 100644
--- a/tempest/services/volume/v1/json/availability_zone_client.py
+++ b/tempest/services/volume/v1/json/availability_zone_client.py
@@ -16,6 +16,6 @@
 from tempest.services.volume.base import base_availability_zone_client
 
 
-class VolumeAvailabilityZoneClient(
-        base_availability_zone_client.BaseVolumeAvailabilityZoneClient):
+class AvailabilityZoneClient(
+        base_availability_zone_client.BaseAvailabilityZoneClient):
     """Volume V1 availability zone client."""
diff --git a/tempest/services/volume/v2/json/admin/volume_hosts_client.py b/tempest/services/volume/v2/json/admin/hosts_client.py
similarity index 83%
rename from tempest/services/volume/v2/json/admin/volume_hosts_client.py
rename to tempest/services/volume/v2/json/admin/hosts_client.py
index a1d8b61..e092c6a 100644
--- a/tempest/services/volume/v2/json/admin/volume_hosts_client.py
+++ b/tempest/services/volume/v2/json/admin/hosts_client.py
@@ -13,9 +13,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_hosts_client
+from tempest.services.volume.base.admin import base_hosts_client
 
 
-class VolumeHostsV2Client(base_volume_hosts_client.BaseVolumeHostsClient):
+class HostsClient(base_hosts_client.BaseHostsClient):
     """Client class to send CRUD Volume V2 API requests"""
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/admin/volume_hosts_client.py b/tempest/services/volume/v2/json/admin/quotas_client.py
similarity index 82%
copy from tempest/services/volume/v2/json/admin/volume_hosts_client.py
copy to tempest/services/volume/v2/json/admin/quotas_client.py
index a1d8b61..11e0e22 100644
--- a/tempest/services/volume/v2/json/admin/volume_hosts_client.py
+++ b/tempest/services/volume/v2/json/admin/quotas_client.py
@@ -13,9 +13,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_hosts_client
+from tempest.services.volume.base.admin import base_quotas_client
 
 
-class VolumeHostsV2Client(base_volume_hosts_client.BaseVolumeHostsClient):
+class QuotasClient(base_quotas_client.BaseQuotasClient):
     """Client class to send CRUD Volume V2 API requests"""
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/admin/volume_hosts_client.py b/tempest/services/volume/v2/json/admin/services_client.py
similarity index 82%
copy from tempest/services/volume/v2/json/admin/volume_hosts_client.py
copy to tempest/services/volume/v2/json/admin/services_client.py
index a1d8b61..db19ba9 100644
--- a/tempest/services/volume/v2/json/admin/volume_hosts_client.py
+++ b/tempest/services/volume/v2/json/admin/services_client.py
@@ -13,9 +13,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_hosts_client
+from tempest.services.volume.base.admin import base_services_client
 
 
-class VolumeHostsV2Client(base_volume_hosts_client.BaseVolumeHostsClient):
+class ServicesClient(base_services_client.BaseServicesClient):
     """Client class to send CRUD Volume V2 API requests"""
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/admin/volume_types_client.py b/tempest/services/volume/v2/json/admin/types_client.py
similarity index 83%
rename from tempest/services/volume/v2/json/admin/volume_types_client.py
rename to tempest/services/volume/v2/json/admin/types_client.py
index d63acf5..ecf5131 100644
--- a/tempest/services/volume/v2/json/admin/volume_types_client.py
+++ b/tempest/services/volume/v2/json/admin/types_client.py
@@ -13,9 +13,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest.services.volume.base.admin import base_volume_types_client
+from tempest.services.volume.base.admin import base_types_client
 
 
-class VolumeTypesV2Client(base_volume_types_client.BaseVolumeTypesClient):
+class TypesClient(base_types_client.BaseTypesClient):
     """Client class to send CRUD Volume V2 API requests"""
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/admin/volume_quotas_client.py b/tempest/services/volume/v2/json/admin/volume_quotas_client.py
deleted file mode 100644
index a89ba2f..0000000
--- a/tempest/services/volume/v2/json/admin/volume_quotas_client.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2014 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.services.volume.base.admin import base_volume_quotas_client
-
-
-class VolumeQuotasV2Client(base_volume_quotas_client.BaseVolumeQuotasClient):
-    """Client class to send CRUD Volume V2 API requests"""
-    api_version = "v2"
diff --git a/tempest/services/volume/v2/json/admin/volume_services_client.py b/tempest/services/volume/v2/json/admin/volume_services_client.py
deleted file mode 100644
index da7a4ea..0000000
--- a/tempest/services/volume/v2/json/admin/volume_services_client.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2014 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.services.volume.base.admin import base_volume_services_client
-
-
-class VolumesServicesV2Client(
-        base_volume_services_client.BaseVolumesServicesClient):
-    """Client class to send CRUD Volume V2 API requests"""
-    api_version = "v2"
diff --git a/tempest/services/volume/v2/json/availability_zone_client.py b/tempest/services/volume/v2/json/availability_zone_client.py
index a4fc9fe..905ebdc 100644
--- a/tempest/services/volume/v2/json/availability_zone_client.py
+++ b/tempest/services/volume/v2/json/availability_zone_client.py
@@ -16,6 +16,6 @@
 from tempest.services.volume.base import base_availability_zone_client
 
 
-class VolumeV2AvailabilityZoneClient(
-        base_availability_zone_client.BaseVolumeAvailabilityZoneClient):
+class AvailabilityZoneClient(
+        base_availability_zone_client.BaseAvailabilityZoneClient):
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/backups_client.py b/tempest/services/volume/v2/json/backups_client.py
index 15d363b..78bab82 100644
--- a/tempest/services/volume/v2/json/backups_client.py
+++ b/tempest/services/volume/v2/json/backups_client.py
@@ -16,6 +16,6 @@
 from tempest.services.volume.base import base_backups_client
 
 
-class BackupsClientV2(base_backups_client.BaseBackupsClient):
+class BackupsClient(base_backups_client.BaseBackupsClient):
     """Client class to send CRUD Volume V2 API requests"""
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/extensions_client.py b/tempest/services/volume/v2/json/extensions_client.py
index 004b232..245906f 100644
--- a/tempest/services/volume/v2/json/extensions_client.py
+++ b/tempest/services/volume/v2/json/extensions_client.py
@@ -16,5 +16,5 @@
 from tempest.services.volume.base import base_extensions_client
 
 
-class ExtensionsV2Client(base_extensions_client.BaseExtensionsClient):
+class ExtensionsClient(base_extensions_client.BaseExtensionsClient):
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/qos_client.py b/tempest/services/volume/v2/json/qos_client.py
index e8b680a..3c0f74f 100644
--- a/tempest/services/volume/v2/json/qos_client.py
+++ b/tempest/services/volume/v2/json/qos_client.py
@@ -15,5 +15,5 @@
 from tempest.services.volume.base import base_qos_client
 
 
-class QosSpecsV2Client(base_qos_client.BaseQosSpecsClient):
+class QosSpecsClient(base_qos_client.BaseQosSpecsClient):
     api_version = "v2"
diff --git a/tempest/services/volume/v2/json/snapshots_client.py b/tempest/services/volume/v2/json/snapshots_client.py
index 28a9e98..a2d415f 100644
--- a/tempest/services/volume/v2/json/snapshots_client.py
+++ b/tempest/services/volume/v2/json/snapshots_client.py
@@ -13,7 +13,7 @@
 from tempest.services.volume.base import base_snapshots_client
 
 
-class SnapshotsV2Client(base_snapshots_client.BaseSnapshotsClient):
+class SnapshotsClient(base_snapshots_client.BaseSnapshotsClient):
     """Client class to send CRUD Volume V2 API requests."""
     api_version = "v2"
     create_resp = 202
diff --git a/tempest/services/volume/v2/json/volumes_client.py b/tempest/services/volume/v2/json/volumes_client.py
index 51daa94..b7d9dfb 100644
--- a/tempest/services/volume/v2/json/volumes_client.py
+++ b/tempest/services/volume/v2/json/volumes_client.py
@@ -16,7 +16,7 @@
 from tempest.services.volume.base import base_volumes_client
 
 
-class VolumesV2Client(base_volumes_client.BaseVolumesClient):
+class VolumesClient(base_volumes_client.BaseVolumesClient):
     """Client class to send CRUD Volume V2 API requests"""
     api_version = "v2"
     create_resp = 202
diff --git a/tempest/stress/actions/ssh_floating.py b/tempest/stress/actions/ssh_floating.py
index 6bac570..4f8c6bd 100644
--- a/tempest/stress/actions/ssh_floating.py
+++ b/tempest/stress/actions/ssh_floating.py
@@ -91,7 +91,7 @@
         self.logger.info("deleted %s" % self.server_id)
 
     def _create_sec_group(self):
-        sec_grp_cli = self.manager.security_groups_client
+        sec_grp_cli = self.manager.compute_security_groups_client
         s_name = data_utils.rand_name('sec_grp')
         s_description = data_utils.rand_name('desc')
         self.sec_grp = sec_grp_cli.create_security_group(
@@ -103,7 +103,7 @@
                     from_port=-1, to_port=-1)
 
     def _destroy_sec_grp(self):
-        sec_grp_cli = self.manager.security_groups_client
+        sec_grp_cli = self.manager.compute_security_groups_client
         sec_grp_cli.delete_security_group(self.sec_grp['id'])
 
     def _create_floating_ip(self):
diff --git a/tempest/stress/actions/volume_attach_verify.py b/tempest/stress/actions/volume_attach_verify.py
index fa0bb8b..2a23291 100644
--- a/tempest/stress/actions/volume_attach_verify.py
+++ b/tempest/stress/actions/volume_attach_verify.py
@@ -54,7 +54,7 @@
         self.logger.info("deleted server: %s" % self.server_id)
 
     def _create_sec_group(self):
-        sec_grp_cli = self.manager.security_groups_client
+        sec_grp_cli = self.manager.compute_security_groups_client
         s_name = data_utils.rand_name('sec_grp')
         s_description = data_utils.rand_name('desc')
         self.sec_grp = sec_grp_cli.create_security_group(
@@ -66,7 +66,7 @@
                     from_port=-1, to_port=-1)
 
     def _destroy_sec_grp(self):
-        sec_grp_cli = self.manager.security_groups_client
+        sec_grp_cli = self.manager.compute_security_groups_client
         sec_grp_cli.delete_security_group(self.sec_grp['id'])
 
     def _create_floating_ip(self):
diff --git a/tempest/stress/cleanup.py b/tempest/stress/cleanup.py
index 993359d..d252b84 100644
--- a/tempest/stress/cleanup.py
+++ b/tempest/stress/cleanup.py
@@ -48,7 +48,7 @@
         except Exception:
             pass
 
-    secgrp_client = admin_manager.security_groups_client
+    secgrp_client = admin_manager.compute_security_groups_client
     secgrp = (secgrp_client.list_security_groups(all_tenants=True)
               ['security_groups'])
     secgrp_del = [grp for grp in secgrp if grp['name'] != 'default']
diff --git a/tempest/tests/common/test_service_clients.py b/tempest/tests/common/test_service_clients.py
index 8de014f..c313071 100644
--- a/tempest/tests/common/test_service_clients.py
+++ b/tempest/tests/common/test_service_clients.py
@@ -18,12 +18,9 @@
 
 from tempest.services.baremetal.v1.json import baremetal_client
 from tempest.services.compute.json import floating_ips_client
-from tempest.services.compute.json import interfaces_client
 from tempest.services.compute.json import security_group_rules_client
 from tempest.services.compute.json import server_groups_client
 from tempest.services.compute.json import servers_client
-from tempest.services.compute.json import volumes_client \
-    as compute_volumes_client
 from tempest.services.data_processing.v1_1 import data_processing_client
 from tempest.services.database.json import flavors_client as db_flavor_client
 from tempest.services.database.json import versions_client as db_version_client
@@ -46,10 +43,14 @@
 from tempest.services.orchestration.json import orchestration_client
 from tempest.services.telemetry.json import alarming_client
 from tempest.services.telemetry.json import telemetry_client
-from tempest.services.volume.v1.json.admin import volume_hosts_client
-from tempest.services.volume.v1.json.admin import volume_quotas_client
-from tempest.services.volume.v1.json.admin import volume_services_client
-from tempest.services.volume.v1.json.admin import volume_types_client
+from tempest.services.volume.v1.json.admin import hosts_client \
+    as volume_hosts_client
+from tempest.services.volume.v1.json.admin import quotas_client \
+    as volume_quotas_client
+from tempest.services.volume.v1.json.admin import services_client \
+    as volume_services_client
+from tempest.services.volume.v1.json.admin import types_client \
+    as volume_types_client
 from tempest.services.volume.v1.json import availability_zone_client \
     as volume_az_client
 from tempest.services.volume.v1.json import backups_client
@@ -58,13 +59,13 @@
 from tempest.services.volume.v1.json import qos_client
 from tempest.services.volume.v1.json import snapshots_client
 from tempest.services.volume.v1.json import volumes_client
-from tempest.services.volume.v2.json.admin import volume_hosts_client \
+from tempest.services.volume.v2.json.admin import hosts_client \
     as volume_v2_hosts_client
-from tempest.services.volume.v2.json.admin import volume_quotas_client \
+from tempest.services.volume.v2.json.admin import quotas_client \
     as volume_v2_quotas_client
-from tempest.services.volume.v2.json.admin import volume_services_client \
+from tempest.services.volume.v2.json.admin import services_client \
     as volume_v2_services_client
-from tempest.services.volume.v2.json.admin import volume_types_client \
+from tempest.services.volume.v2.json.admin import types_client \
     as volume_v2_types_client
 from tempest.services.volume.v2.json import availability_zone_client \
     as volume_v2_az_client
@@ -87,11 +88,9 @@
         test_clients = [
             baremetal_client.BaremetalClient,
             floating_ips_client.FloatingIPsClient,
-            interfaces_client.InterfacesClient,
             security_group_rules_client.SecurityGroupRulesClient,
             server_groups_client.ServerGroupsClient,
             servers_client.ServersClient,
-            compute_volumes_client.VolumesClient,
             data_processing_client.DataProcessingClient,
             db_flavor_client.DatabaseFlavorsClient,
             db_version_client.DatabaseVersionsClient,
@@ -104,25 +103,25 @@
             telemetry_client.TelemetryClient,
             alarming_client.AlarmingClient,
             qos_client.QosSpecsClient,
-            volume_hosts_client.VolumeHostsClient,
-            volume_quotas_client.VolumeQuotasClient,
-            volume_services_client.VolumesServicesClient,
-            volume_types_client.VolumeTypesClient,
-            volume_az_client.VolumeAvailabilityZoneClient,
+            volume_hosts_client.HostsClient,
+            volume_quotas_client.QuotasClient,
+            volume_services_client.ServicesClient,
+            volume_types_client.TypesClient,
+            volume_az_client.AvailabilityZoneClient,
             backups_client.BackupsClient,
             volume_extensions_client.ExtensionsClient,
             snapshots_client.SnapshotsClient,
             volumes_client.VolumesClient,
-            volume_v2_hosts_client.VolumeHostsV2Client,
-            volume_v2_quotas_client.VolumeQuotasV2Client,
-            volume_v2_services_client.VolumesServicesV2Client,
-            volume_v2_types_client.VolumeTypesV2Client,
-            volume_v2_az_client.VolumeV2AvailabilityZoneClient,
-            volume_v2_backups_client.BackupsClientV2,
-            volume_v2_extensions_client.ExtensionsV2Client,
-            volume_v2_qos_client.QosSpecsV2Client,
-            volume_v2_snapshots_client.SnapshotsV2Client,
-            volume_v2_volumes_client.VolumesV2Client,
+            volume_v2_hosts_client.HostsClient,
+            volume_v2_quotas_client.QuotasClient,
+            volume_v2_services_client.ServicesClient,
+            volume_v2_types_client.TypesClient,
+            volume_v2_az_client.AvailabilityZoneClient,
+            volume_v2_backups_client.BackupsClient,
+            volume_v2_extensions_client.ExtensionsClient,
+            volume_v2_qos_client.QosSpecsClient,
+            volume_v2_snapshots_client.SnapshotsClient,
+            volume_v2_volumes_client.VolumesClient,
             identity_v2_identity_client.IdentityClient,
             credentials_client.CredentialsClient,
             endpoints_client.EndPointClient,
diff --git a/tempest/tests/services/compute/test_interfaces_client.py b/tempest/tests/services/compute/test_interfaces_client.py
deleted file mode 100644
index 235585a..0000000
--- a/tempest/tests/services/compute/test_interfaces_client.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 2015 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.services.compute.json import interfaces_client
-from tempest.tests import fake_auth_provider
-from tempest.tests.services.compute import base
-
-
-class TestInterfacesClient(base.BaseComputeServiceTest):
-    # Data Values to be used for testing #
-    FAKE_INTERFACE_DATA = {
-        "fixed_ips": [{
-            "ip_address": "192.168.1.1",
-            "subnet_id": "f8a6e8f8-c2ec-497c-9f23-da9616de54ef"
-            }],
-        "mac_addr": "fa:16:3e:4c:2c:30",
-        "net_id": "3cb9bc59-5699-4588-a4b1-b87f96708bc6",
-        "port_id": "ce531f90-199f-48c0-816c-13e38010b442",
-        "port_state": "ACTIVE"}
-
-    FAKE_SHOW_DATA = {
-        "interfaceAttachment": FAKE_INTERFACE_DATA}
-    FAKE_LIST_DATA = {
-        "interfaceAttachments": [FAKE_INTERFACE_DATA]}
-
-    FAKE_SERVER_ID = "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5"
-    FAKE_PORT_ID = FAKE_SHOW_DATA['interfaceAttachment']['port_id']
-    func2mock = {
-        'delete': 'tempest.common.service_client.ServiceClient.delete',
-        'get': 'tempest.common.service_client.ServiceClient.get',
-        'post': 'tempest.common.service_client.ServiceClient.post'}
-
-    def setUp(self):
-        super(TestInterfacesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = interfaces_client.InterfacesClient(fake_auth,
-                                                         "compute",
-                                                         "regionOne")
-
-    def _test_interface_operation(self, operation="create", bytes_body=False):
-        response_code = 200
-        expected_op = self.FAKE_SHOW_DATA
-        mock_operation = self.func2mock['get']
-        params = {'server_id': self.FAKE_SERVER_ID,
-                  'port_id': self.FAKE_PORT_ID}
-        if operation == 'list':
-            expected_op = self.FAKE_LIST_DATA
-            function = self.client.list_interfaces
-            params = {'server_id': self.FAKE_SERVER_ID}
-        elif operation == 'show':
-            function = self.client.show_interface
-        elif operation == 'delete':
-            expected_op = {}
-            mock_operation = self.func2mock['delete']
-            function = self.client.delete_interface
-            response_code = 202
-        else:
-            function = self.client.create_interface
-            mock_operation = self.func2mock['post']
-
-        self.check_service_client_function(
-            function, mock_operation, expected_op,
-            bytes_body, response_code, **params)
-
-    def test_list_interfaces_with_str_body(self):
-        self._test_interface_operation('list')
-
-    def test_list_interfaces_with_bytes_body(self):
-        self._test_interface_operation('list', True)
-
-    def test_show_interface_with_str_body(self):
-        self._test_interface_operation('show')
-
-    def test_show_interface_with_bytes_body(self):
-        self._test_interface_operation('show', True)
-
-    def test_delete_interface_with_str_body(self):
-        self._test_interface_operation('delete')
-
-    def test_delete_interface_with_bytes_body(self):
-        self._test_interface_operation('delete', True)
-
-    def test_create_interface_with_str_body(self):
-        self._test_interface_operation()
-
-    def test_create_interface_with_bytes_body(self):
-        self._test_interface_operation(bytes_body=True)
diff --git a/tempest/tests/services/compute/test_servers_client.py b/tempest/tests/services/compute/test_servers_client.py
index e347cf1..95b81c1 100644
--- a/tempest/tests/services/compute/test_servers_client.py
+++ b/tempest/tests/services/compute/test_servers_client.py
@@ -12,6 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import copy
 from tempest.services.compute.json import servers_client
 from tempest.tests import fake_auth_provider
 from tempest.tests.services.compute import base
@@ -34,6 +35,24 @@
         "name": u"new\u1234-server-test"}]
     }
 
+    FAKE_SERVER_DIAGNOSTICS = {
+        "cpu0_time": 17300000000,
+        "memory": 524288,
+        "vda_errors": -1,
+        "vda_read": 262144,
+        "vda_read_req": 112,
+        "vda_write": 5778432,
+        "vda_write_req": 488,
+        "vnet1_rx": 2070139,
+        "vnet1_rx_drop": 0,
+        "vnet1_rx_errors": 0,
+        "vnet1_rx_packets": 26701,
+        "vnet1_tx": 140208,
+        "vnet1_tx_drop": 0,
+        "vnet1_tx_errors": 0,
+        "vnet1_tx_packets": 662
+    }
+
     FAKE_SERVER_GET = {'server': {
         "accessIPv4": "",
         "accessIPv6": "",
@@ -116,6 +135,48 @@
         ]}
     }
 
+    FAKE_COMMON_VOLUME = {
+        "id": "a6b0875b-6b5d-4a5a-81eb-0c3aa62e5fdb",
+        "device": "fake-device",
+        "volumeId": "a6b0875b-46ca-475e-917e-0c3aa62e5fdb",
+        "serverId": "616fb98f-46ca-475e-917e-2563e5a8cd19"
+    }
+
+    FAKE_VIRTUAL_INTERFACES = {
+        "id": "a6b0875b-46ca-475e-917e-0c3aa62e5fdb",
+        "mac_address": "00:25:90:5b:f8:c3",
+        "OS-EXT-VIF-NET:net_id": "fake-os-net-id"
+    }
+
+    FAKE_INSTANCE_ACTIONS = {
+        "action": "fake-action",
+        "request_id": "16fb98f-46ca-475e-917e-2563e5a8cd19",
+        "user_id": "16fb98f-46ca-475e-917e-2563e5a8cd12",
+        "project_id": "16fb98f-46ca-475e-917e-2563e5a8cd34",
+        "start_time": "09MAR2015 11:15",
+        "message": "fake-msg",
+        "instance_uuid": "16fb98f-46ca-475e-917e-2563e5a8cd12"
+    }
+
+    FAKE_VNC_CONSOLE = {
+        "type": "fake-type",
+        "url": "http://os.co/v2/616fb98f-46ca-475e-917e-2563e5a8cd19"
+    }
+
+    FAKE_INSTANCE_ACTION_EVENTS = {
+        "event": "fake-event",
+        "start_time": "09MAR2015 11:15",
+        "finish_time": "09MAR2015 11:15",
+        "result": "fake-result",
+        "traceback": "fake-trace-back"
+    }
+
+    FAKE_INSTANCE_WITH_EVENTS = copy.deepcopy(FAKE_INSTANCE_ACTIONS)
+    FAKE_INSTANCE_WITH_EVENTS['events'] = [FAKE_INSTANCE_ACTION_EVENTS]
+
+    FAKE_REBUILD_SERVER = copy.deepcopy(FAKE_SERVER_GET)
+    FAKE_REBUILD_SERVER['server']['adminPass'] = 'fake-admin-pass'
+
     server_id = FAKE_SERVER_GET['server']['id']
     network_id = 'a6b0875b-6b5d-4a5a-81eb-0c3aa62e5fdb'
 
@@ -206,7 +267,733 @@
             self.client.list_addresses_by_network,
             'tempest.common.service_client.ServiceClient.get',
             self.FAKE_ADDRESS['addresses'],
-            bytes_body,
             server_id=self.server_id,
             network_id=self.network_id
             )
+
+    def test_action_with_str_body(self):
+        self._test_action()
+
+    def test_action_with_bytes_body(self):
+        self._test_action(True)
+
+    def _test_action(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.action,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            server_id=self.server_id,
+            action_name='fake-action-name',
+            schema={'status_code': 200}
+            )
+
+    def test_create_backup_with_str_body(self):
+        self._test_create_backup()
+
+    def test_create_backup_with_bytes_body(self):
+        self._test_create_backup(True)
+
+    def _test_create_backup(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.create_backup,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            backup_type='fake-backup',
+            rotation='fake-rotation',
+            name='fake-name'
+            )
+
+    def test_change_password_with_str_body(self):
+        self._test_change_password()
+
+    def test_change_password_with_bytes_body(self):
+        self._test_change_password(True)
+
+    def _test_change_password(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.change_password,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            adminPass='fake-admin-pass'
+            )
+
+    def test_show_password_with_str_body(self):
+        self._test_show_password()
+
+    def test_show_password_with_bytes_body(self):
+        self._test_show_password(True)
+
+    def _test_show_password(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.show_password,
+            'tempest.common.service_client.ServiceClient.get',
+            {'password': 'fake-password'},
+            server_id=self.server_id
+            )
+
+    def test_delete_password_with_str_body(self):
+        self._test_delete_password()
+
+    def test_delete_password_with_bytes_body(self):
+        self._test_delete_password(True)
+
+    def _test_delete_password(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.delete_password,
+            'tempest.common.service_client.ServiceClient.delete',
+            {},
+            status=204,
+            server_id=self.server_id
+            )
+
+    def test_reboot_server_with_str_body(self):
+        self._test_reboot_server()
+
+    def test_reboot_server_with_bytes_body(self):
+        self._test_reboot_server(True)
+
+    def _test_reboot_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.reboot_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            reboot_type='fake-reboot-type'
+            )
+
+    def test_rebuild_server_with_str_body(self):
+        self._test_rebuild_server()
+
+    def test_rebuild_server_with_bytes_body(self):
+        self._test_rebuild_server(True)
+
+    def _test_rebuild_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.rebuild_server,
+            'tempest.common.service_client.ServiceClient.post',
+            self.FAKE_REBUILD_SERVER,
+            status=202,
+            server_id=self.server_id,
+            image_ref='fake-image-ref'
+            )
+
+    def test_resize_server_with_str_body(self):
+        self._test_resize_server()
+
+    def test_resize_server_with_bytes_body(self):
+        self._test_resize_server(True)
+
+    def _test_resize_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.resize_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            flavor_ref='fake-flavor-ref'
+            )
+
+    def test_confirm_resize_server_with_str_body(self):
+        self._test_confirm_resize_server()
+
+    def test_confirm_resize_server_with_bytes_body(self):
+        self._test_confirm_resize_server(True)
+
+    def _test_confirm_resize_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.confirm_resize_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=204,
+            server_id=self.server_id
+            )
+
+    def test_revert_resize_server_with_str_body(self):
+        self._test_revert_resize()
+
+    def test_revert_resize_server_with_bytes_body(self):
+        self._test_revert_resize(True)
+
+    def _test_revert_resize(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.revert_resize_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_list_server_metadata_with_str_body(self):
+        self._test_list_server_metadata()
+
+    def test_list_server_metadata_with_bytes_body(self):
+        self._test_list_server_metadata()
+
+    def _test_list_server_metadata(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.list_server_metadata,
+            'tempest.common.service_client.ServiceClient.get',
+            {'metadata': {'fake-key': 'fake-meta-data'}},
+            server_id=self.server_id
+            )
+
+    def test_set_server_metadata_with_str_body(self):
+        self._test_set_server_metadata()
+
+    def test_set_server_metadata_with_bytes_body(self):
+        self._test_set_server_metadata(True)
+
+    def _test_set_server_metadata(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.set_server_metadata,
+            'tempest.common.service_client.ServiceClient.put',
+            {'metadata': {'fake-key': 'fake-meta-data'}},
+            server_id=self.server_id,
+            meta='fake-meta'
+            )
+
+    def test_update_server_metadata_with_str_body(self):
+        self._test_update_server_metadata()
+
+    def test_update_server_metadata_with_bytes_body(self):
+        self._test_update_server_metadata(True)
+
+    def _test_update_server_metadata(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.update_server_metadata,
+            'tempest.common.service_client.ServiceClient.post',
+            {'metadata': {'fake-key': 'fake-meta-data'}},
+            server_id=self.server_id,
+            meta='fake-meta'
+            )
+
+    def test_show_server_metadata_item_with_str_body(self):
+        self._test_show_server_metadata()
+
+    def test_show_server_metadata_item_with_bytes_body(self):
+        self._test_show_server_metadata(True)
+
+    def _test_show_server_metadata(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.show_server_metadata_item,
+            'tempest.common.service_client.ServiceClient.get',
+            {'meta': {'fake-key': 'fake-meta-data'}},
+            server_id=self.server_id,
+            key='fake-key'
+            )
+
+    def test_set_server_metadata_item_with_str_body(self):
+        self._test_set_server_metadata_item()
+
+    def test_set_server_metadata_item_with_bytes_body(self):
+        self._test_set_server_metadata_item(True)
+
+    def _test_set_server_metadata_item(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.set_server_metadata_item,
+            'tempest.common.service_client.ServiceClient.put',
+            {'meta': {'fake-key': 'fake-meta-data'}},
+            server_id=self.server_id,
+            key='fake-key',
+            meta='fake-meta'
+            )
+
+    def test_delete_server_metadata_item_with_str_body(self):
+        self._test_delete_server_metadata()
+
+    def test_delete_server_metadata_item_with_bytes_body(self):
+        self._test_delete_server_metadata(True)
+
+    def _test_delete_server_metadata(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.delete_server_metadata_item,
+            'tempest.common.service_client.ServiceClient.delete',
+            {},
+            status=204,
+            server_id=self.server_id,
+            key='fake-key'
+            )
+
+    def test_stop_server_with_str_body(self):
+        self._test_stop_server()
+
+    def test_stop_server_with_bytes_body(self):
+        self._test_stop_server(True)
+
+    def _test_stop_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.stop_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_start_server_with_str_body(self):
+        self._test_start_server()
+
+    def test_start_server_with_bytes_body(self):
+        self._test_start_server(True)
+
+    def _test_start_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.start_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_attach_volume_with_str_body(self):
+        self._test_attach_volume_server()
+
+    def test_attach_volume_with_bytes_body(self):
+        self._test_attach_volume_server(True)
+
+    def _test_attach_volume_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.attach_volume,
+            'tempest.common.service_client.ServiceClient.post',
+            {'volumeAttachment': self.FAKE_COMMON_VOLUME},
+            server_id=self.server_id
+            )
+
+    def test_detach_volume_with_str_body(self):
+        self._test_detach_volume_server()
+
+    def test_detach_volume_with_bytes_body(self):
+        self._test_detach_volume_server(True)
+
+    def _test_detach_volume_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.detach_volume,
+            'tempest.common.service_client.ServiceClient.delete',
+            {},
+            status=202,
+            server_id=self.server_id,
+            volume_id=self.FAKE_COMMON_VOLUME['volumeId']
+            )
+
+    def test_show_volume_attachment_with_str_body(self):
+        self._test_show_volume_attachment()
+
+    def test_show_volume_attachment_with_bytes_body(self):
+        self._test_show_volume_attachment(True)
+
+    def _test_show_volume_attachment(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.show_volume_attachment,
+            'tempest.common.service_client.ServiceClient.get',
+            {'volumeAttachment': self.FAKE_COMMON_VOLUME},
+            server_id=self.server_id,
+            attach_id='fake-attach-id'
+            )
+
+    def test_list_volume_attachments_with_str_body(self):
+        self._test_list_volume_attachments()
+
+    def test_list_volume_attachments_with_bytes_body(self):
+        self._test_list_volume_attachments(True)
+
+    def _test_list_volume_attachments(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.list_volume_attachments,
+            'tempest.common.service_client.ServiceClient.get',
+            {'volumeAttachments': [self.FAKE_COMMON_VOLUME]},
+            server_id=self.server_id
+            )
+
+    def test_add_security_group_with_str_body(self):
+        self._test_add_security_group()
+
+    def test_add_security_group_with_bytes_body(self):
+        self._test_add_security_group(True)
+
+    def _test_add_security_group(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.add_security_group,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            name='fake-name'
+            )
+
+    def test_remove_security_group_with_str_body(self):
+        self._test_remove_security_group()
+
+    def test_remove_security_group_with_bytes_body(self):
+        self._test_remove_security_group(True)
+
+    def _test_remove_security_group(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.remove_security_group,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            name='fake-name'
+            )
+
+    def test_live_migrate_server_with_str_body(self):
+        self._test_live_migrate_server()
+
+    def test_live_migrate_server_with_bytes_body(self):
+        self._test_live_migrate_server(True)
+
+    def _test_live_migrate_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.live_migrate_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_migrate_server_with_str_body(self):
+        self._test_migrate_server()
+
+    def test_migrate_server_with_bytes_body(self):
+        self._test_migrate_server(True)
+
+    def _test_migrate_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.migrate_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_lock_server_with_str_body(self):
+        self._test_lock_server()
+
+    def test_lock_server_with_bytes_body(self):
+        self._test_lock_server(True)
+
+    def _test_lock_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.lock_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_unlock_server_with_str_body(self):
+        self._test_unlock_server()
+
+    def test_unlock_server_with_bytes_body(self):
+        self._test_unlock_server(True)
+
+    def _test_unlock_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.unlock_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_suspend_server_with_str_body(self):
+        self._test_suspend_server()
+
+    def test_suspend_server_with_bytes_body(self):
+        self._test_suspend_server(True)
+
+    def _test_suspend_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.suspend_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_resume_server_with_str_body(self):
+        self._test_resume_server()
+
+    def test_resume_server_with_bytes_body(self):
+        self._test_resume_server(True)
+
+    def _test_resume_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.resume_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_pause_server_with_str_body(self):
+        self._test_pause_server()
+
+    def test_pause_server_with_bytes_body(self):
+        self._test_pause_server(True)
+
+    def _test_pause_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.pause_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_unpause_server_with_str_body(self):
+        self._test_unpause_server()
+
+    def test_unpause_server_with_bytes_body(self):
+        self._test_unpause_server(True)
+
+    def _test_unpause_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.unpause_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_reset_state_with_str_body(self):
+        self._test_reset_state()
+
+    def test_reset_state_with_bytes_body(self):
+        self._test_reset_state(True)
+
+    def _test_reset_state(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.reset_state,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id,
+            state='fake-state'
+            )
+
+    def test_shelve_server_with_str_body(self):
+        self._test_shelve_server()
+
+    def test_shelve_server_with_bytes_body(self):
+        self._test_shelve_server(True)
+
+    def _test_shelve_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.shelve_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_unshelve_server_with_str_body(self):
+        self._test_unshelve_server()
+
+    def test_unshelve_server_with_bytes_body(self):
+        self._test_unshelve_server(True)
+
+    def _test_unshelve_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.unshelve_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_shelve_offload_server_with_str_body(self):
+        self._test_shelve_offload_server()
+
+    def test_shelve_offload_server_with_bytes_body(self):
+        self._test_shelve_offload_server(True)
+
+    def _test_shelve_offload_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.shelve_offload_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_get_console_output_with_str_body(self):
+        self._test_get_console_output()
+
+    def test_get_console_output_with_bytes_body(self):
+        self._test_get_console_output(True)
+
+    def _test_get_console_output(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.get_console_output,
+            'tempest.common.service_client.ServiceClient.post',
+            {'output': 'fake-output'},
+            server_id=self.server_id,
+            length='fake-length'
+            )
+
+    def test_list_virtual_interfaces_with_str_body(self):
+        self._test_list_virtual_interfaces()
+
+    def test_list_virtual_interfaces_with_bytes_body(self):
+        self._test_list_virtual_interfaces(True)
+
+    def _test_list_virtual_interfaces(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.list_virtual_interfaces,
+            'tempest.common.service_client.ServiceClient.get',
+            {'virtual_interfaces': [self.FAKE_VIRTUAL_INTERFACES]},
+            server_id=self.server_id
+            )
+
+    def test_rescue_server_with_str_body(self):
+        self._test_rescue_server()
+
+    def test_rescue_server_with_bytes_body(self):
+        self._test_rescue_server(True)
+
+    def _test_rescue_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.rescue_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {'adminPass': 'fake-admin-pass'},
+            server_id=self.server_id
+            )
+
+    def test_unrescue_server_with_str_body(self):
+        self._test_unrescue_server()
+
+    def test_unrescue_server_with_bytes_body(self):
+        self._test_unrescue_server(True)
+
+    def _test_unrescue_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.unrescue_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_show_server_diagnostics_with_str_body(self):
+        self._test_show_server_diagnostics()
+
+    def test_show_server_diagnostics_with_bytes_body(self):
+        self._test_show_server_diagnostics(True)
+
+    def _test_show_server_diagnostics(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.show_server_diagnostics,
+            'tempest.common.service_client.ServiceClient.get',
+            self.FAKE_SERVER_DIAGNOSTICS,
+            status=200,
+            server_id=self.server_id
+            )
+
+    def test_list_instance_actions_with_str_body(self):
+        self._test_list_instance_actions()
+
+    def test_list_instance_actions_with_bytes_body(self):
+        self._test_list_instance_actions(True)
+
+    def _test_list_instance_actions(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.list_instance_actions,
+            'tempest.common.service_client.ServiceClient.get',
+            {'instanceActions': [self.FAKE_INSTANCE_ACTIONS]},
+            server_id=self.server_id
+            )
+
+    def test_show_instance_action_with_str_body(self):
+        self._test_show_instance_action()
+
+    def test_show_instance_action_with_bytes_body(self):
+        self._test_show_instance_action(True)
+
+    def _test_show_instance_action(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.show_instance_action,
+            'tempest.common.service_client.ServiceClient.get',
+            {'instanceAction': self.FAKE_INSTANCE_WITH_EVENTS},
+            server_id=self.server_id,
+            request_id='fake-request-id'
+            )
+
+    def test_force_delete_server_with_str_body(self):
+        self._test_force_delete_server()
+
+    def test_force_delete_server_with_bytes_body(self):
+        self._test_force_delete_server(True)
+
+    def _test_force_delete_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.force_delete_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_restore_soft_deleted_server_with_str_body(self):
+        self._test_restore_soft_deleted_server()
+
+    def test_restore_soft_deleted_server_with_bytes_body(self):
+        self._test_restore_soft_deleted_server(True)
+
+    def _test_restore_soft_deleted_server(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.restore_soft_deleted_server,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_reset_network_with_str_body(self):
+        self._test_reset_network()
+
+    def test_reset_network_with_bytes_body(self):
+        self._test_reset_network(True)
+
+    def _test_reset_network(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.reset_network,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_inject_network_info_with_str_body(self):
+        self._test_inject_network_info()
+
+    def test_inject_network_info_with_bytes_body(self):
+        self._test_inject_network_info(True)
+
+    def _test_inject_network_info(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.inject_network_info,
+            'tempest.common.service_client.ServiceClient.post',
+            {},
+            status=202,
+            server_id=self.server_id
+            )
+
+    def test_get_vnc_console_with_str_body(self):
+        self._test_get_vnc_console()
+
+    def test_get_vnc_console_with_bytes_body(self):
+        self._test_get_vnc_console(True)
+
+    def _test_get_vnc_console(self, bytes_body=False):
+        self.check_service_client_function(
+            self.client.get_vnc_console,
+            'tempest.common.service_client.ServiceClient.post',
+            {'console': self.FAKE_VNC_CONSOLE},
+            server_id=self.server_id,
+            console_type='fake-console-type'
+            )
diff --git a/tempest/tests/services/compute/test_volumes_client.py b/tempest/tests/services/compute/test_volumes_client.py
deleted file mode 100644
index 33d4bad..0000000
--- a/tempest/tests/services/compute/test_volumes_client.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# Copyright 2015 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.
-
-import copy
-
-from oslotest import mockpatch
-from tempest_lib import exceptions as lib_exc
-
-from tempest.services.compute.json import volumes_client
-from tempest.tests import fake_auth_provider
-from tempest.tests.services.compute import base
-
-
-class TestVolumesClient(base.BaseComputeServiceTest):
-
-    FAKE_VOLUME = {
-        "id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c",
-        "displayName": u"v\u12345ol-001",
-        "displayDescription": u"Another \u1234volume.",
-        "size": 30,
-        "status": "Active",
-        "volumeType": "289da7f8-6440-407c-9fb4-7db01ec49164",
-        "metadata": {
-            "contents": "junk"
-        },
-        "availabilityZone": "us-east1",
-        "snapshotId": None,
-        "attachments": [],
-        "createdAt": "2012-02-14T20:53:07Z"
-    }
-
-    FAKE_VOLUMES = {"volumes": [FAKE_VOLUME]}
-
-    def setUp(self):
-        super(TestVolumesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = volumes_client.VolumesClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_list_volumes(self, bytes_body=False, **params):
-        self.check_service_client_function(
-            self.client.list_volumes,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_VOLUMES, to_utf=bytes_body, **params)
-
-    def test_list_volumes_with_str_body(self):
-        self._test_list_volumes()
-
-    def test_list_volumes_with_byte_body(self):
-        self._test_list_volumes(bytes_body=True)
-
-    def test_list_volumes_with_params(self):
-        self._test_list_volumes(name='fake')
-
-    def _test_show_volume(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_volume,
-            'tempest.common.service_client.ServiceClient.get',
-            {"volume": self.FAKE_VOLUME},
-            to_utf=bytes_body, volume_id=self.FAKE_VOLUME['id'])
-
-    def test_show_volume_with_str_body(self):
-        self._test_show_volume()
-
-    def test_show_volume_with_bytes_body(self):
-        self._test_show_volume(bytes_body=True)
-
-    def _test_create_volume(self, bytes_body=False):
-        post_body = copy.deepcopy(self.FAKE_VOLUME)
-        del post_body['id']
-        del post_body['createdAt']
-        del post_body['status']
-        self.check_service_client_function(
-            self.client.create_volume,
-            'tempest.common.service_client.ServiceClient.post',
-            {"volume": self.FAKE_VOLUME},
-            to_utf=bytes_body, status=200, **post_body)
-
-    def test_create_volume_with_str_body(self):
-        self._test_create_volume()
-
-    def test_create_volume_with_bytes_body(self):
-        self._test_create_volume(bytes_body=True)
-
-    def test_delete_volume(self):
-        self.check_service_client_function(
-            self.client.delete_volume,
-            'tempest.common.service_client.ServiceClient.delete',
-            {}, status=202, volume_id=self.FAKE_VOLUME['id'])
-
-    def test_is_resource_deleted_true(self):
-        module = ('tempest.services.compute.json.volumes_client.'
-                  'VolumesClient.show_volume')
-        self.useFixture(mockpatch.Patch(
-            module, side_effect=lib_exc.NotFound))
-        self.assertTrue(self.client.is_resource_deleted('fake-id'))
-
-    def test_is_resource_deleted_false(self):
-        module = ('tempest.services.compute.json.volumes_client.'
-                  'VolumesClient.show_volume')
-        self.useFixture(mockpatch.Patch(
-            module, return_value={}))
-        self.assertFalse(self.client.is_resource_deleted('fake-id'))
diff --git a/tempest/tests/test_glance_http.py b/tempest/tests/test_glance_http.py
index ed886da..db9db34 100644
--- a/tempest/tests/test_glance_http.py
+++ b/tempest/tests/test_glance_http.py
@@ -123,9 +123,9 @@
     def test_get_connection_kwargs_default_for_https(self):
         kwargs = self.client._get_connection_kwargs('https')
         self.assertEqual(600, kwargs['timeout'])
-        self.assertEqual(None, kwargs['ca_certs'])
-        self.assertEqual(None, kwargs['cert_file'])
-        self.assertEqual(None, kwargs['key_file'])
+        self.assertIsNone(kwargs['ca_certs'])
+        self.assertIsNone(kwargs['cert_file'])
+        self.assertIsNone(kwargs['key_file'])
         self.assertEqual(False, kwargs['insecure'])
         self.assertEqual(True, kwargs['ssl_compression'])
         self.assertEqual(6, len(kwargs.keys()))
diff --git a/tox.ini b/tox.ini
index 41eece1..fedd04c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = pep8,py27,py34
+envlist = pep8,py34,py27
 minversion = 1.6
 skipsdist = True