Merge "Adds test for mac_spoofing"
diff --git a/tempest/api/compute/admin/test_servers.py b/tempest/api/compute/admin/test_servers.py
index 993d39e..b038c6b 100644
--- a/tempest/api/compute/admin/test_servers.py
+++ b/tempest/api/compute/admin/test_servers.py
@@ -147,7 +147,7 @@
     @test.idempotent_id('31ff3486-b8a0-4f56-a6c0-aab460531db3')
     def test_get_server_diagnostics_by_admin(self):
         # Retrieve server diagnostics by admin user
-        diagnostic = self.client.get_server_diagnostics(self.s1_id)
+        diagnostic = self.client.show_server_diagnostics(self.s1_id)
         basic_attrs = ['rx_packets', 'rx_errors', 'rx_drop',
                        'tx_packets', 'tx_errors', 'tx_drop',
                        'read_req', 'write_req', 'cpu', 'memory']
diff --git a/tempest/api/compute/admin/test_servers_negative.py b/tempest/api/compute/admin/test_servers_negative.py
index 3d0ce35..7c5e8d0 100644
--- a/tempest/api/compute/admin/test_servers_negative.py
+++ b/tempest/api/compute/admin/test_servers_negative.py
@@ -130,7 +130,7 @@
     def test_get_server_diagnostics_by_non_admin(self):
         # Non-admin user can not view server diagnostics according to policy
         self.assertRaises(lib_exc.Forbidden,
-                          self.non_adm_client.get_server_diagnostics,
+                          self.non_adm_client.show_server_diagnostics,
                           self.s1_id)
 
     @test.attr(type=['negative'])
diff --git a/tempest/api/compute/servers/test_instance_actions.py b/tempest/api/compute/servers/test_instance_actions.py
index 97d47fd..814aec7 100644
--- a/tempest/api/compute/servers/test_instance_actions.py
+++ b/tempest/api/compute/servers/test_instance_actions.py
@@ -47,7 +47,7 @@
     @test.idempotent_id('aacc71ca-1d70-4aa5-bbf6-0ff71470e43c')
     def test_get_instance_action(self):
         # Get the action details of the provided server
-        body = self.client.get_instance_action(
+        body = self.client.show_instance_action(
             self.server_id, self.request_id)['instanceAction']
         self.assertEqual(self.server_id, body['instance_uuid'])
         self.assertEqual('create', body['action'])
diff --git a/tempest/api/compute/servers/test_instance_actions_negative.py b/tempest/api/compute/servers/test_instance_actions_negative.py
index 6567da1..ac66d05 100644
--- a/tempest/api/compute/servers/test_instance_actions_negative.py
+++ b/tempest/api/compute/servers/test_instance_actions_negative.py
@@ -46,5 +46,5 @@
     @test.idempotent_id('0269f40a-6f18-456c-b336-c03623c897f1')
     def test_get_instance_action_invalid_request(self):
         # Get the action details of the provided server with invalid request
-        self.assertRaises(lib_exc.NotFound, self.client.get_instance_action,
+        self.assertRaises(lib_exc.NotFound, self.client.show_instance_action,
                           self.server_id, '999')
diff --git a/tempest/api/compute/servers/test_server_metadata.py b/tempest/api/compute/servers/test_server_metadata.py
index 77ddb3b..9c07677 100644
--- a/tempest/api/compute/servers/test_server_metadata.py
+++ b/tempest/api/compute/servers/test_server_metadata.py
@@ -87,8 +87,8 @@
     @test.idempotent_id('3043c57d-7e0e-49a6-9a96-ad569c265e6a')
     def test_get_server_metadata_item(self):
         # The value for a specific metadata key should be returned
-        meta = self.client.get_server_metadata_item(self.server_id,
-                                                    'key2')['meta']
+        meta = self.client.show_server_metadata_item(self.server_id,
+                                                     'key2')['meta']
         self.assertEqual('value2', meta['key2'])
 
     @test.idempotent_id('58c02d4f-5c67-40be-8744-d3fa5982eb1c')
diff --git a/tempest/api/compute/servers/test_server_metadata_negative.py b/tempest/api/compute/servers/test_server_metadata_negative.py
index cee60fb..18d80be 100644
--- a/tempest/api/compute/servers/test_server_metadata_negative.py
+++ b/tempest/api/compute/servers/test_server_metadata_negative.py
@@ -67,7 +67,7 @@
         # GET on a non-existent server should not succeed
         non_existent_server_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound,
-                          self.client.get_server_metadata_item,
+                          self.client.show_server_metadata_item,
                           non_existent_server_id,
                           'test2')
 
diff --git a/tempest/api/compute/servers/test_server_password.py b/tempest/api/compute/servers/test_server_password.py
index 35c2cfd..9b41708 100644
--- a/tempest/api/compute/servers/test_server_password.py
+++ b/tempest/api/compute/servers/test_server_password.py
@@ -32,7 +32,7 @@
 
     @test.idempotent_id('f83b582f-62a8-4f22-85b0-0dee50ff783a')
     def test_get_server_password(self):
-        self.client.get_password(self.server['id'])
+        self.client.show_password(self.server['id'])
 
     @test.idempotent_id('f8229e8b-b625-4493-800a-bde86ac611ea')
     def test_delete_server_password(self):
diff --git a/tempest/api/compute/servers/test_servers.py b/tempest/api/compute/servers/test_servers.py
index d2fb652..8e2fbf1 100644
--- a/tempest/api/compute/servers/test_servers.py
+++ b/tempest/api/compute/servers/test_servers.py
@@ -71,9 +71,10 @@
         server = self.client.show_server(server['id'])['server']
         self.assertEqual(key_name, server['key_name'])
 
-    def _update_server_name(self, server_id, status):
+    def _update_server_name(self, server_id, status, prefix_name='server'):
         # The server name should be changed to the the provided value
-        new_name = data_utils.rand_name('server')
+        new_name = data_utils.rand_name(prefix_name)
+
         # Update the server with a new name
         self.client.update_server(server_id,
                                   name=new_name)
@@ -88,8 +89,9 @@
     def test_update_server_name(self):
         # The server name should be changed to the the provided value
         server = self.create_test_server(wait_until='ACTIVE')
-
-        self._update_server_name(server['id'], 'ACTIVE')
+        # Update instance name with non-ASCII characters
+        prefix_name = u'\u00CD\u00F1st\u00E1\u00F1c\u00E9'
+        self._update_server_name(server['id'], 'ACTIVE', prefix_name)
 
     @test.idempotent_id('6ac19cb1-27a3-40ec-b350-810bdc04c08e')
     def test_update_server_name_in_stop_state(self):
@@ -97,7 +99,11 @@
         server = self.create_test_server(wait_until='ACTIVE')
         self.client.stop_server(server['id'])
         waiters.wait_for_server_status(self.client, server['id'], 'SHUTOFF')
-        updated_server = self._update_server_name(server['id'], 'SHUTOFF')
+        # Update instance name with non-ASCII characters
+        prefix_name = u'\u00CD\u00F1st\u00E1\u00F1c\u00E9'
+        updated_server = self._update_server_name(server['id'],
+                                                  'SHUTOFF',
+                                                  prefix_name)
         self.assertNotIn('progress', updated_server)
 
     @test.idempotent_id('89b90870-bc13-4b73-96af-f9d4f2b70077')
diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py
index f8d0cca..436ed2f 100644
--- a/tempest/api/compute/test_authorization.py
+++ b/tempest/api/compute/test_authorization.py
@@ -400,7 +400,7 @@
         self.addCleanup(self.client.delete_server_metadata_item,
                         self.server['id'], 'meta1')
         self.assertRaises(lib_exc.NotFound,
-                          self.alt_client.get_server_metadata_item,
+                          self.alt_client.show_server_metadata_item,
                           self.server['id'], 'meta1')
 
     @test.idempotent_id('16b2d724-0d3b-4216-a9fa-97bd4d9cf670')
diff --git a/tempest/api/compute/volumes/test_attach_volume.py b/tempest/api/compute/volumes/test_attach_volume.py
index ab4ddf7..b4837f7 100644
--- a/tempest/api/compute/volumes/test_attach_volume.py
+++ b/tempest/api/compute/volumes/test_attach_volume.py
@@ -144,7 +144,7 @@
         self.assertIn(self.attachment, body)
 
         # Get Volume attachment of the server
-        body = self.servers_client.get_volume_attachment(
+        body = self.servers_client.show_volume_attachment(
             self.server['id'],
             self.attachment['id'])['volumeAttachment']
         self.assertEqual(self.server['id'], body['serverId'])
diff --git a/tempest/api/identity/admin/v2/test_roles.py b/tempest/api/identity/admin/v2/test_roles.py
index 657d72e..8702db7 100644
--- a/tempest/api/identity/admin/v2/test_roles.py
+++ b/tempest/api/identity/admin/v2/test_roles.py
@@ -95,7 +95,7 @@
         user_role = self.client.assign_user_role(tenant['id'],
                                                  user['id'],
                                                  role['id'])['role']
-        self.client.remove_user_role(tenant['id'], user['id'],
+        self.client.delete_user_role(tenant['id'], user['id'],
                                      user_role['id'])
 
     @test.idempotent_id('262e1e3e-ed71-4edd-a0e5-d64e83d66d05')
diff --git a/tempest/api/identity/admin/v2/test_roles_negative.py b/tempest/api/identity/admin/v2/test_roles_negative.py
index 5932aba..45c95df 100644
--- a/tempest/api/identity/admin/v2/test_roles_negative.py
+++ b/tempest/api/identity/admin/v2/test_roles_negative.py
@@ -177,7 +177,7 @@
                                      user['id'],
                                      role['id'])
         self.assertRaises(lib_exc.Forbidden,
-                          self.non_admin_client.remove_user_role,
+                          self.non_admin_client.delete_user_role,
                           tenant['id'], user['id'], role['id'])
 
     @test.attr(type=['negative'])
@@ -191,7 +191,7 @@
         token = self.client.auth_provider.get_token()
         self.client.delete_token(token)
         self.assertRaises(lib_exc.Unauthorized,
-                          self.client.remove_user_role, tenant['id'],
+                          self.client.delete_user_role, tenant['id'],
                           user['id'], role['id'])
         self.client.auth_provider.clear_auth()
 
@@ -204,7 +204,7 @@
                                      user['id'],
                                      role['id'])
         non_existent_role = str(uuid.uuid4().hex)
-        self.assertRaises(lib_exc.NotFound, self.client.remove_user_role,
+        self.assertRaises(lib_exc.NotFound, self.client.delete_user_role,
                           tenant['id'], user['id'], non_existent_role)
 
     @test.attr(type=['negative'])
@@ -216,7 +216,7 @@
                                      user['id'],
                                      role['id'])
         non_existent_tenant = str(uuid.uuid4().hex)
-        self.assertRaises(lib_exc.NotFound, self.client.remove_user_role,
+        self.assertRaises(lib_exc.NotFound, self.client.delete_user_role,
                           non_existent_tenant, user['id'], role['id'])
 
     @test.attr(type=['negative'])
diff --git a/tempest/api/identity/admin/v3/test_groups.py b/tempest/api/identity/admin/v3/test_groups.py
index 5ce6354..82e4ec8 100644
--- a/tempest/api/identity/admin/v3/test_groups.py
+++ b/tempest/api/identity/admin/v3/test_groups.py
@@ -24,21 +24,20 @@
     def test_group_create_update_get(self):
         name = data_utils.rand_name('Group')
         description = data_utils.rand_name('Description')
-        group = self.client.create_group(name,
-                                         description=description)['group']
-        self.addCleanup(self.client.delete_group, group['id'])
+        group = self.groups_client.create_group(
+            name=name, description=description)['group']
+        self.addCleanup(self.groups_client.delete_group, group['id'])
         self.assertEqual(group['name'], name)
         self.assertEqual(group['description'], description)
 
         new_name = data_utils.rand_name('UpdateGroup')
         new_desc = data_utils.rand_name('UpdateDescription')
-        updated_group = self.client.update_group(group['id'],
-                                                 name=new_name,
-                                                 description=new_desc)['group']
+        updated_group = self.groups_client.update_group(
+            group['id'], name=new_name, description=new_desc)['group']
         self.assertEqual(updated_group['name'], new_name)
         self.assertEqual(updated_group['description'], new_desc)
 
-        new_group = self.client.get_group(group['id'])['group']
+        new_group = self.groups_client.show_group(group['id'])['group']
         self.assertEqual(group['id'], new_group['id'])
         self.assertEqual(new_name, new_group['name'])
         self.assertEqual(new_desc, new_group['description'])
@@ -47,8 +46,8 @@
     @test.idempotent_id('1598521a-2f36-4606-8df9-30772bd51339')
     def test_group_users_add_list_delete(self):
         name = data_utils.rand_name('Group')
-        group = self.client.create_group(name)['group']
-        self.addCleanup(self.client.delete_group, group['id'])
+        group = self.groups_client.create_group(name=name)['group']
+        self.addCleanup(self.groups_client.delete_group, group['id'])
         # add user into group
         users = []
         for i in range(3):
@@ -56,16 +55,15 @@
             user = self.client.create_user(name)['user']
             users.append(user)
             self.addCleanup(self.client.delete_user, user['id'])
-            self.client.add_group_user(group['id'], user['id'])
+            self.groups_client.add_group_user(group['id'], user['id'])
 
         # list users in group
-        group_users = self.client.list_group_users(group['id'])['users']
+        group_users = self.groups_client.list_group_users(group['id'])['users']
         self.assertEqual(sorted(users), sorted(group_users))
         # delete user in group
         for user in users:
-            self.client.delete_group_user(group['id'],
-                                          user['id'])
-        group_users = self.client.list_group_users(group['id'])['users']
+            self.groups_client.delete_group_user(group['id'], user['id'])
+        group_users = self.groups_client.list_group_users(group['id'])['users']
         self.assertEqual(len(group_users), 0)
 
     @test.idempotent_id('64573281-d26a-4a52-b899-503cb0f4e4ec')
@@ -79,10 +77,10 @@
         groups = []
         for i in range(2):
             name = data_utils.rand_name('Group')
-            group = self.client.create_group(name)['group']
+            group = self.groups_client.create_group(name=name)['group']
             groups.append(group)
-            self.addCleanup(self.client.delete_group, group['id'])
-            self.client.add_group_user(group['id'], user['id'])
+            self.addCleanup(self.groups_client.delete_group, group['id'])
+            self.groups_client.add_group_user(group['id'], user['id'])
         # list groups which user belongs to
         user_groups = self.client.list_user_groups(user['id'])['groups']
         self.assertEqual(sorted(groups), sorted(user_groups))
@@ -96,12 +94,12 @@
         for _ in range(3):
             name = data_utils.rand_name('Group')
             description = data_utils.rand_name('Description')
-            group = self.client.create_group(name,
-                                             description=description)['group']
-            self.addCleanup(self.client.delete_group, group['id'])
+            group = self.groups_client.create_group(
+                name=name, description=description)['group']
+            self.addCleanup(self.groups_client.delete_group, group['id'])
             group_ids.append(group['id'])
         # List and Verify Groups
-        body = self.client.list_groups()['groups']
+        body = self.groups_client.list_groups()['groups']
         for g in body:
             fetched_ids.append(g['id'])
         missing_groups = [g for g in group_ids if g not in fetched_ids]
diff --git a/tempest/api/identity/admin/v3/test_roles.py b/tempest/api/identity/admin/v3/test_roles.py
index 8595dde..3be2643 100644
--- a/tempest/api/identity/admin/v3/test_roles.py
+++ b/tempest/api/identity/admin/v3/test_roles.py
@@ -39,8 +39,8 @@
             data_utils.rand_name('project'),
             description=data_utils.rand_name('project-desc'),
             domain_id=cls.domain['id'])['project']
-        cls.group_body = cls.client.create_group(
-            data_utils.rand_name('Group'), project_id=cls.project['id'],
+        cls.group_body = cls.groups_client.create_group(
+            name=data_utils.rand_name('Group'), project_id=cls.project['id'],
             domain_id=cls.domain['id'])['group']
         cls.user_body = cls.client.create_user(
             u_name, description=u_desc, password=cls.u_password,
@@ -52,7 +52,7 @@
     @classmethod
     def resource_cleanup(cls):
         cls.client.delete_role(cls.role['id'])
-        cls.client.delete_group(cls.group_body['id'])
+        cls.groups_client.delete_group(cls.group_body['id'])
         cls.client.delete_user(cls.user_body['id'])
         cls.client.delete_project(cls.project['id'])
         # NOTE(harika-vakadi): It is necessary to disable the domain
@@ -102,7 +102,7 @@
         self._list_assertions(roles, self.fetched_role_ids,
                               self.role['id'])
 
-        self.client.revoke_role_from_user_on_project(
+        self.client.delete_role_from_user_on_project(
             self.project['id'], self.user_body['id'], self.role['id'])
 
     @test.idempotent_id('6c9a2940-3625-43a3-ac02-5dcec62ef3bd')
@@ -119,7 +119,7 @@
         self._list_assertions(roles, self.fetched_role_ids,
                               self.role['id'])
 
-        self.client.revoke_role_from_user_on_domain(
+        self.client.delete_role_from_user_on_domain(
             self.domain['id'], self.user_body['id'], self.role['id'])
 
     @test.idempotent_id('cbf11737-1904-4690-9613-97bcbb3df1c4')
@@ -137,8 +137,9 @@
         self._list_assertions(roles, self.fetched_role_ids,
                               self.role['id'])
         # Add user to group, and insure user has role on project
-        self.client.add_group_user(self.group_body['id'], self.user_body['id'])
-        self.addCleanup(self.client.delete_group_user,
+        self.groups_client.add_group_user(self.group_body['id'],
+                                          self.user_body['id'])
+        self.addCleanup(self.groups_client.delete_group_user,
                         self.group_body['id'], self.user_body['id'])
         body = self.token.auth(user_id=self.user_body['id'],
                                password=self.u_password,
@@ -149,7 +150,7 @@
         self.assertEqual(len(roles), 1)
         self.assertEqual(roles[0]['id'], self.role['id'])
         # Revoke role to group on project
-        self.client.revoke_role_from_group_on_project(
+        self.client.delete_role_from_group_on_project(
             self.project['id'], self.group_body['id'], self.role['id'])
 
     @test.idempotent_id('4bf8a70b-e785-413a-ad53-9f91ce02faa7')
@@ -166,7 +167,7 @@
         self._list_assertions(roles, self.fetched_role_ids,
                               self.role['id'])
 
-        self.client.revoke_role_from_group_on_domain(
+        self.client.delete_role_from_group_on_domain(
             self.domain['id'], self.group_body['id'], self.role['id'])
 
     @test.idempotent_id('f5654bcc-08c4-4f71-88fe-05d64e06de94')
diff --git a/tempest/api/identity/admin/v3/test_users_negative.py b/tempest/api/identity/admin/v3/test_users_negative.py
new file mode 100644
index 0000000..ca2aaa4
--- /dev/null
+++ b/tempest/api/identity/admin/v3/test_users_negative.py
@@ -0,0 +1,35 @@
+# Copyright 2015 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_lib import exceptions as lib_exc
+
+from tempest.api.identity import base
+from tempest.common.utils import data_utils
+from tempest import test
+
+
+class UsersNegativeTest(base.BaseIdentityV3AdminTest):
+
+    @test.attr(type=['negative'])
+    @test.idempotent_id('e75f006c-89cc-477b-874d-588e4eab4b17')
+    def test_create_user_for_non_existent_domain(self):
+        # Attempt to create a user in a non-existent domain should fail
+        u_name = data_utils.rand_name('user')
+        u_email = u_name + '@testmail.tm'
+        u_password = data_utils.rand_name('pass')
+        self.assertRaises(lib_exc.NotFound, self.client.create_user,
+                          u_name, u_password,
+                          email=u_email,
+                          domain_id=data_utils.rand_uuid_hex())
diff --git a/tempest/api/identity/base.py b/tempest/api/identity/base.py
index f9395bc..c56f4fb 100644
--- a/tempest/api/identity/base.py
+++ b/tempest/api/identity/base.py
@@ -120,11 +120,6 @@
         super(BaseIdentityV3Test, cls).setup_clients()
         cls.non_admin_client = cls.os.identity_v3_client
         cls.non_admin_token = cls.os.token_v3_client
-        cls.non_admin_endpoints_client = cls.os.endpoints_client
-        cls.non_admin_region_client = cls.os.region_client
-        cls.non_admin_service_client = cls.os.service_client
-        cls.non_admin_policy_client = cls.os.policy_client
-        cls.non_admin_creds_client = cls.os.credentials_client
 
     @classmethod
     def resource_cleanup(cls):
@@ -142,10 +137,12 @@
         cls.token = cls.os_adm.token_v3_client
         cls.endpoints_client = cls.os_adm.endpoints_client
         cls.region_client = cls.os_adm.region_client
-        cls.data = DataGenerator(cls.client)
         cls.service_client = cls.os_adm.service_client
         cls.policy_client = cls.os_adm.policy_client
         cls.creds_client = cls.os_adm.credentials_client
+        cls.groups_client = cls.os_adm.groups_client
+
+        cls.data = DataGenerator(cls.client)
 
     @classmethod
     def resource_cleanup(cls):
diff --git a/tempest/api/identity/v2/test_users.py b/tempest/api/identity/v2/test_users.py
index 50aaa25..03c6621 100644
--- a/tempest/api/identity/v2/test_users.py
+++ b/tempest/api/identity/v2/test_users.py
@@ -55,6 +55,10 @@
             new_pass=old_pass,
             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']
+
         # 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
@@ -64,10 +68,6 @@
         # sub-second precision.
         time.sleep(1)
 
-        # 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']
-
         # check authorization with new token
         self.non_admin_token_client.auth_token(resp['token']['id'])
         # check authorization with new password
diff --git a/tempest/api/identity/v3/test_users.py b/tempest/api/identity/v3/test_users.py
index 14a866f..2bab5d1 100644
--- a/tempest/api/identity/v3/test_users.py
+++ b/tempest/api/identity/v3/test_users.py
@@ -54,6 +54,10 @@
             password=old_pass,
             original_password=new_pass)
 
+        # user updates own password
+        self.non_admin_client.update_user_password(
+            user_id=user_id, password=new_pass, original_password=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
         # is necessary because keystone will err on the side of security and
@@ -63,10 +67,6 @@
         # sub-second precision.
         time.sleep(1)
 
-        # user updates own password
-        self.non_admin_client.update_user_password(
-            user_id=user_id, password=new_pass, original_password=old_pass)
-
         # check authorization with new password
         self.non_admin_token.auth(user_id=self.user_id, password=new_pass)
 
diff --git a/tempest/api/image/admin/v2/test_images.py b/tempest/api/image/admin/v2/test_images.py
index 01838b6..b171da3 100644
--- a/tempest/api/image/admin/v2/test_images.py
+++ b/tempest/api/image/admin/v2/test_images.py
@@ -49,12 +49,12 @@
         body = self.client.show_image(image_id)
         self.assertEqual("deactivated", body['status'])
         # non-admin user unable to download deactivated image
-        self.assertRaises(lib_exc.Forbidden, self.client.load_image_file,
+        self.assertRaises(lib_exc.Forbidden, self.client.show_image_file,
                           image_id)
         # reactivate image
         self.admin_client.reactivate_image(image_id)
         body = self.client.show_image(image_id)
         self.assertEqual("active", body['status'])
         # non-admin user able to download image after reactivation by admin
-        body = self.client.load_image_file(image_id)
+        body = self.client.show_image_file(image_id)
         self.assertEqual(content, body.data)
diff --git a/tempest/api/image/v2/test_images.py b/tempest/api/image/v2/test_images.py
index 936eadf..2e6c268 100644
--- a/tempest/api/image/v2/test_images.py
+++ b/tempest/api/image/v2/test_images.py
@@ -72,7 +72,7 @@
         self.assertEqual(1024, body.get('size'))
 
         # Now try get image file
-        body = self.client.load_image_file(image_id)
+        body = self.client.show_image_file(image_id)
         self.assertEqual(file_content, body.data)
 
     @test.attr(type='smoke')
diff --git a/tempest/api/image/v2/test_images_member.py b/tempest/api/image/v2/test_images_member.py
index d89803d..98ff64b 100644
--- a/tempest/api/image/v2/test_images_member.py
+++ b/tempest/api/image/v2/test_images_member.py
@@ -20,14 +20,14 @@
     def test_image_share_accept(self):
         image_id = self._create_image()
         member = self.os_img_client.add_image_member(image_id,
-                                                     self.alt_tenant_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')
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
-                                                {'status': 'accepted'})
+                                                status='accepted')
         self.assertIn(image_id, self._list_image_ids_as_alt())
         body = self.os_img_client.list_image_members(image_id)
         members = body['members']
@@ -41,24 +41,24 @@
     def test_image_share_reject(self):
         image_id = self._create_image()
         member = self.os_img_client.add_image_member(image_id,
-                                                     self.alt_tenant_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')
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
-                                                {'status': 'rejected'})
+                                                status='rejected')
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
 
     @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,
-                                            self.alt_tenant_id)
+                                            member=self.alt_tenant_id)
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
-                                                {'status': 'accepted'})
+                                                status='accepted')
 
         self.assertIn(image_id, self._list_image_ids_as_alt())
         member = self.os_img_client.show_image_member(image_id,
@@ -71,13 +71,13 @@
     def test_remove_image_member(self):
         image_id = self._create_image()
         self.os_img_client.add_image_member(image_id,
-                                            self.alt_tenant_id)
+                                            member=self.alt_tenant_id)
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
-                                                {'status': 'accepted'})
+                                                status='accepted')
 
         self.assertIn(image_id, self._list_image_ids_as_alt())
-        self.os_img_client.remove_image_member(image_id, self.alt_tenant_id)
+        self.os_img_client.delete_image_member(image_id, self.alt_tenant_id)
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
 
     @test.idempotent_id('634dcc3f-f6e2-4409-b8fd-354a0bb25d83')
@@ -94,14 +94,14 @@
     def test_get_private_image(self):
         image_id = self._create_image()
         member = self.os_img_client.add_image_member(image_id,
-                                                     self.alt_tenant_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')
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
         self.alt_img_client.update_image_member(image_id,
                                                 self.alt_tenant_id,
-                                                {'status': 'accepted'})
+                                                status='accepted')
         self.assertIn(image_id, self._list_image_ids_as_alt())
-        self.os_img_client.remove_image_member(image_id, self.alt_tenant_id)
+        self.os_img_client.delete_image_member(image_id, self.alt_tenant_id)
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
diff --git a/tempest/api/image/v2/test_images_member_negative.py b/tempest/api/image/v2/test_images_member_negative.py
index ae8913c..d5ea291 100644
--- a/tempest/api/image/v2/test_images_member_negative.py
+++ b/tempest/api/image/v2/test_images_member_negative.py
@@ -23,22 +23,22 @@
     def test_image_share_invalid_status(self):
         image_id = self._create_image()
         member = self.os_img_client.add_image_member(image_id,
-                                                     self.alt_tenant_id)
+                                                     member=self.alt_tenant_id)
         self.assertEqual(member['status'], 'pending')
         self.assertRaises(lib_exc.BadRequest,
                           self.alt_img_client.update_image_member,
                           image_id, self.alt_tenant_id,
-                          {'status': 'notavalidstatus'})
+                          status='notavalidstatus')
 
     @test.attr(type=['negative'])
     @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,
-                                                     self.alt_tenant_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,
                           self.os_img_client.update_image_member,
-                          image_id, self.alt_tenant_id, {'status': 'accepted'})
+                          image_id, self.alt_tenant_id, status='accepted')
         self.assertNotIn(image_id, self._list_image_ids_as_alt())
diff --git a/tempest/api/image/v2/test_images_metadefs_namespaces.py b/tempest/api/image/v2/test_images_metadefs_namespaces.py
index d089c84..efb7b8b 100644
--- a/tempest/api/image/v2/test_images_metadefs_namespaces.py
+++ b/tempest/api/image/v2/test_images_metadefs_namespaces.py
@@ -29,42 +29,42 @@
         resource_name = body['resource_types'][0]['name']
         name = [{'name': resource_name}]
         namespace_name = data_utils.rand_name('namespace')
-        # create the metadef namespaces
-        body = self.client.create_namespaces(namespace=namespace_name,
-                                             visibility='public',
-                                             description='Tempest',
-                                             display_name=namespace_name,
-                                             resource_type_associations=name,
-                                             protected=True)
+        # create the metadef namespace
+        body = self.client.create_namespace(namespace=namespace_name,
+                                            visibility='public',
+                                            description='Tempest',
+                                            display_name=namespace_name,
+                                            resource_type_associations=name,
+                                            protected=True)
         self.addCleanup(self._cleanup_namespace, namespace_name)
-        # get namespaces details
-        body = self.client.show_namespaces(namespace_name)
+        # get namespace details
+        body = self.client.show_namespace(namespace_name)
         self.assertEqual(namespace_name, body['namespace'])
         self.assertEqual('public', body['visibility'])
         # unable to delete protected namespace
-        self.assertRaises(lib_exc.Forbidden, self.client.delete_namespaces,
+        self.assertRaises(lib_exc.Forbidden, self.client.delete_namespace,
                           namespace_name)
         # update the visibility to private and protected to False
-        body = self.client.update_namespaces(namespace=namespace_name,
-                                             description='Tempest',
-                                             visibility='private',
-                                             display_name=namespace_name,
-                                             protected=False)
+        body = self.client.update_namespace(namespace=namespace_name,
+                                            description='Tempest',
+                                            visibility='private',
+                                            display_name=namespace_name,
+                                            protected=False)
         self.assertEqual('private', body['visibility'])
         self.assertEqual(False, body['protected'])
         # now able to delete the non-protected namespace
-        self.client.delete_namespaces(namespace_name)
+        self.client.delete_namespace(namespace_name)
 
     def _cleanup_namespace(self, namespace_name):
         # this is used to cleanup the resources
         try:
-            body = self.client.show_namespaces(namespace_name)
+            body = self.client.show_namespace(namespace_name)
             self.assertEqual(namespace_name, body['namespace'])
-            body = self.client.update_namespaces(namespace=namespace_name,
-                                                 description='Tempest',
-                                                 visibility='private',
-                                                 display_name=namespace_name,
-                                                 protected=False)
-            self.client.delete_namespaces(namespace_name)
+            body = self.client.update_namespace(namespace=namespace_name,
+                                                description='Tempest',
+                                                visibility='private',
+                                                display_name=namespace_name,
+                                                protected=False)
+            self.client.delete_namespace(namespace_name)
         except lib_exc.NotFound:
             pass
diff --git a/tempest/api/messaging/base.py b/tempest/api/messaging/base.py
index 39dc7c3..528fbea 100644
--- a/tempest/api/messaging/base.py
+++ b/tempest/api/messaging/base.py
@@ -146,7 +146,7 @@
     @classmethod
     def release_claim(cls, claim_uri):
         """Wrapper utility that deletes a claim."""
-        resp, body = cls.client.release_claim(claim_uri)
+        resp, body = cls.client.delete_claim(claim_uri)
 
         return resp, body
 
diff --git a/tempest/api/messaging/test_claims.py b/tempest/api/messaging/test_claims.py
index e54bed1..57b8c7f 100644
--- a/tempest/api/messaging/test_claims.py
+++ b/tempest/api/messaging/test_claims.py
@@ -115,7 +115,7 @@
         claim_uri = resp['location']
 
         # Release Claim
-        self.client.release_claim(claim_uri)
+        self.client.delete_claim(claim_uri)
 
         # Delete Claimed message
         # This will implicitly verify that the claim is deleted.
diff --git a/tempest/api/network/admin/test_external_network_extension.py b/tempest/api/network/admin/test_external_network_extension.py
index fce63ac..a32bfbc 100644
--- a/tempest/api/network/admin/test_external_network_extension.py
+++ b/tempest/api/network/admin/test_external_network_extension.py
@@ -94,8 +94,6 @@
         # Verifies external network can be deleted while still holding
         # (unassociated) floating IPs
 
-        # Set cls.client to admin to use base.create_subnet()
-        client = self.admin_client
         body = self.admin_networks_client.create_network(
             **{'router:external': True})
         external_network = body['network']
@@ -105,19 +103,19 @@
         subnet = self.create_subnet(
             external_network, client=self.admin_subnets_client,
             enable_dhcp=False)
-        body = client.create_floatingip(
+        body = self.admin_floating_ips_client.create_floatingip(
             floating_network_id=external_network['id'])
         created_floating_ip = body['floatingip']
         self.addCleanup(self._try_delete_resource,
-                        client.delete_floatingip,
+                        self.admin_floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
-        floatingip_list = client.list_floatingips(
+        floatingip_list = self.admin_floating_ips_client.list_floatingips(
             network=external_network['id'])
         self.assertIn(created_floating_ip['id'],
                       (f['id'] for f in floatingip_list['floatingips']))
         self.admin_networks_client.delete_network(external_network['id'])
         # Verifies floating ip is deleted
-        floatingip_list = client.list_floatingips()
+        floatingip_list = self.admin_floating_ips_client.list_floatingips()
         self.assertNotIn(created_floating_ip['id'],
                          (f['id'] for f in floatingip_list['floatingips']))
         # Verifies subnet is deleted
diff --git a/tempest/api/network/admin/test_external_networks_negative.py b/tempest/api/network/admin/test_external_networks_negative.py
index 1e1573e..d031108 100644
--- a/tempest/api/network/admin/test_external_networks_negative.py
+++ b/tempest/api/network/admin/test_external_networks_negative.py
@@ -32,12 +32,11 @@
         # pre-created floating-ip should be denied.
 
         # create a floating ip
-        client = self.admin_client
-        body = client.create_floatingip(
+        body = self.admin_floating_ips_client.create_floatingip(
             floating_network_id=CONF.network.public_network_id)
         created_floating_ip = body['floatingip']
         self.addCleanup(self._try_delete_resource,
-                        client.delete_floatingip,
+                        self.admin_floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
         floating_ip_address = created_floating_ip['floating_ip_address']
         self.assertIsNotNone(floating_ip_address)
diff --git a/tempest/api/network/admin/test_floating_ips_admin_actions.py b/tempest/api/network/admin/test_floating_ips_admin_actions.py
index dfe7307..6ad374b 100644
--- a/tempest/api/network/admin/test_floating_ips_admin_actions.py
+++ b/tempest/api/network/admin/test_floating_ips_admin_actions.py
@@ -29,6 +29,7 @@
     def setup_clients(cls):
         super(FloatingIPAdminTestJSON, cls).setup_clients()
         cls.alt_client = cls.alt_manager.network_client
+        cls.alt_floating_ips_client = cls.alt_manager.floating_ips_client
 
     @classmethod
     def resource_setup(cls):
@@ -45,18 +46,18 @@
     @test.idempotent_id('64f2100b-5471-4ded-b46c-ddeeeb4f231b')
     def test_list_floating_ips_from_admin_and_nonadmin(self):
         # Create floating ip from admin user
-        floating_ip_admin = self.admin_client.create_floatingip(
+        floating_ip_admin = self.admin_floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id)
-        self.addCleanup(self.admin_client.delete_floatingip,
+        self.addCleanup(self.admin_floating_ips_client.delete_floatingip,
                         floating_ip_admin['floatingip']['id'])
         # Create floating ip from alt user
-        body = self.alt_client.create_floatingip(
+        body = self.alt_floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id)
         floating_ip_alt = body['floatingip']
-        self.addCleanup(self.alt_client.delete_floatingip,
+        self.addCleanup(self.alt_floating_ips_client.delete_floatingip,
                         floating_ip_alt['id'])
         # List floating ips from admin
-        body = self.admin_client.list_floatingips()
+        body = self.admin_floating_ips_client.list_floatingips()
         floating_ip_ids_admin = [f['id'] for f in body['floatingips']]
         # Check that admin sees all floating ips
         self.assertIn(self.floating_ip['id'], floating_ip_ids_admin)
@@ -64,7 +65,7 @@
                       floating_ip_ids_admin)
         self.assertIn(floating_ip_alt['id'], floating_ip_ids_admin)
         # List floating ips from nonadmin
-        body = self.client.list_floatingips()
+        body = self.floating_ips_client.list_floatingips()
         floating_ip_ids = [f['id'] for f in body['floatingips']]
         # Check that nonadmin user doesn't see floating ip created from admin
         # and floating ip that is created in another tenant (alt user)
@@ -76,12 +77,12 @@
     @test.idempotent_id('32727cc3-abe2-4485-a16e-48f2d54c14f2')
     def test_create_list_show_floating_ip_with_tenant_id_by_admin(self):
         # Creates a floating IP
-        body = self.admin_client.create_floatingip(
+        body = self.admin_floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id,
             tenant_id=self.network['tenant_id'],
             port_id=self.port['id'])
         created_floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip,
+        self.addCleanup(self.floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
         self.assertIsNotNone(created_floating_ip['id'])
         self.assertIsNotNone(created_floating_ip['tenant_id'])
@@ -93,7 +94,7 @@
         self.assertEqual(created_floating_ip['fixed_ip_address'],
                          port[0]['ip_address'])
         # Verifies the details of a floating_ip
-        floating_ip = self.admin_client.show_floatingip(
+        floating_ip = self.admin_floating_ips_client.show_floatingip(
             created_floating_ip['id'])
         shown_floating_ip = floating_ip['floatingip']
         self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
@@ -105,6 +106,6 @@
                          created_floating_ip['floating_ip_address'])
         self.assertEqual(shown_floating_ip['port_id'], self.port['id'])
         # Verify the floating ip exists in the list of all floating_ips
-        floating_ips = self.admin_client.list_floatingips()
+        floating_ips = self.admin_floating_ips_client.list_floatingips()
         floatingip_id_list = [f['id'] for f in floating_ips['floatingips']]
         self.assertIn(created_floating_ip['id'], floatingip_id_list)
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index 2c0b981..b798cb2 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -74,6 +74,7 @@
         cls.networks_client = cls.os.networks_client
         cls.subnets_client = cls.os.subnets_client
         cls.ports_client = cls.os.ports_client
+        cls.floating_ips_client = cls.os.floating_ips_client
 
     @classmethod
     def resource_setup(cls):
@@ -92,8 +93,9 @@
         if CONF.service_available.neutron:
             # Clean up floating IPs
             for floating_ip in cls.floating_ips:
-                cls._try_delete_resource(cls.client.delete_floatingip,
-                                         floating_ip['id'])
+                cls._try_delete_resource(
+                    cls.floating_ips_client.delete_floatingip,
+                    floating_ip['id'])
 
             # Clean up metering label rules
             for metering_label_rule in cls.metering_label_rules:
@@ -232,7 +234,7 @@
     @classmethod
     def create_floatingip(cls, external_network_id):
         """Wrapper utility that returns a test floating IP."""
-        body = cls.client.create_floatingip(
+        body = cls.floating_ips_client.create_floatingip(
             floating_network_id=external_network_id)
         fip = body['floatingip']
         cls.floating_ips.append(fip)
@@ -269,6 +271,7 @@
         cls.admin_networks_client = cls.os_adm.networks_client
         cls.admin_subnets_client = cls.os_adm.subnets_client
         cls.admin_ports_client = cls.os_adm.ports_client
+        cls.admin_floating_ips_client = cls.os_adm.floating_ips_client
 
     @classmethod
     def create_metering_label(cls, name, description):
diff --git a/tempest/api/network/test_dhcp_ipv6.py b/tempest/api/network/test_dhcp_ipv6.py
index ceb7906..74c1d51 100644
--- a/tempest/api/network/test_dhcp_ipv6.py
+++ b/tempest/api/network/test_dhcp_ipv6.py
@@ -126,7 +126,7 @@
         ):
             kwargs = {'ipv6_ra_mode': ra_mode,
                       'ipv6_address_mode': add_mode}
-            kwargs = {k: v for k, v in six.iteritems(kwargs) if v}
+            kwargs = dict((k, v) for k, v in six.iteritems(kwargs) if v)
             real_ip, eui_ip = self._get_ips_from_subnet(**kwargs)
             self._clean_network()
             self.assertEqual(eui_ip, real_ip,
@@ -269,7 +269,7 @@
         ):
             kwargs = {'ipv6_ra_mode': ra_mode,
                       'ipv6_address_mode': add_mode}
-            kwargs = {k: v for k, v in six.iteritems(kwargs) if v}
+            kwargs = dict((k, v) for k, v in six.iteritems(kwargs) if v)
             subnet = self.create_subnet(self.network, **kwargs)
             port = self.create_port(self.network)
             port_ip = next(iter(port['fixed_ips']), None)['ip_address']
@@ -291,7 +291,7 @@
         ):
             kwargs = {'ipv6_ra_mode': ra_mode,
                       'ipv6_address_mode': add_mode}
-            kwargs = {k: v for k, v in six.iteritems(kwargs) if v}
+            kwargs = dict((k, v) for k, v in six.iteritems(kwargs) if v)
             subnet = self.create_subnet(self.network, **kwargs)
             ip_range = netaddr.IPRange(subnet["allocation_pools"][0]["start"],
                                        subnet["allocation_pools"][0]["end"])
@@ -366,7 +366,7 @@
         ):
             kwargs = {'ipv6_ra_mode': ra_mode,
                       'ipv6_address_mode': add_mode}
-            kwargs = {k: v for k, v in six.iteritems(kwargs) if v}
+            kwargs = dict((k, v) for k, v in six.iteritems(kwargs) if v)
             subnet, port = self._create_subnet_router(kwargs)
             port_ip = next(iter(port['fixed_ips']), None)['ip_address']
             self._clean_network()
diff --git a/tempest/api/network/test_floating_ips.py b/tempest/api/network/test_floating_ips.py
index e9a553a..ce9c4be 100644
--- a/tempest/api/network/test_floating_ips.py
+++ b/tempest/api/network/test_floating_ips.py
@@ -68,11 +68,11 @@
     @test.idempotent_id('62595970-ab1c-4b7f-8fcc-fddfe55e8718')
     def test_create_list_show_update_delete_floating_ip(self):
         # Creates a floating IP
-        body = self.client.create_floatingip(
+        body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id,
             port_id=self.ports[0]['id'])
         created_floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip,
+        self.addCleanup(self.floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
         self.assertIsNotNone(created_floating_ip['id'])
         self.assertIsNotNone(created_floating_ip['tenant_id'])
@@ -83,7 +83,8 @@
         self.assertIn(created_floating_ip['fixed_ip_address'],
                       [ip['ip_address'] for ip in self.ports[0]['fixed_ips']])
         # Verifies the details of a floating_ip
-        floating_ip = self.client.show_floatingip(created_floating_ip['id'])
+        floating_ip = self.floating_ips_client.show_floatingip(
+            created_floating_ip['id'])
         shown_floating_ip = floating_ip['floatingip']
         self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
         self.assertEqual(shown_floating_ip['floating_network_id'],
@@ -95,13 +96,13 @@
         self.assertEqual(shown_floating_ip['port_id'], self.ports[0]['id'])
 
         # Verify the floating ip exists in the list of all floating_ips
-        floating_ips = self.client.list_floatingips()
+        floating_ips = self.floating_ips_client.list_floatingips()
         floatingip_id_list = list()
         for f in floating_ips['floatingips']:
             floatingip_id_list.append(f['id'])
         self.assertIn(created_floating_ip['id'], floatingip_id_list)
         # Associate floating IP to the other port
-        floating_ip = self.client.update_floatingip(
+        floating_ip = self.floating_ips_client.update_floatingip(
             created_floating_ip['id'],
             port_id=self.ports[1]['id'])
         updated_floating_ip = floating_ip['floatingip']
@@ -111,7 +112,7 @@
         self.assertEqual(updated_floating_ip['router_id'], self.router['id'])
 
         # Disassociate floating IP from the port
-        floating_ip = self.client.update_floatingip(
+        floating_ip = self.floating_ips_client.update_floatingip(
             created_floating_ip['id'],
             port_id=None)
         updated_floating_ip = floating_ip['floatingip']
@@ -122,21 +123,22 @@
     @test.idempotent_id('e1f6bffd-442f-4668-b30e-df13f2705e77')
     def test_floating_ip_delete_port(self):
         # Create a floating IP
-        body = self.client.create_floatingip(
+        body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id)
         created_floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip,
+        self.addCleanup(self.floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
         # Create a port
         port = self.ports_client.create_port(network_id=self.network['id'])
         created_port = port['port']
-        floating_ip = self.client.update_floatingip(
+        floating_ip = self.floating_ips_client.update_floatingip(
             created_floating_ip['id'],
             port_id=created_port['id'])
         # Delete port
         self.ports_client.delete_port(created_port['id'])
         # Verifies the details of the floating_ip
-        floating_ip = self.client.show_floatingip(created_floating_ip['id'])
+        floating_ip = self.floating_ips_client.show_floatingip(
+            created_floating_ip['id'])
         shown_floating_ip = floating_ip['floatingip']
         # Confirm the fields are back to None
         self.assertEqual(shown_floating_ip['id'], created_floating_ip['id'])
@@ -147,11 +149,11 @@
     @test.idempotent_id('1bb2f731-fe5a-4b8c-8409-799ade1bed4d')
     def test_floating_ip_update_different_router(self):
         # Associate a floating IP to a port on a router
-        body = self.client.create_floatingip(
+        body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id,
             port_id=self.ports[1]['id'])
         created_floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip,
+        self.addCleanup(self.floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
         self.assertEqual(created_floating_ip['router_id'], self.router['id'])
         network2 = self.create_network()
@@ -161,7 +163,7 @@
         self.create_router_interface(router2['id'], subnet2['id'])
         port_other_router = self.create_port(network2)
         # Associate floating IP to the other port on another router
-        floating_ip = self.client.update_floatingip(
+        floating_ip = self.floating_ips_client.update_floatingip(
             created_floating_ip['id'],
             port_id=port_other_router['id'])
         updated_floating_ip = floating_ip['floatingip']
@@ -173,17 +175,17 @@
     @test.attr(type='smoke')
     @test.idempotent_id('36de4bd0-f09c-43e3-a8e1-1decc1ffd3a5')
     def test_create_floating_ip_specifying_a_fixed_ip_address(self):
-        body = self.client.create_floatingip(
+        body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id,
             port_id=self.ports[1]['id'],
             fixed_ip_address=self.ports[1]['fixed_ips'][0]['ip_address'])
         created_floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip,
+        self.addCleanup(self.floating_ips_client.delete_floatingip,
                         created_floating_ip['id'])
         self.assertIsNotNone(created_floating_ip['id'])
         self.assertEqual(created_floating_ip['fixed_ip_address'],
                          self.ports[1]['fixed_ips'][0]['ip_address'])
-        floating_ip = self.client.update_floatingip(
+        floating_ip = self.floating_ips_client.update_floatingip(
             created_floating_ip['id'],
             port_id=None)
         self.assertIsNone(floating_ip['floatingip']['port_id'])
@@ -200,18 +202,19 @@
         port = body['port']
         self.addCleanup(self.ports_client.delete_port, port['id'])
         # Create floating ip
-        body = self.client.create_floatingip(
+        body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id,
             port_id=port['id'],
             fixed_ip_address=list_ips[0])
         floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip, floating_ip['id'])
+        self.addCleanup(self.floating_ips_client.delete_floatingip,
+                        floating_ip['id'])
         self.assertIsNotNone(floating_ip['id'])
         self.assertEqual(floating_ip['fixed_ip_address'], list_ips[0])
         # Update floating ip
-        body = self.client.update_floatingip(floating_ip['id'],
-                                             port_id=port['id'],
-                                             fixed_ip_address=list_ips[1])
+        body = self.floating_ips_client.update_floatingip(
+            floating_ip['id'], port_id=port['id'],
+            fixed_ip_address=list_ips[1])
         update_floating_ip = body['floatingip']
         self.assertEqual(update_floating_ip['fixed_ip_address'],
                          list_ips[1])
diff --git a/tempest/api/network/test_floating_ips_negative.py b/tempest/api/network/test_floating_ips_negative.py
index 5f56fec..f915615 100644
--- a/tempest/api/network/test_floating_ips_negative.py
+++ b/tempest/api/network/test_floating_ips_negative.py
@@ -53,17 +53,17 @@
     @test.attr(type=['negative'])
     @test.idempotent_id('22996ea8-4a81-4b27-b6e1-fa5df92fa5e8')
     def test_create_floatingip_with_port_ext_net_unreachable(self):
-        self.assertRaises(lib_exc.NotFound, self.client.create_floatingip,
-                          floating_network_id=self.ext_net_id,
-                          port_id=self.port['id'],
-                          fixed_ip_address=self.port['fixed_ips'][0]
-                                                    ['ip_address'])
+        self.assertRaises(
+            lib_exc.NotFound, self.floating_ips_client.create_floatingip,
+            floating_network_id=self.ext_net_id, port_id=self.port['id'],
+            fixed_ip_address=self.port['fixed_ips'][0]
+                                      ['ip_address'])
 
     @test.attr(type=['negative'])
     @test.idempotent_id('50b9aeb4-9f0b-48ee-aa31-fa955a48ff54')
     def test_create_floatingip_in_private_network(self):
         self.assertRaises(lib_exc.BadRequest,
-                          self.client.create_floatingip,
+                          self.floating_ips_client.create_floatingip,
                           floating_network_id=self.network['id'],
                           port_id=self.port['id'],
                           fixed_ip_address=self.port['fixed_ips'][0]
@@ -73,12 +73,13 @@
     @test.idempotent_id('6b3b8797-6d43-4191-985c-c48b773eb429')
     def test_associate_floatingip_port_ext_net_unreachable(self):
         # Create floating ip
-        body = self.client.create_floatingip(
+        body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id)
         floating_ip = body['floatingip']
-        self.addCleanup(self.client.delete_floatingip, floating_ip['id'])
+        self.addCleanup(
+            self.floating_ips_client.delete_floatingip, floating_ip['id'])
         # Associate floating IP to the other port
-        self.assertRaises(lib_exc.NotFound, self.client.update_floatingip,
-                          floating_ip['id'], port_id=self.port['id'],
-                          fixed_ip_address=self.port['fixed_ips'][0]
-                          ['ip_address'])
+        self.assertRaises(
+            lib_exc.NotFound, self.floating_ips_client.update_floatingip,
+            floating_ip['id'], port_id=self.port['id'],
+            fixed_ip_address=self.port['fixed_ips'][0]['ip_address'])
diff --git a/tempest/api/telemetry/base.py b/tempest/api/telemetry/base.py
index 81f00ec..bbd01f0 100644
--- a/tempest/api/telemetry/base.py
+++ b/tempest/api/telemetry/base.py
@@ -61,18 +61,9 @@
         cls.glance_v2_notifications = ['image.download', 'image.serve']
 
         cls.server_ids = []
-        cls.alarm_ids = []
         cls.image_ids = []
 
     @classmethod
-    def create_alarm(cls, **kwargs):
-        body = cls.telemetry_client.create_alarm(
-            name=data_utils.rand_name('telemetry_alarm'),
-            type='threshold', **kwargs)
-        cls.alarm_ids.append(body['alarm_id'])
-        return body
-
-    @classmethod
     def create_server(cls):
         tenant_network = cls.get_tenant_network()
         body, server = compute.create_test_server(
@@ -106,7 +97,6 @@
 
     @classmethod
     def resource_cleanup(cls):
-        cls.cleanup_resources(cls.telemetry_client.delete_alarm, cls.alarm_ids)
         cls.cleanup_resources(cls.servers_client.delete_server, cls.server_ids)
         cls.cleanup_resources(cls.image_client.delete_image, cls.image_ids)
         super(BaseTelemetryTest, cls).resource_cleanup()
@@ -153,3 +143,46 @@
         raise exceptions.TimeoutException(
             'Event with query:%s has not been added to the '
             'database within %d seconds' % (query, CONF.compute.build_timeout))
+
+
+class BaseAlarmingTest(tempest.test.BaseTestCase):
+    """Base test case class for all Alarming API tests."""
+
+    credentials = ['primary']
+
+    @classmethod
+    def skip_checks(cls):
+        super(BaseAlarmingTest, cls).skip_checks()
+        if not CONF.service_available.aodh:
+            raise cls.skipException("Aodh support is required")
+
+    @classmethod
+    def setup_clients(cls):
+        super(BaseAlarmingTest, cls).setup_clients()
+        cls.alarming_client = cls.os.alarming_client
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseAlarmingTest, cls).resource_setup()
+        cls.alarm_ids = []
+
+    @classmethod
+    def create_alarm(cls, **kwargs):
+        body = cls.alarming_client.create_alarm(
+            name=data_utils.rand_name('telemetry_alarm'),
+            type='threshold', **kwargs)
+        cls.alarm_ids.append(body['alarm_id'])
+        return body
+
+    @staticmethod
+    def cleanup_resources(method, list_of_ids):
+        for resource_id in list_of_ids:
+            try:
+                method(resource_id)
+            except lib_exc.NotFound:
+                pass
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.cleanup_resources(cls.alarming_client.delete_alarm, cls.alarm_ids)
+        super(BaseAlarmingTest, cls).resource_cleanup()
diff --git a/tempest/api/telemetry/test_telemetry_alarming_api.py b/tempest/api/telemetry/test_alarming_api.py
similarity index 80%
rename from tempest/api/telemetry/test_telemetry_alarming_api.py
rename to tempest/api/telemetry/test_alarming_api.py
index 6c84b98..daa0939 100644
--- a/tempest/api/telemetry/test_telemetry_alarming_api.py
+++ b/tempest/api/telemetry/test_alarming_api.py
@@ -17,7 +17,7 @@
 from tempest import test
 
 
-class TelemetryAlarmingAPITestJSON(base.BaseTelemetryTest):
+class TelemetryAlarmingAPITestJSON(base.BaseAlarmingTest):
 
     @classmethod
     def resource_setup(cls):
@@ -32,7 +32,7 @@
     @test.idempotent_id('1c918e06-210b-41eb-bd45-14676dd77cd6')
     def test_alarm_list(self):
         # List alarms
-        alarm_list = self.telemetry_client.list_alarms()
+        alarm_list = self.alarming_client.list_alarms()
 
         # Verify created alarm in the list
         fetched_ids = [a['alarm_id'] for a in alarm_list]
@@ -46,7 +46,7 @@
     def test_create_update_get_delete_alarm(self):
         # Create an alarm
         alarm_name = data_utils.rand_name('telemetry_alarm')
-        body = self.telemetry_client.create_alarm(
+        body = self.alarming_client.create_alarm(
             name=alarm_name, type='threshold', threshold_rule=self.rule)
         self.assertEqual(alarm_name, body['name'])
         alarm_id = body['alarm_id']
@@ -57,7 +57,7 @@
                     'threshold': 70.0,
                     'period': 60}
         alarm_name_updated = data_utils.rand_name('telemetry-alarm-update')
-        body = self.telemetry_client.update_alarm(
+        body = self.alarming_client.update_alarm(
             alarm_id,
             threshold_rule=new_rule,
             name=alarm_name_updated,
@@ -65,19 +65,19 @@
         self.assertEqual(alarm_name_updated, body['name'])
         self.assertDictContainsSubset(new_rule, body['threshold_rule'])
         # Get and verify details of an alarm after update
-        body = self.telemetry_client.show_alarm(alarm_id)
+        body = self.alarming_client.show_alarm(alarm_id)
         self.assertEqual(alarm_name_updated, body['name'])
         self.assertDictContainsSubset(new_rule, body['threshold_rule'])
         # Get history for the alarm and verify the same
-        body = self.telemetry_client.show_alarm_history(alarm_id)
+        body = self.alarming_client.show_alarm_history(alarm_id)
         self.assertEqual("rule change", body[0]['type'])
         self.assertIn(alarm_name_updated, body[0]['detail'])
         self.assertEqual("creation", body[1]['type'])
         self.assertIn(alarm_name, body[1]['detail'])
         # Delete alarm and verify if deleted
-        self.telemetry_client.delete_alarm(alarm_id)
+        self.alarming_client.delete_alarm(alarm_id)
         self.assertRaises(lib_exc.NotFound,
-                          self.telemetry_client.show_alarm, alarm_id)
+                          self.alarming_client.show_alarm, alarm_id)
 
     @test.idempotent_id('aca49486-70bb-4016-87e0-f6131374f741')
     def test_set_get_alarm_state(self):
@@ -86,11 +86,11 @@
         # Set alarm state and verify
         new_state =\
             [elem for elem in alarm_states if elem != alarm['state']][0]
-        state = self.telemetry_client.alarm_set_state(alarm['alarm_id'],
-                                                      new_state)
+        state = self.alarming_client.alarm_set_state(alarm['alarm_id'],
+                                                     new_state)
         self.assertEqual(new_state, state.data)
         # Get alarm state and verify
-        state = self.telemetry_client.show_alarm_state(alarm['alarm_id'])
+        state = self.alarming_client.show_alarm_state(alarm['alarm_id'])
         self.assertEqual(new_state, state.data)
 
     @test.idempotent_id('08d7e45a-1344-4e5c-ba6f-f6cbb77f55b9')
@@ -99,13 +99,13 @@
                 "operator": "or"}
         # Verifies alarm create
         alarm_name = data_utils.rand_name('combination_alarm')
-        body = self.telemetry_client.create_alarm(name=alarm_name,
-                                                  combination_rule=rule,
-                                                  type='combination')
+        body = self.alarming_client.create_alarm(name=alarm_name,
+                                                 combination_rule=rule,
+                                                 type='combination')
         self.assertEqual(alarm_name, body['name'])
         alarm_id = body['alarm_id']
         self.assertDictContainsSubset(rule, body['combination_rule'])
         # Verify alarm delete
-        self.telemetry_client.delete_alarm(alarm_id)
+        self.alarming_client.delete_alarm(alarm_id)
         self.assertRaises(lib_exc.NotFound,
-                          self.telemetry_client.show_alarm, alarm_id)
+                          self.alarming_client.show_alarm, alarm_id)
diff --git a/tempest/api/telemetry/test_alarming_api_negative.py b/tempest/api/telemetry/test_alarming_api_negative.py
index 06753b0..e945556 100644
--- a/tempest/api/telemetry/test_alarming_api_negative.py
+++ b/tempest/api/telemetry/test_alarming_api_negative.py
@@ -20,7 +20,7 @@
 import uuid
 
 
-class TelemetryAlarmingNegativeTest(base.BaseTelemetryTest):
+class TelemetryAlarmingNegativeTest(base.BaseAlarmingTest):
     """Negative tests for show_alarm, update_alarm, show_alarm_history tests
 
         ** show non-existent alarm
@@ -34,7 +34,7 @@
     def test_get_non_existent_alarm(self):
         # get the non-existent alarm
         non_existent_id = str(uuid.uuid4())
-        self.assertRaises(lib_exc.NotFound, self.telemetry_client.show_alarm,
+        self.assertRaises(lib_exc.NotFound, self.alarming_client.show_alarm,
                           non_existent_id)
 
     @test.attr(type=['negative'])
@@ -46,14 +46,14 @@
                 'comparison_operator': 'eq',
                 'threshold': 100.0,
                 'period': 90}
-        body = self.telemetry_client.create_alarm(
+        body = self.alarming_client.create_alarm(
             name=alarm_name,
             type='threshold',
             threshold_rule=rule)
         alarm_id = body['alarm_id']
-        self.telemetry_client.delete_alarm(alarm_id)
+        self.alarming_client.delete_alarm(alarm_id)
         # get the deleted alarm
-        self.assertRaises(lib_exc.NotFound, self.telemetry_client.show_alarm,
+        self.assertRaises(lib_exc.NotFound, self.alarming_client.show_alarm,
                           alarm_id)
 
         # update the deleted alarm
@@ -62,10 +62,10 @@
                         'comparison_operator': 'eq',
                         'threshold': 70,
                         'period': 50}
-        self.assertRaises(lib_exc.NotFound, self.telemetry_client.update_alarm,
+        self.assertRaises(lib_exc.NotFound, self.alarming_client.update_alarm,
                           alarm_id, threshold_rule=updated_rule,
                           name=updated_alarm_name,
                           type='threshold')
         # delete the deleted alarm
-        self.assertRaises(lib_exc.NotFound, self.telemetry_client.delete_alarm,
+        self.assertRaises(lib_exc.NotFound, self.alarming_client.delete_alarm,
                           alarm_id)
diff --git a/tempest/api/telemetry/test_telemetry_notification_api.py b/tempest/api/telemetry/test_telemetry_notification_api.py
index 31eff9d..7511505 100644
--- a/tempest/api/telemetry/test_telemetry_notification_api.py
+++ b/tempest/api/telemetry/test_telemetry_notification_api.py
@@ -58,7 +58,7 @@
         body = self.create_image(self.image_client_v2)
 
         self.image_client_v2.store_image_file(body['id'], "file")
-        self.image_client_v2.load_image_file(body['id'])
+        self.image_client_v2.show_image_file(body['id'])
 
         query = 'resource', 'eq', body['id']
 
diff --git a/tempest/api/volume/admin/test_multi_backend.py b/tempest/api/volume/admin/test_multi_backend.py
index 4337922..6d2aaea 100644
--- a/tempest/api/volume/admin/test_multi_backend.py
+++ b/tempest/api/volume/admin/test_multi_backend.py
@@ -11,7 +11,7 @@
 #    under the License.
 
 from oslo_log import log as logging
-
+import six
 from tempest.api.volume import base
 from tempest.common.utils import data_utils
 from tempest import config
@@ -34,9 +34,14 @@
     @classmethod
     def resource_setup(cls):
         super(VolumeMultiBackendV2Test, cls).resource_setup()
-
-        cls.backend1_name = CONF.volume.backend1_name
-        cls.backend2_name = CONF.volume.backend2_name
+        # support 2 backends names, deprecated_for_removal.
+        # keep support 2 backend names, in case they are not empty
+        if CONF.volume.backend1_name and CONF.volume.backend2_name:
+            cls.backend_names = {CONF.volume.backend1_name,
+                                 CONF.volume.backend2_name}
+        else:
+            # read backend name from a list .
+            cls.backend_names = set(CONF.volume.backend_names)
 
         cls.name_field = cls.special_fields['name_field']
         cls.volume_type_id_list = []
@@ -44,15 +49,15 @@
         cls.volume_id_list_without_prefix = []
 
         # Volume/Type creation (uses volume_backend_name)
-        cls._create_type_and_volume(cls.backend1_name, False)
-        # Volume/Type creation (uses capabilities:volume_backend_name)
-        cls._create_type_and_volume(cls.backend1_name, True)
-
-        if cls.backend1_name != cls.backend2_name:
-            # Volume/Type creation (uses backend2_name)
-            cls._create_type_and_volume(cls.backend2_name, False)
+        # It is not allowed to create the same backend name twice
+        if len(cls.backend_names) < 2:
+            raise cls.skipException("Requires at least two different "
+                                    "backend names")
+        for backend_name in cls.backend_names:
+            # Volume/Type creation (uses backend_name)
+            cls._create_type_and_volume(backend_name, False)
             # Volume/Type creation (uses capabilities:volume_backend_name)
-            cls._create_type_and_volume(cls.backend2_name, True)
+            cls._create_type_and_volume(backend_name, True)
 
     @classmethod
     def _create_type_and_volume(self, backend_name_key, with_prefix):
@@ -104,32 +109,28 @@
     @test.idempotent_id('c1a41f3f-9dad-493e-9f09-3ff197d477cc')
     def test_backend_name_reporting(self):
         # get volume id which created by type without prefix
-        volume_id = self.volume_id_list_without_prefix[0]
-        self._test_backend_name_reporting_by_volume_id(volume_id)
+        for volume_id in self.volume_id_list_without_prefix:
+            self._test_backend_name_reporting_by_volume_id(volume_id)
 
     @test.idempotent_id('f38e647f-ab42-4a31-a2e7-ca86a6485215')
     def test_backend_name_reporting_with_prefix(self):
         # get volume id which created by type with prefix
-        volume_id = self.volume_id_list_with_prefix[0]
-        self._test_backend_name_reporting_by_volume_id(volume_id)
+        for volume_id in self.volume_id_list_with_prefix:
+            self._test_backend_name_reporting_by_volume_id(volume_id)
 
     @test.idempotent_id('46435ab1-a0af-4401-8373-f14e66b0dd58')
     def test_backend_name_distinction(self):
-        if self.backend1_name == self.backend2_name:
-            raise self.skipException("backends configured with same name")
-        # get volume id which created by type without prefix
-        volume1_id = self.volume_id_list_without_prefix[0]
-        volume2_id = self.volume_id_list_without_prefix[1]
-        self._test_backend_name_distinction(volume1_id, volume2_id)
+        # get volume ids which created by type without prefix
+        self._test_backend_name_distinction(self.volume_id_list_without_prefix)
 
     @test.idempotent_id('4236305b-b65a-4bfc-a9d2-69cb5b2bf2ed')
     def test_backend_name_distinction_with_prefix(self):
-        if self.backend1_name == self.backend2_name:
-            raise self.skipException("backends configured with same name")
-        # get volume id which created by type without prefix
-        volume1_id = self.volume_id_list_with_prefix[0]
-        volume2_id = self.volume_id_list_with_prefix[1]
-        self._test_backend_name_distinction(volume1_id, volume2_id)
+        # get volume ids which created by type without prefix
+        self._test_backend_name_distinction(self.volume_id_list_with_prefix)
+
+    def _get_volume_host(self, volume_id):
+        return self.admin_volume_client.show_volume(
+            volume_id)['volume']['os-vol-host-attr:host']
 
     def _test_backend_name_reporting_by_volume_id(self, volume_id):
         # this test checks if os-vol-attr:host is populated correctly after
@@ -143,19 +144,16 @@
                volume_id)
         self.assertTrue(len(volume1_host.split("@")) > 1, msg)
 
-    def _test_backend_name_distinction(self, volume1_id, volume2_id):
-        # this test checks that the two volumes created at setUp don't
+    def _test_backend_name_distinction(self, volume_id_list):
+        # this test checks that the volumes created at setUp don't
         # belong to the same backend (if they are, than the
         # volume backend distinction is not working properly)
-        volume = self.admin_volume_client.show_volume(volume1_id)['volume']
-        volume1_host = volume['os-vol-host-attr:host']
-
-        volume = self.admin_volume_client.show_volume(volume2_id)['volume']
-        volume2_host = volume['os-vol-host-attr:host']
-
-        msg = ("volumes %s and %s were created in the same backend" %
-               (volume1_id, volume2_id))
-        self.assertNotEqual(volume1_host, volume2_host, msg)
+        volume_hosts = [self._get_volume_host(volume) for volume in
+                        volume_id_list]
+        # assert that volumes are each created on separate hosts:
+        msg = ("volumes %s were created in the same backend" % ", "
+               .join(volume_hosts))
+        six.assertCountEqual(self, volume_hosts, set(volume_hosts), msg)
 
 
 class VolumeMultiBackendV1Test(VolumeMultiBackendV2Test):
diff --git a/tempest/api_schema/response/compute/v2_1/images.py b/tempest/api_schema/response/compute/v2_1/images.py
deleted file mode 100644
index a513dcb..0000000
--- a/tempest/api_schema/response/compute/v2_1/images.py
+++ /dev/null
@@ -1,154 +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.
-
-import copy
-
-from tempest.api_schema.response.compute.v2_1 import parameter_types
-
-image_links = copy.deepcopy(parameter_types.links)
-image_links['items']['properties'].update({'type': {'type': 'string'}})
-
-common_image_schema = {
-    'type': 'object',
-    'properties': {
-        'id': {'type': 'string'},
-        'status': {'type': 'string'},
-        'updated': {'type': 'string'},
-        'links': image_links,
-        'name': {'type': 'string'},
-        'created': {'type': 'string'},
-        'minDisk': {'type': 'integer'},
-        'minRam': {'type': 'integer'},
-        'progress': {'type': 'integer'},
-        'metadata': {'type': 'object'},
-        'server': {
-            'type': 'object',
-            'properties': {
-                'id': {'type': 'string'},
-                'links': parameter_types.links
-            },
-            'additionalProperties': False,
-            'required': ['id', 'links']
-        },
-        'OS-EXT-IMG-SIZE:size': {'type': 'integer'},
-        'OS-DCF:diskConfig': {'type': 'string'}
-    },
-    'additionalProperties': False,
-    # 'server' attributes only comes in response body if image is
-    # associated with any server. 'OS-EXT-IMG-SIZE:size' & 'OS-DCF:diskConfig'
-    # are API extension,  So those are not defined as 'required'.
-    'required': ['id', 'status', 'updated', 'links', 'name',
-                 'created', 'minDisk', 'minRam', 'progress',
-                 'metadata']
-}
-
-get_image = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'image': common_image_schema
-        },
-        'additionalProperties': False,
-        'required': ['image']
-    }
-}
-
-list_images = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'images': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'id': {'type': 'string'},
-                        'links': image_links,
-                        'name': {'type': 'string'}
-                    },
-                    'additionalProperties': False,
-                    'required': ['id', 'links', 'name']
-                }
-            },
-            'images_links': parameter_types.links
-        },
-        'additionalProperties': False,
-        # NOTE(gmann): images_links attribute is not necessary to be
-        # present always So it is not 'required'.
-        'required': ['images']
-    }
-}
-
-create_image = {
-    'status_code': [202],
-    'response_header': {
-        'type': 'object',
-        'properties': parameter_types.response_header
-    }
-}
-create_image['response_header']['properties'].update(
-    {'location': {
-        'type': 'string',
-        'format': 'uri'}
-     }
-)
-create_image['response_header']['required'] = ['location']
-
-delete = {
-    'status_code': [204]
-}
-
-image_metadata = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'metadata': {'type': 'object'}
-        },
-        'additionalProperties': False,
-        'required': ['metadata']
-    }
-}
-
-image_meta_item = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'meta': {'type': 'object'}
-        },
-        'additionalProperties': False,
-        'required': ['meta']
-    }
-}
-
-list_images_details = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'images': {
-                'type': 'array',
-                'items': common_image_schema
-            },
-            'images_links': parameter_types.links
-        },
-        'additionalProperties': False,
-        # NOTE(gmann): images_links attribute is not necessary to be
-        # present always So it is not 'required'.
-        'required': ['images']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/instance_usage_audit_logs.py b/tempest/api_schema/response/compute/v2_1/instance_usage_audit_logs.py
deleted file mode 100644
index c6c4deb..0000000
--- a/tempest/api_schema/response/compute/v2_1/instance_usage_audit_logs.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright 2014 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-common_instance_usage_audit_log = {
-    'type': 'object',
-    'properties': {
-        'hosts_not_run': {
-            'type': 'array',
-            'items': {'type': 'string'}
-        },
-        'log': {'type': 'object'},
-        'num_hosts': {'type': 'integer'},
-        'num_hosts_done': {'type': 'integer'},
-        'num_hosts_not_run': {'type': 'integer'},
-        'num_hosts_running': {'type': 'integer'},
-        'overall_status': {'type': 'string'},
-        'period_beginning': {'type': 'string'},
-        'period_ending': {'type': 'string'},
-        'total_errors': {'type': 'integer'},
-        'total_instances': {'type': 'integer'}
-    },
-    'additionalProperties': False,
-    'required': ['hosts_not_run', 'log', 'num_hosts', 'num_hosts_done',
-                 'num_hosts_not_run', 'num_hosts_running', 'overall_status',
-                 'period_beginning', 'period_ending', 'total_errors',
-                 'total_instances']
-}
-
-get_instance_usage_audit_log = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'instance_usage_audit_log': common_instance_usage_audit_log
-        },
-        'additionalProperties': False,
-        'required': ['instance_usage_audit_log']
-    }
-}
-
-list_instance_usage_audit_log = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'instance_usage_audit_logs': common_instance_usage_audit_log
-        },
-        'additionalProperties': False,
-        'required': ['instance_usage_audit_logs']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/limits.py b/tempest/api_schema/response/compute/v2_1/limits.py
deleted file mode 100644
index 81f175f..0000000
--- a/tempest/api_schema/response/compute/v2_1/limits.py
+++ /dev/null
@@ -1,106 +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.
-
-get_limit = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'limits': {
-                'type': 'object',
-                'properties': {
-                    'absolute': {
-                        'type': 'object',
-                        'properties': {
-                            'maxTotalRAMSize': {'type': 'integer'},
-                            'totalCoresUsed': {'type': 'integer'},
-                            'maxTotalInstances': {'type': 'integer'},
-                            'maxTotalFloatingIps': {'type': 'integer'},
-                            'totalSecurityGroupsUsed': {'type': 'integer'},
-                            'maxTotalCores': {'type': 'integer'},
-                            'totalFloatingIpsUsed': {'type': 'integer'},
-                            'maxSecurityGroups': {'type': 'integer'},
-                            'maxServerMeta': {'type': 'integer'},
-                            'maxPersonality': {'type': 'integer'},
-                            'maxImageMeta': {'type': 'integer'},
-                            'maxPersonalitySize': {'type': 'integer'},
-                            'maxSecurityGroupRules': {'type': 'integer'},
-                            'maxTotalKeypairs': {'type': 'integer'},
-                            'totalRAMUsed': {'type': 'integer'},
-                            'totalInstancesUsed': {'type': 'integer'},
-                            'maxServerGroupMembers': {'type': 'integer'},
-                            'maxServerGroups': {'type': 'integer'},
-                            'totalServerGroupsUsed': {'type': 'integer'}
-                        },
-                        'additionalProperties': False,
-                        # NOTE(gmann): maxServerGroupMembers,  maxServerGroups
-                        # and totalServerGroupsUsed are API extension,
-                        # and some environments return a response without these
-                        # attributes.So they are not 'required'.
-                        'required': ['maxImageMeta',
-                                     'maxPersonality',
-                                     'maxPersonalitySize',
-                                     'maxSecurityGroupRules',
-                                     'maxSecurityGroups',
-                                     'maxServerMeta',
-                                     'maxTotalCores',
-                                     'maxTotalFloatingIps',
-                                     'maxTotalInstances',
-                                     'maxTotalKeypairs',
-                                     'maxTotalRAMSize',
-                                     'totalCoresUsed',
-                                     'totalFloatingIpsUsed',
-                                     'totalInstancesUsed',
-                                     'totalRAMUsed',
-                                     'totalSecurityGroupsUsed']
-                    },
-                    'rate': {
-                        'type': 'array',
-                        'items': {
-                            'type': 'object',
-                            'properties': {
-                                'limit': {
-                                    'type': 'array',
-                                    'items': {
-                                        'type': 'object',
-                                        'properties': {
-                                            'next-available':
-                                                {'type': 'string'},
-                                            'remaining':
-                                                {'type': 'integer'},
-                                            'unit':
-                                                {'type': 'string'},
-                                            'value':
-                                                {'type': 'integer'},
-                                            'verb':
-                                                {'type': 'string'}
-                                        },
-                                        'additionalProperties': False,
-                                    }
-                                },
-                                'regex': {'type': 'string'},
-                                'uri': {'type': 'string'}
-                            },
-                            'additionalProperties': False,
-                        }
-                    }
-                },
-                'additionalProperties': False,
-                'required': ['absolute', 'rate']
-            }
-        },
-        'additionalProperties': False,
-        'required': ['limits']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/migrations.py b/tempest/api_schema/response/compute/v2_1/migrations.py
deleted file mode 100644
index b7d66ea..0000000
--- a/tempest/api_schema/response/compute/v2_1/migrations.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2014 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-list_migrations = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'migrations': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'id': {'type': 'integer'},
-                        'status': {'type': ['string', 'null']},
-                        'instance_uuid': {'type': ['string', 'null']},
-                        'source_node': {'type': ['string', 'null']},
-                        'source_compute': {'type': ['string', 'null']},
-                        'dest_node': {'type': ['string', 'null']},
-                        'dest_compute': {'type': ['string', 'null']},
-                        'dest_host': {'type': ['string', 'null']},
-                        'old_instance_type_id': {'type': ['integer', 'null']},
-                        'new_instance_type_id': {'type': ['integer', 'null']},
-                        'created_at': {'type': 'string'},
-                        'updated_at': {'type': ['string', 'null']}
-                    },
-                    'additionalProperties': False,
-                    'required': [
-                        'id', 'status', 'instance_uuid', 'source_node',
-                        'source_compute', 'dest_node', 'dest_compute',
-                        'dest_host', 'old_instance_type_id',
-                        'new_instance_type_id', 'created_at', 'updated_at'
-                    ]
-                }
-            }
-        },
-        'additionalProperties': False,
-        'required': ['migrations']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/quota_classes.py b/tempest/api_schema/response/compute/v2_1/quota_classes.py
deleted file mode 100644
index a0cdaf5..0000000
--- a/tempest/api_schema/response/compute/v2_1/quota_classes.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2014 IBM 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 tempest.api_schema.response.compute.v2_1 import quotas
-
-# NOTE(mriedem): os-quota-class-sets responses are the same as os-quota-sets
-# except for the key in the response body is quota_class_set instead of
-# quota_set, so update this copy of the schema from os-quota-sets.
-get_quota_class_set = copy.deepcopy(quotas.get_quota_set)
-get_quota_class_set['response_body']['properties']['quota_class_set'] = (
-    get_quota_class_set['response_body']['properties'].pop('quota_set'))
-get_quota_class_set['response_body']['required'] = ['quota_class_set']
-
-update_quota_class_set = copy.deepcopy(quotas.update_quota_set)
-update_quota_class_set['response_body']['properties']['quota_class_set'] = (
-    update_quota_class_set['response_body']['properties'].pop('quota_set'))
-update_quota_class_set['response_body']['required'] = ['quota_class_set']
diff --git a/tempest/api_schema/response/compute/v2_1/quotas.py b/tempest/api_schema/response/compute/v2_1/quotas.py
deleted file mode 100644
index 7953983..0000000
--- a/tempest/api_schema/response/compute/v2_1/quotas.py
+++ /dev/null
@@ -1,65 +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.
-
-import copy
-
-update_quota_set = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'quota_set': {
-                'type': 'object',
-                'properties': {
-                    'instances': {'type': 'integer'},
-                    'cores': {'type': 'integer'},
-                    'ram': {'type': 'integer'},
-                    'floating_ips': {'type': 'integer'},
-                    'fixed_ips': {'type': 'integer'},
-                    'metadata_items': {'type': 'integer'},
-                    'key_pairs': {'type': 'integer'},
-                    'security_groups': {'type': 'integer'},
-                    'security_group_rules': {'type': 'integer'},
-                    'server_group_members': {'type': 'integer'},
-                    'server_groups': {'type': 'integer'},
-                    'injected_files': {'type': 'integer'},
-                    'injected_file_content_bytes': {'type': 'integer'},
-                    'injected_file_path_bytes': {'type': 'integer'}
-                },
-                'additionalProperties': False,
-                # NOTE: server_group_members and server_groups are represented
-                # when enabling quota_server_group extension. So they should
-                # not be required.
-                'required': ['instances', 'cores', 'ram',
-                             'floating_ips', 'fixed_ips',
-                             'metadata_items', 'key_pairs',
-                             'security_groups', 'security_group_rules',
-                             'injected_files', 'injected_file_content_bytes',
-                             'injected_file_path_bytes']
-            }
-        },
-        'additionalProperties': False,
-        'required': ['quota_set']
-    }
-}
-
-get_quota_set = copy.deepcopy(update_quota_set)
-get_quota_set['response_body']['properties']['quota_set']['properties'][
-    'id'] = {'type': 'string'}
-get_quota_set['response_body']['properties']['quota_set']['required'].extend([
-    'id'])
-
-delete_quota = {
-    'status_code': [202]
-}
diff --git a/tempest/api_schema/response/compute/v2_1/security_group_default_rule.py b/tempest/api_schema/response/compute/v2_1/security_group_default_rule.py
deleted file mode 100644
index 2ec2826..0000000
--- a/tempest/api_schema/response/compute/v2_1/security_group_default_rule.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 2014 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-common_security_group_default_rule_info = {
-    'type': 'object',
-    'properties': {
-        'from_port': {'type': 'integer'},
-        'id': {'type': 'integer'},
-        'ip_protocol': {'type': 'string'},
-        'ip_range': {
-            'type': 'object',
-            'properties': {
-                'cidr': {'type': 'string'}
-            },
-            'additionalProperties': False,
-            'required': ['cidr'],
-        },
-        'to_port': {'type': 'integer'},
-    },
-    'additionalProperties': False,
-    'required': ['from_port', 'id', 'ip_protocol', 'ip_range', 'to_port'],
-}
-
-create_get_security_group_default_rule = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'security_group_default_rule':
-                common_security_group_default_rule_info
-        },
-        'additionalProperties': False,
-        'required': ['security_group_default_rule']
-    }
-}
-
-delete_security_group_default_rule = {
-    'status_code': [204]
-}
-
-list_security_group_default_rules = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'security_group_default_rules': {
-                'type': 'array',
-                'items': common_security_group_default_rule_info
-            }
-        },
-        'additionalProperties': False,
-        'required': ['security_group_default_rules']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/servers.py b/tempest/api_schema/response/compute/v2_1/servers.py
index 9593f3c..38f7c82 100644
--- a/tempest/api_schema/response/compute/v2_1/servers.py
+++ b/tempest/api_schema/response/compute/v2_1/servers.py
@@ -291,8 +291,8 @@
     'status_code': [202]
 }
 
-get_volume_attachment = copy.deepcopy(attach_volume)
-get_volume_attachment['response_body']['properties'][
+show_volume_attachment = copy.deepcopy(attach_volume)
+show_volume_attachment['response_body']['properties'][
     'volumeAttachment']['properties'].update({'serverId': {'type': 'string'}})
 
 list_volume_attachments = {
@@ -436,7 +436,7 @@
 # 'events' does not come in response body always so it is not
 # defined as 'required'
 
-get_instance_action = {
+show_instance_action = {
     'status_code': [200],
     'response_body': {
         'type': 'object',
@@ -448,7 +448,7 @@
     }
 }
 
-get_password = {
+show_password = {
     'status_code': [200],
     'response_body': {
         'type': 'object',
@@ -520,7 +520,7 @@
     'status_code': [204]
 }
 
-set_get_server_metadata_item = {
+set_show_server_metadata_item = {
     'status_code': [200],
     'response_body': {
         'type': 'object',
diff --git a/tempest/api_schema/response/compute/v2_1/services.py b/tempest/api_schema/response/compute/v2_1/services.py
deleted file mode 100644
index ddef7b2..0000000
--- a/tempest/api_schema/response/compute/v2_1/services.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 2014 NEC Corporation.  All rights reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-list_services = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'services': {
-                'type': 'array',
-                'items': {
-                    'type': 'object',
-                    'properties': {
-                        'id': {'type': ['integer', 'string'],
-                               'pattern': '^[a-zA-Z!]*@[0-9]+$'},
-                        'zone': {'type': 'string'},
-                        'host': {'type': 'string'},
-                        'state': {'type': 'string'},
-                        'binary': {'type': 'string'},
-                        'status': {'type': 'string'},
-                        'updated_at': {'type': ['string', 'null']},
-                        'disabled_reason': {'type': ['string', 'null']}
-                    },
-                    'additionalProperties': False,
-                    'required': ['id', 'zone', 'host', 'state', 'binary',
-                                 'status', 'updated_at', 'disabled_reason']
-                }
-            }
-        },
-        'additionalProperties': False,
-        'required': ['services']
-    }
-}
-
-enable_disable_service = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'service': {
-                'type': 'object',
-                'properties': {
-                    'status': {'type': 'string'},
-                    'binary': {'type': 'string'},
-                    'host': {'type': 'string'}
-                },
-                'additionalProperties': False,
-                'required': ['status', 'binary', 'host']
-            }
-        },
-        'additionalProperties': False,
-        'required': ['service']
-    }
-}
diff --git a/tempest/api_schema/response/compute/v2_1/snapshots.py b/tempest/api_schema/response/compute/v2_1/snapshots.py
deleted file mode 100644
index 01a524b..0000000
--- a/tempest/api_schema/response/compute/v2_1/snapshots.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2015 Fujitsu(fnst) Corporation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-common_snapshot_info = {
-    'type': 'object',
-    'properties': {
-        'id': {'type': 'string'},
-        'volumeId': {'type': 'string'},
-        'status': {'type': 'string'},
-        'size': {'type': 'integer'},
-        'createdAt': {'type': 'string'},
-        'displayName': {'type': ['string', 'null']},
-        'displayDescription': {'type': ['string', 'null']}
-    },
-    'additionalProperties': False,
-    'required': ['id', 'volumeId', 'status', 'size',
-                 'createdAt', 'displayName', 'displayDescription']
-}
-
-create_get_snapshot = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'snapshot': common_snapshot_info
-        },
-        'additionalProperties': False,
-        'required': ['snapshot']
-    }
-}
-
-list_snapshots = {
-    'status_code': [200],
-    'response_body': {
-        'type': 'object',
-        'properties': {
-            'snapshots': {
-                'type': 'array',
-                'items': common_snapshot_info
-            }
-        },
-        'additionalProperties': False,
-        'required': ['snapshots']
-    }
-}
-
-delete_snapshot = {
-    'status_code': [202]
-}
diff --git a/tempest/clients.py b/tempest/clients.py
index 3fb4c22..ded94b2 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -35,6 +35,23 @@
 from tempest_lib.services.compute.hosts_client import HostsClient
 from tempest_lib.services.compute.hypervisor_client import \
     HypervisorClient
+from tempest_lib.services.compute.images_client import ImagesClient
+from tempest_lib.services.compute.instance_usage_audit_log_client import \
+    InstanceUsagesAuditLogClient
+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 \
+    as ComputeNetworksClient
+from tempest_lib.services.compute.quota_classes_client import \
+    QuotaClassesClient
+from tempest_lib.services.compute.quotas_client import QuotasClient
+from tempest_lib.services.compute.security_group_default_rules_client import \
+    SecurityGroupDefaultRulesClient
+from tempest_lib.services.compute.security_groups_client import \
+    SecurityGroupsClient
+from tempest_lib.services.compute.services_client import ServicesClient
+from tempest_lib.services.compute.snapshots_client import \
+    SnapshotsClient as ComputeSnapshotsClient
 from tempest_lib.services.identity.v2.token_client import TokenClient
 from tempest_lib.services.identity.v3.token_client import V3TokenClient
 
@@ -47,32 +64,14 @@
 from tempest.services import botoclients
 from tempest.services.compute.json.floating_ips_client import \
     FloatingIPsClient as ComputeFloatingIPsClient
-from tempest.services.compute.json.images_client import ImagesClient
-from tempest.services.compute.json.instance_usage_audit_log_client import \
-    InstanceUsagesAuditLogClient
 from tempest.services.compute.json.interfaces_client import \
     InterfacesClient
 from tempest.services.compute.json.keypairs_client import KeyPairsClient
-from tempest.services.compute.json.limits_client import LimitsClient
-from tempest.services.compute.json.migrations_client import \
-    MigrationsClient
-from tempest.services.compute.json.networks_client import NetworksClient \
-    as ComputeNetworksClient
-from tempest.services.compute.json.quota_classes_client import \
-    QuotaClassesClient
-from tempest.services.compute.json.quotas_client import QuotasClient
-from tempest.services.compute.json.security_group_default_rules_client import \
-    SecurityGroupDefaultRulesClient
 from tempest.services.compute.json.security_group_rules_client import \
     SecurityGroupRulesClient
-from tempest.services.compute.json.security_groups_client import \
-    SecurityGroupsClient
 from tempest.services.compute.json.server_groups_client import \
     ServerGroupsClient
 from tempest.services.compute.json.servers_client import ServersClient
-from tempest.services.compute.json.services_client import ServicesClient
-from tempest.services.compute.json.snapshots_client import \
-    SnapshotsClient as ComputeSnapshotsClient
 from tempest.services.compute.json.tenant_networks_client import \
     TenantNetworksClient
 from tempest.services.compute.json.tenant_usages_client import \
@@ -91,19 +90,23 @@
 from tempest.services.identity.v2.json.identity_client import \
     IdentityClient
 from tempest.services.identity.v3.json.credentials_client import \
-    CredentialsClient
+    CredentialsClient as CredentialsV3Client
 from tempest.services.identity.v3.json.endpoints_client import \
-    EndPointClient
-from tempest.services.identity.v3.json.identity_client import \
-    IdentityV3Client
-from tempest.services.identity.v3.json.policy_client import PolicyClient
-from tempest.services.identity.v3.json.region_client import RegionClient
+    EndPointClient as EndPointV3Client
+from tempest.services.identity.v3.json.groups_client import \
+    GroupsClient as GroupsV3Client
+from tempest.services.identity.v3.json.identity_client import IdentityV3Client
+from tempest.services.identity.v3.json.policy_client import \
+    PolicyClient as PolicyV3Client
+from tempest.services.identity.v3.json.region_client import \
+    RegionClient as RegionV3Client
 from tempest.services.identity.v3.json.service_client import \
-    ServiceClient
+    ServiceClient as ServiceV3Client
 from tempest.services.image.v1.json.image_client import ImageClient
 from tempest.services.image.v2.json.image_client import ImageClientV2
 from tempest.services.messaging.json.messaging_client import \
     MessagingClient
+from tempest.services.network.json.floating_ips_client import FloatingIPsClient
 from tempest.services.network.json.network_client import NetworkClient
 from tempest.services.network.json.networks_client import NetworksClient
 from tempest.services.network.json.ports_client import PortsClient
@@ -113,6 +116,7 @@
 from tempest.services.object_storage.object_client import ObjectClient
 from tempest.services.orchestration.json.orchestration_client import \
     OrchestrationClient
+from tempest.services.telemetry.json.alarming_client import AlarmingClient
 from tempest.services.telemetry.json.telemetry_client import \
     TelemetryClient
 from tempest.services.volume.json.admin.volume_hosts_client import \
@@ -218,6 +222,14 @@
             build_interval=CONF.network.build_interval,
             build_timeout=CONF.network.build_timeout,
             **self.default_params)
+        self.floating_ips_client = FloatingIPsClient(
+            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,
@@ -230,6 +242,13 @@
                 CONF.identity.region,
                 endpoint_type=CONF.telemetry.endpoint_type,
                 **self.default_params_with_timeout_values)
+        if CONF.service_available.aodh:
+            self.alarming_client = AlarmingClient(
+                self.auth_provider,
+                CONF.alarming.catalog_type,
+                CONF.identity.region,
+                endpoint_type=CONF.alarming.endpoint_type,
+                **self.default_params_with_timeout_values)
         if CONF.service_available.glance:
             self.image_client = ImageClient(
                 self.auth_provider,
@@ -389,16 +408,17 @@
                                                      **params_v2_public)
         params_v3 = params.copy()
         params_v3['endpoint_type'] = CONF.identity.v3_endpoint_type
-        # Client uses the endpoint type of Keystone API v3
+        # Clients below use the endpoint type of Keystone API v3
         self.identity_v3_client = IdentityV3Client(self.auth_provider,
                                                    **params_v3)
-        self.endpoints_client = EndPointClient(self.auth_provider,
-                                               **params)
-        self.service_client = ServiceClient(self.auth_provider, **params)
-        self.policy_client = PolicyClient(self.auth_provider, **params)
-        self.region_client = RegionClient(self.auth_provider, **params)
-        self.credentials_client = CredentialsClient(self.auth_provider,
-                                                    **params)
+        self.endpoints_client = EndPointV3Client(self.auth_provider,
+                                                 **params_v3)
+        self.service_client = ServiceV3Client(self.auth_provider, **params_v3)
+        self.policy_client = PolicyV3Client(self.auth_provider, **params_v3)
+        self.region_client = RegionV3Client(self.auth_provider, **params_v3)
+        self.credentials_client = CredentialsV3Client(self.auth_provider,
+                                                      **params_v3)
+        self.groups_client = GroupsV3Client(self.auth_provider, **params_v3)
         # Token clients do not use the catalog. They only need default_params.
         # They read auth_url, so they should only be set if the corresponding
         # API version is marked as enabled
diff --git a/tempest/cmd/account_generator.py b/tempest/cmd/account_generator.py
index a90b0ce..613fb26 100755
--- a/tempest/cmd/account_generator.py
+++ b/tempest/cmd/account_generator.py
@@ -89,6 +89,7 @@
 from oslo_log import log as logging
 import yaml
 
+from tempest.common import identity
 from tempest import config
 from tempest import exceptions as exc
 from tempest.services.identity.v2.json import identity_client
@@ -188,13 +189,14 @@
     LOG.info('Tenants created')
     for u in resources['users']:
         try:
-            tenant = identity_admin.get_tenant_by_name(u['tenant'])
+            tenant = identity.get_tenant_by_name(identity_admin, u['tenant'])
         except tempest_lib.exceptions.NotFound:
             LOG.error("Tenant: %s - not found" % u['tenant'])
             continue
         while True:
             try:
-                identity_admin.get_user_by_username(tenant['id'], u['name'])
+                identity.get_user_by_username(identity_admin,
+                                              tenant['id'], u['name'])
             except tempest_lib.exceptions.NotFound:
                 identity_admin.create_user(
                     u['name'], u['pass'], tenant['id'],
@@ -209,7 +211,7 @@
     LOG.info('Users created')
     if neutron_iso_networks:
         for u in resources['users']:
-            tenant = identity_admin.get_tenant_by_name(u['tenant'])
+            tenant = identity.get_tenant_by_name(identity_admin, u['tenant'])
             network_name, router_name = create_network_resources(
                 network_admin, networks_admin, subnets_admin, tenant['id'],
                 u['name'])
@@ -218,13 +220,13 @@
         LOG.info('Networks created')
     for u in resources['users']:
         try:
-            tenant = identity_admin.get_tenant_by_name(u['tenant'])
+            tenant = identity.get_tenant_by_name(identity_admin, u['tenant'])
         except tempest_lib.exceptions.NotFound:
             LOG.error("Tenant: %s - not found" % u['tenant'])
             continue
         try:
-            user = identity_admin.get_user_by_username(tenant['id'],
-                                                       u['name'])
+            user = identity.get_user_by_username(identity_admin,
+                                                 tenant['id'], u['name'])
         except tempest_lib.exceptions.NotFound:
             LOG.error("User: %s - not found" % u['user'])
             continue
diff --git a/tempest/cmd/cleanup.py b/tempest/cmd/cleanup.py
index 239b4e9..1c8ddcb 100644
--- a/tempest/cmd/cleanup.py
+++ b/tempest/cmd/cleanup.py
@@ -59,6 +59,7 @@
 from tempest import clients
 from tempest.cmd import cleanup_service
 from tempest.common import credentials_factory as credentials
+from tempest.common import identity
 from tempest import config
 
 SAVED_STATE_JSON = "saved_state.json"
@@ -177,11 +178,12 @@
     def _init_admin_ids(self):
         id_cl = self.admin_mgr.identity_client
 
-        tenant = id_cl.get_tenant_by_name(CONF.auth.admin_tenant_name)
+        tenant = identity.get_tenant_by_name(id_cl,
+                                             CONF.auth.admin_tenant_name)
         self.admin_tenant_id = tenant['id']
 
-        user = id_cl.get_user_by_username(self.admin_tenant_id,
-                                          CONF.auth.admin_username)
+        user = identity.get_user_by_username(id_cl, self.admin_tenant_id,
+                                             CONF.auth.admin_username)
         self.admin_id = user['id']
 
         roles = id_cl.list_roles()['roles']
@@ -238,7 +240,7 @@
         id_cl = credentials.AdminManager().identity_client
         if (self._tenant_exists(tenant_id)):
             try:
-                id_cl.remove_user_role(tenant_id, self.admin_id,
+                id_cl.delete_user_role(tenant_id, self.admin_id,
                                        self.admin_role_id)
             except Exception as ex:
                 LOG.exception("Failed removing role from tenant which still"
diff --git a/tempest/cmd/cleanup_service.py b/tempest/cmd/cleanup_service.py
index d2f6c03..ba6bf6c 100644
--- a/tempest/cmd/cleanup_service.py
+++ b/tempest/cmd/cleanup_service.py
@@ -17,6 +17,7 @@
 from oslo_log import log as logging
 
 from tempest.common import credentials_factory as credentials
+from tempest.common import identity
 from tempest import config
 from tempest import test
 
@@ -87,7 +88,7 @@
     id_cl = am.identity_client
 
     networks = net_cl.list_networks()
-    tenant = id_cl.get_tenant_by_name(tenant_name)
+    tenant = identity.get_tenant_by_name(id_cl, tenant_name)
     t_id = tenant['id']
     n_id = None
     for net in networks['networks']:
@@ -385,6 +386,7 @@
         self.networks_client = manager.networks_client
         self.subnets_client = manager.subnets_client
         self.ports_client = manager.ports_client
+        self.floating_ips_client = manager.floating_ips_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)):
@@ -421,7 +423,7 @@
 class NetworkFloatingIpService(NetworkService):
 
     def list(self):
-        client = self.client
+        client = self.floating_ips_client
         flips = client.list_floatingips(**self.tenant_filter)
         flips = flips['floatingips']
         LOG.debug("List count, %s Network Floating IPs" % len(flips))
diff --git a/tempest/cmd/javelin.py b/tempest/cmd/javelin.py
index 97d431a..184bb9a 100755
--- a/tempest/cmd/javelin.py
+++ b/tempest/cmd/javelin.py
@@ -118,13 +118,14 @@
 from tempest_lib import auth
 from tempest_lib import exceptions as lib_exc
 from tempest_lib.services.compute import flavors_client
+from tempest_lib.services.compute import security_groups_client
 import yaml
 
+from tempest.common import identity
 from tempest.common import waiters
 from tempest import config
 from tempest.services.compute.json import floating_ips_client
 from tempest.services.compute.json import security_group_rules_client
-from tempest.services.compute.json import security_groups_client
 from tempest.services.compute.json import servers_client
 from tempest.services.identity.v2.json import identity_client
 from tempest.services.image.v2.json import image_client
@@ -132,6 +133,7 @@
 from tempest.services.network.json import subnets_client
 from tempest.services.object_storage import container_client
 from tempest.services.object_storage import object_client
+from tempest.services.telemetry.json import alarming_client
 from tempest.services.telemetry.json import telemetry_client
 from tempest.services.volume.json import volumes_client
 
@@ -225,6 +227,12 @@
             CONF.identity.region,
             endpoint_type=CONF.telemetry.endpoint_type,
             **default_params_with_timeout_values)
+        self.alarming = alarming_client.AlarmingClient(
+            _auth,
+            CONF.alarm.catalog_type,
+            CONF.identity.region,
+            endpoint_type=CONF.alarm.endpoint_type,
+            **default_params_with_timeout_values)
         self.volumes = volumes_client.VolumesClient(
             _auth,
             CONF.volume.catalog_type,
@@ -295,7 +303,7 @@
 def destroy_tenants(tenants):
     admin = keystone_admin()
     for tenant in tenants:
-        tenant_id = admin.identity.get_tenant_by_name(tenant)['id']
+        tenant_id = identity.get_tenant_by_name(admin.identity, tenant)['id']
         admin.identity.delete_tenant(tenant_id)
 
 ##############
@@ -347,12 +355,13 @@
     admin = keystone_admin()
     for u in users:
         try:
-            tenant = admin.identity.get_tenant_by_name(u['tenant'])
+            tenant = identity.get_tenant_by_name(admin.identity, u['tenant'])
         except lib_exc.NotFound:
             LOG.error("Tenant: %s - not found" % u['tenant'])
             continue
         try:
-            admin.identity.get_user_by_username(tenant['id'], u['name'])
+            identity.get_user_by_username(admin.identity,
+                                          tenant['id'], u['name'])
             LOG.warn("User '%s' already exists in this environment"
                      % u['name'])
         except lib_exc.NotFound:
@@ -365,9 +374,10 @@
 def destroy_users(users):
     admin = keystone_admin()
     for user in users:
-        tenant_id = admin.identity.get_tenant_by_name(user['tenant'])['id']
-        user_id = admin.identity.get_user_by_username(tenant_id,
-                                                      user['name'])['id']
+        tenant_id = identity.get_tenant_by_name(admin.identity,
+                                                user['tenant'])['id']
+        user_id = identity.get_user_by_username(admin.identity,
+                                                tenant_id, user['name'])['id']
         admin.identity.delete_user(user_id)
 
 
@@ -376,10 +386,11 @@
     LOG.info("Collecting users")
     admin = keystone_admin()
     for u in users:
-        tenant = admin.identity.get_tenant_by_name(u['tenant'])
+        tenant = identity.get_tenant_by_name(admin.identity, u['tenant'])
         u['tenant_id'] = tenant['id']
         USERS[u['name']] = u
-        body = admin.identity.get_user_by_username(tenant['id'], u['name'])
+        body = identity.get_user_by_username(admin.identity,
+                                             tenant['id'], u['name'])
         USERS[u['name']]['id'] = body['id']
 
 
diff --git a/tempest/common/credentials_factory.py b/tempest/common/credentials_factory.py
index 38bde2e..95dcafc 100644
--- a/tempest/common/credentials_factory.py
+++ b/tempest/common/credentials_factory.py
@@ -13,6 +13,7 @@
 
 import os
 
+from oslo_concurrency import lockutils
 from oslo_log import log as logging
 from tempest_lib import auth
 
@@ -42,6 +43,29 @@
 # === Credential Providers
 
 
+# Subset of the parameters of credential providers that depend on configuration
+def _get_common_provider_params():
+    return {
+        'credentials_domain': CONF.auth.default_credentials_domain_name,
+        'admin_role': CONF.identity.admin_role
+    }
+
+
+def _get_dynamic_provider_params():
+    return _get_common_provider_params()
+
+
+def _get_preprov_provider_params():
+    _common_params = _get_common_provider_params()
+    reseller_admin_role = CONF.object_storage.reseller_admin_role
+    return dict(_common_params, **dict([
+        ('accounts_lock_dir', lockutils.get_lock_path(CONF)),
+        ('test_accounts_file', CONF.auth.test_accounts_file),
+        ('object_storage_operator_role', CONF.object_storage.operator_role),
+        ('object_storage_reseller_admin_role', reseller_admin_role)
+    ]))
+
+
 class LegacyCredentialProvider(cred_provider.CredentialProvider):
 
     def __init__(self, identity_version):
@@ -143,17 +167,15 @@
             name=name,
             network_resources=network_resources,
             identity_version=identity_version,
-            credentials_domain=CONF.auth.default_credentials_domain_name,
-            admin_role=CONF.identity.admin_role,
-            admin_creds=admin_creds)
+            admin_creds=admin_creds,
+            **_get_dynamic_provider_params())
     else:
         if (CONF.auth.test_accounts_file and
                 os.path.isfile(CONF.auth.test_accounts_file)):
             # Most params are not relevant for pre-created accounts
             return preprov_creds.PreProvisionedCredentialProvider(
                 name=name, identity_version=identity_version,
-                credentials_domain=CONF.auth.default_credentials_domain_name,
-                admin_role=CONF.identity.admin_role)
+                **_get_preprov_provider_params())
         else:
             # Dynamic credentials are disabled, and the account file is not
             # defined - we fall back on credentials configured in tempest.conf
@@ -175,7 +197,7 @@
             os.path.isfile(CONF.auth.test_accounts_file)):
         check_accounts = preprov_creds.PreProvisionedCredentialProvider(
             identity_version=identity_version, name='check_admin',
-            admin_role=CONF.identity.admin_role)
+            **_get_preprov_provider_params())
         if not check_accounts.admin_available():
             is_admin = False
     else:
@@ -201,7 +223,7 @@
             os.path.isfile(CONF.auth.test_accounts_file)):
         check_accounts = preprov_creds.PreProvisionedCredentialProvider(
             identity_version=identity_version, name='check_alt',
-            admin_role=CONF.identity.admin_role)
+            **_get_preprov_provider_params())
     else:
         check_accounts = LegacyCredentialProvider(identity_version)
     try:
diff --git a/tempest/common/fixed_network.py b/tempest/common/fixed_network.py
index b81830a..1928a22 100644
--- a/tempest/common/fixed_network.py
+++ b/tempest/common/fixed_network.py
@@ -15,11 +15,8 @@
 
 from tempest_lib.common.utils import misc as misc_utils
 
-from tempest import config
 from tempest import exceptions
 
-CONF = config.CONF
-
 LOG = logging.getLogger(__name__)
 
 
@@ -31,14 +28,14 @@
         object to use for making the network lists api request
     :return: The full dictionary for the network in question
     :rtype: dict
-    :raises InvalidConfiguration: If the name provided is invalid, the networks
+    :raises InvalidTestResource: If the name provided is invalid, the networks
         list returns a 404, there are no found networks, or the found network
         is invalid
     """
     caller = misc_utils.find_test_caller()
 
     if not name:
-        raise exceptions.InvalidConfiguration()
+        raise exceptions.InvalidTestResource(type='network', name=name)
 
     networks = compute_networks_client.list_networks()['networks']
     networks = [n for n in networks if n['label'] == name]
@@ -53,13 +50,13 @@
         if caller:
             msg = '(%s) %s' % (caller, msg)
         LOG.warn(msg)
-        raise exceptions.InvalidConfiguration()
+        raise exceptions.InvalidTestResource(type='network', name=name)
     else:
         msg = "Network with name: %s not found" % name
         if caller:
             msg = '(%s) %s' % (caller, msg)
         LOG.warn(msg)
-        raise exceptions.InvalidConfiguration()
+        raise exceptions.InvalidTestResource(type='network', name=name)
     # To be consistent between neutron and nova network always use name even
     # if label is used in the api response. If neither is present than then
     # the returned network is invalid.
@@ -69,12 +66,13 @@
         if caller:
             msg = '(%s) %s' % (caller, msg)
         LOG.warn(msg)
-        raise exceptions.InvalidConfiguration()
+        raise exceptions.InvalidTestResource(type='network', name=name)
     network['name'] = name
     return network
 
 
-def get_tenant_network(creds_provider, compute_networks_client):
+def get_tenant_network(creds_provider, compute_networks_client,
+                       shared_network_name):
     """Get a network usable by the primary tenant
 
     :param creds_provider: instance of credential provider
@@ -83,23 +81,24 @@
            neutron and nova-network cases. If this is not an admin network
            client, set_network_kwargs might fail in case fixed_network_name
            is the network to be used, and it's not visible to the tenant
+    :param shared_network_name: name of the shared network to be used if no
+           tenant network is available in the creds provider
     :return a dict with 'id' and 'name' of the network
     """
     caller = misc_utils.find_test_caller()
-    fixed_network_name = CONF.compute.fixed_network_name
     net_creds = creds_provider.get_primary_creds()
     network = getattr(net_creds, 'network', None)
     if not network or not network.get('name'):
-        if fixed_network_name:
+        if shared_network_name:
             msg = ('No valid network provided or created, defaulting to '
                    'fixed_network_name')
             if caller:
                 msg = '(%s) %s' % (caller, msg)
             LOG.debug(msg)
             try:
-                network = get_network_from_name(fixed_network_name,
+                network = get_network_from_name(shared_network_name,
                                                 compute_networks_client)
-            except exceptions.InvalidConfiguration:
+            except exceptions.InvalidTestResource:
                 network = {}
     msg = ('Found network %s available for tenant' % network)
     if caller:
diff --git a/tempest/common/identity.py b/tempest/common/identity.py
new file mode 100644
index 0000000..2179363
--- /dev/null
+++ b/tempest/common/identity.py
@@ -0,0 +1,32 @@
+# 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_lib import exceptions as lib_exc
+
+
+def get_tenant_by_name(client, tenant_name):
+    tenants = client.list_tenants()['tenants']
+    for tenant in tenants:
+        if tenant['name'] == tenant_name:
+            return tenant
+    raise lib_exc.NotFound('No such tenant(%s) in %s' % (tenant_name, tenants))
+
+
+def get_user_by_username(client, tenant_id, username):
+    users = client.list_tenant_users(tenant_id)['users']
+    for user in users:
+        if user['name'] == username:
+            return user
+    raise lib_exc.NotFound('No such user(%s) in %s' % (username, users))
diff --git a/tempest/common/preprov_creds.py b/tempest/common/preprov_creds.py
index f711302..74cc3f0 100644
--- a/tempest/common/preprov_creds.py
+++ b/tempest/common/preprov_creds.py
@@ -19,15 +19,14 @@
 from oslo_log import log as logging
 import six
 from tempest_lib import auth
+from tempest_lib import exceptions as lib_exc
 import yaml
 
 from tempest import clients
 from tempest.common import cred_provider
 from tempest.common import fixed_network
-from tempest import config
 from tempest import exceptions
 
-CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
@@ -39,21 +38,52 @@
 
 class PreProvisionedCredentialProvider(cred_provider.CredentialProvider):
 
-    def __init__(self, identity_version, name=None, credentials_domain=None,
-                 admin_role=None):
+    def __init__(self, identity_version, test_accounts_file,
+                 accounts_lock_dir, name=None, credentials_domain=None,
+                 admin_role=None, object_storage_operator_role=None,
+                 object_storage_reseller_admin_role=None):
+        """Credentials provider using pre-provisioned accounts
+
+        This credentials provider loads the details of pre-provisioned
+        accounts from a YAML file, in the format specified by
+        `etc/accounts.yaml.sample`. It locks accounts while in use, using the
+        external locking mechanism, allowing for multiple python processes
+        to share a single account file, and thus running tests in parallel.
+
+        The accounts_lock_dir must be generated using `lockutils.get_lock_path`
+        from the oslo.concurrency library. For instance:
+
+            accounts_lock_dir = os.path.join(lockutils.get_lock_path(CONF),
+                                             'test_accounts')
+
+        Role names for object storage are optional as long as the
+        `operator` and `reseller_admin` credential types are not used in the
+        accounts file.
+
+        :param identity_version: identity version of the credentials
+        :param admin_role: name of the admin role
+        :param test_accounts_file: path to the accounts YAML file
+        :param accounts_lock_dir: the directory for external locking
+        :param name: name of the hash file (optional)
+        :param credentials_domain: name of the domain credentials belong to
+                                   (if no domain is configured)
+        :param object_storage_operator_role: name of the role
+        :param object_storage_reseller_admin_role: name of the role
+        """
         super(PreProvisionedCredentialProvider, self).__init__(
             identity_version=identity_version, name=name,
-            credentials_domain=credentials_domain, admin_role=admin_role)
-        if (CONF.auth.test_accounts_file and
-                os.path.isfile(CONF.auth.test_accounts_file)):
-            accounts = read_accounts_yaml(CONF.auth.test_accounts_file)
+            admin_role=admin_role, credentials_domain=credentials_domain)
+        self.test_accounts_file = test_accounts_file
+        if test_accounts_file and os.path.isfile(test_accounts_file):
+            accounts = read_accounts_yaml(self.test_accounts_file)
             self.use_default_creds = False
         else:
             accounts = {}
             self.use_default_creds = True
-        self.hash_dict = self.get_hash_dict(accounts, admin_role)
-        self.accounts_dir = os.path.join(lockutils.get_lock_path(CONF),
-                                         'test_accounts')
+        self.hash_dict = self.get_hash_dict(
+            accounts, admin_role, object_storage_operator_role,
+            object_storage_reseller_admin_role)
+        self.accounts_dir = accounts_lock_dir
         self._creds = {}
 
     @classmethod
@@ -65,7 +95,9 @@
         return hash_dict
 
     @classmethod
-    def get_hash_dict(cls, accounts, admin_role):
+    def get_hash_dict(cls, accounts, admin_role,
+                      object_storage_operator_role=None,
+                      object_storage_reseller_admin_role=None):
         hash_dict = {'roles': {}, 'creds': {}, 'networks': {}}
         # Loop over the accounts read from the yaml file
         for account in accounts:
@@ -92,14 +124,24 @@
                     hash_dict = cls._append_role(admin_role, temp_hash_key,
                                                  hash_dict)
                 elif type == 'operator':
-                    hash_dict = cls._append_role(
-                        CONF.object_storage.operator_role, temp_hash_key,
-                        hash_dict)
+                    if object_storage_operator_role:
+                        hash_dict = cls._append_role(
+                            object_storage_operator_role, temp_hash_key,
+                            hash_dict)
+                    else:
+                        msg = ("Type 'operator' configured, but no "
+                               "object_storage_operator_role specified")
+                        raise lib_exc.InvalidCredentials(msg)
                 elif type == 'reseller_admin':
-                    hash_dict = cls._append_role(
-                        CONF.object_storage.reseller_admin_role,
-                        temp_hash_key,
-                        hash_dict)
+                    if object_storage_reseller_admin_role:
+                        hash_dict = cls._append_role(
+                            object_storage_reseller_admin_role,
+                            temp_hash_key,
+                            hash_dict)
+                    else:
+                        msg = ("Type 'reseller_admin' configured, but no "
+                               "object_storage_reseller_admin_role specified")
+                        raise lib_exc.InvalidCredentials(msg)
             # Populate the network subdict
             for resource in resources:
                 if resource == 'network':
@@ -112,8 +154,8 @@
     def is_multi_user(self):
         # Default credentials is not a valid option with locking Account
         if self.use_default_creds:
-            raise exceptions.InvalidConfiguration(
-                "Account file %s doesn't exist" % CONF.auth.test_accounts_file)
+            raise lib_exc.InvalidCredentials(
+                "Account file %s doesn't exist" % self.test_accounts_file)
         else:
             return len(self.hash_dict['creds']) > 1
 
@@ -149,7 +191,7 @@
                     names.append(fd.read())
         msg = ('Insufficient number of users provided. %s have allocated all '
                'the credentials for this allocation request' % ','.join(names))
-        raise exceptions.InvalidConfiguration(msg)
+        raise lib_exc.InvalidCredentials(msg)
 
     def _get_match_hash_list(self, roles=None):
         hashes = []
@@ -159,7 +201,7 @@
             for role in roles:
                 temp_hashes = self.hash_dict['roles'].get(role, None)
                 if not temp_hashes:
-                    raise exceptions.InvalidConfiguration(
+                    raise lib_exc.InvalidCredentials(
                         "No credentials with role: %s specified in the "
                         "accounts ""file" % role)
                 hashes.append(temp_hashes)
@@ -191,8 +233,8 @@
 
     def _get_creds(self, roles=None):
         if self.use_default_creds:
-            raise exceptions.InvalidConfiguration(
-                "Account file %s doesn't exist" % CONF.auth.test_accounts_file)
+            raise lib_exc.InvalidCredentials(
+                "Account file %s doesn't exist" % self.test_accounts_file)
         useable_hashes = self._get_match_hash_list(roles)
         free_hash = self._get_free_hash(useable_hashes)
         clean_creds = self._sanitize_creds(
@@ -297,7 +339,7 @@
         try:
             network = fixed_network.get_network_from_name(
                 net_name, compute_network_client)
-        except exceptions.InvalidConfiguration:
+        except exceptions.InvalidTestResource:
             network = {}
         net_creds.set_resources(network=network)
         return net_creds
diff --git a/tempest/config.py b/tempest/config.py
index 26823de..8c3656f 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -237,10 +237,6 @@
     cfg.StrOpt('image_ssh_password',
                default="password",
                help="Password used to authenticate to an instance."),
-    cfg.StrOpt('image_alt_ssh_user',
-               default="root",
-               help="User name used to authenticate to an instance using "
-                    "the alternate image."),
     cfg.IntOpt('build_interval',
                default=1,
                help="Time in seconds between build status checks."),
@@ -726,11 +722,21 @@
                         'publicURL', 'adminURL', 'internalURL'],
                help="The endpoint type to use for the volume service."),
     cfg.StrOpt('backend1_name',
-               default='BACKEND_1',
-               help="Name of the backend1 (must be declared in cinder.conf)"),
+               default='',
+               help='Name of the backend1 (must be declared in cinder.conf)',
+               deprecated_for_removal=True),
     cfg.StrOpt('backend2_name',
-               default='BACKEND_2',
-               help="Name of the backend2 (must be declared in cinder.conf)"),
+               default='',
+               help='Name of the backend2 (must be declared in cinder.conf)',
+               deprecated_for_removal=True),
+    cfg.ListOpt('backend_names',
+                default=['BACKEND_1', 'BACKEND_2'],
+                help='A list of backend names seperated by comma .'
+                     'The backend name must be declared in cinder.conf',
+                deprecated_opts=[cfg.DeprecatedOpt('BACKEND_1',
+                                                   group='volume'),
+                                 cfg.DeprecatedOpt('BACKEND_2',
+                                                   group='volume')]),
     cfg.StrOpt('storage_protocol',
                default='iSCSI',
                help='Backend protocol to target when creating volume types'),
@@ -921,6 +927,20 @@
                      "notification tests")
 ]
 
+alarming_group = cfg.OptGroup(name='alarming',
+                              title='Alarming Service Options')
+
+AlarmingGroup = [
+    cfg.StrOpt('catalog_type',
+               default='alarming',
+               help="Catalog type of the Alarming service."),
+    cfg.StrOpt('endpoint_type',
+               default='publicURL',
+               choices=['public', 'admin', 'internal',
+                        'publicURL', 'adminURL', 'internalURL'],
+               help="The endpoint type to use for the alarming service."),
+]
+
 
 telemetry_feature_group = cfg.OptGroup(name='telemetry-feature-enabled',
                                        title='Enabled Ceilometer Features')
@@ -1131,6 +1151,9 @@
     cfg.BoolOpt('ceilometer',
                 default=True,
                 help="Whether or not Ceilometer is expected to be available"),
+    cfg.BoolOpt('aodh',
+                default=False,
+                help="Whether or not Aodh is expected to be available"),
     cfg.BoolOpt('horizon',
                 default=True,
                 help="Whether or not Horizon is expected to be available"),
@@ -1277,6 +1300,7 @@
     (orchestration_group, OrchestrationGroup),
     (telemetry_group, TelemetryGroup),
     (telemetry_feature_group, TelemetryFeaturesGroup),
+    (alarming_group, AlarmingGroup),
     (dashboard_group, DashboardGroup),
     (data_processing_group, DataProcessingGroup),
     (data_processing_feature_group, DataProcessingFeaturesGroup),
diff --git a/tempest/exceptions.py b/tempest/exceptions.py
index c23e70c..031df7f 100644
--- a/tempest/exceptions.py
+++ b/tempest/exceptions.py
@@ -139,6 +139,13 @@
     message = "%(num)d cleanUp operation failed"
 
 
+# NOTE(andreaf) This exception is added here to facilitate the migration
+# of get_network_from_name and preprov_creds to tempest-lib, and it should
+# be migrated along with them
+class InvalidTestResource(TempestException):
+    message = "%(name) is not a valid %(type), or the name is ambiguous"
+
+
 class RFCViolation(RestClientException):
     message = "RFC Violation"
 
diff --git a/tempest/hacking/checks.py b/tempest/hacking/checks.py
index 936fbe8..1dad3ba 100644
--- a/tempest/hacking/checks.py
+++ b/tempest/hacking/checks.py
@@ -32,6 +32,7 @@
 TESTTOOLS_SKIP_DECORATOR = re.compile(r'\s*@testtools\.skip\((.*)\)')
 METHOD = re.compile(r"^    def .+")
 METHOD_GET_RESOURCE = re.compile(r"^\s*def (list|show)\_.+")
+METHOD_DELETE_RESOURCE = re.compile(r"^\s*def delete_.+")
 CLASS = re.compile(r"^class .+")
 
 
@@ -146,27 +147,37 @@
                "decorators.skip_because from tempest-lib")
 
 
+def _common_service_clients_check(logical_line, physical_line, filename,
+                                  ignored_list_file=None):
+    if 'tempest/services/' not in filename:
+        return False
+
+    if ignored_list_file is not None:
+        ignored_list = []
+        with open('tempest/hacking/' + ignored_list_file) as f:
+            for line in f:
+                ignored_list.append(line.strip())
+
+        if filename in ignored_list:
+            return False
+
+    if not METHOD.match(physical_line):
+        return False
+
+    if pep8.noqa(physical_line):
+        return False
+
+    return True
+
+
 def get_resources_on_service_clients(logical_line, physical_line, filename,
                                      line_number, lines):
     """Check that service client names of GET should be consistent
 
     T110
     """
-    if 'tempest/services/' not in filename:
-        return
-
-    ignored_list = []
-    with open('tempest/hacking/ignored_list_T110.txt') as f:
-        for line in f:
-            ignored_list.append(line.strip())
-
-    if filename in ignored_list:
-        return
-
-    if not METHOD.match(physical_line):
-        return
-
-    if pep8.noqa(physical_line):
+    if not _common_service_clients_check(logical_line, physical_line,
+                                         filename, 'ignored_list_T110.txt'):
         return
 
     for line in lines[line_number:]:
@@ -185,6 +196,32 @@
         yield (0, msg)
 
 
+def delete_resources_on_service_clients(logical_line, physical_line, filename,
+                                        line_number, lines):
+    """Check that service client names of DELETE should be consistent
+
+    T111
+    """
+    if not _common_service_clients_check(logical_line, physical_line,
+                                         filename, 'ignored_list_T111.txt'):
+        return
+
+    for line in lines[line_number:]:
+        if METHOD.match(line) or CLASS.match(line):
+            # the end of a method
+            return
+
+        if 'self.delete(' not in line:
+            continue
+
+        if METHOD_DELETE_RESOURCE.match(logical_line):
+            return
+
+        msg = ("T111: [DELETE /resources/<id>] methods should be "
+               "delete_<resource name>")
+        yield (0, msg)
+
+
 def factory(register):
     register(import_no_clients_in_api_and_scenario_tests)
     register(scenario_tests_need_service_tags)
@@ -195,3 +232,4 @@
     register(no_mutable_default_args)
     register(no_testtools_skip_decorator)
     register(get_resources_on_service_clients)
+    register(delete_resources_on_service_clients)
diff --git a/tempest/hacking/ignored_list_T110.txt b/tempest/hacking/ignored_list_T110.txt
index 7c3e830..f1655d0 100644
--- a/tempest/hacking/ignored_list_T110.txt
+++ b/tempest/hacking/ignored_list_T110.txt
@@ -1,4 +1,3 @@
-./tempest/services/compute/json/servers_client.py
 ./tempest/services/database/json/flavors_client.py
 ./tempest/services/identity/v3/json/credentials_client.py
 ./tempest/services/identity/v3/json/identity_client.py
@@ -6,8 +5,8 @@
 ./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
 ./tempest/services/telemetry/json/telemetry_client.py
 ./tempest/services/volume/json/qos_client.py
 ./tempest/services/volume/json/backups_client.py
-./tempest/services/image/v2/json/image_client.py
 ./tempest/services/baremetal/base.py
diff --git a/tempest/hacking/ignored_list_T111.txt b/tempest/hacking/ignored_list_T111.txt
new file mode 100644
index 0000000..8017e76
--- /dev/null
+++ b/tempest/hacking/ignored_list_T111.txt
@@ -0,0 +1 @@
+./tempest/services/baremetal/base.py
diff --git a/tempest/scenario/manager.py b/tempest/scenario/manager.py
index 2e95e83..f61d370 100644
--- a/tempest/scenario/manager.py
+++ b/tempest/scenario/manager.py
@@ -65,6 +65,7 @@
         cls.networks_client = cls.manager.networks_client
         cls.ports_client = cls.manager.ports_client
         cls.subnets_client = cls.manager.subnets_client
+        cls.floating_ips_client = cls.manager.floating_ips_client
         # Heat client
         cls.orchestration_client = cls.manager.orchestration_client
 
@@ -380,20 +381,22 @@
                   (img_path, img_container_format, img_disk_format,
                    img_properties, ami_img_path, ari_img_path, aki_img_path))
         try:
-            self.image = self._image_create('scenario-img',
-                                            img_container_format,
-                                            img_path,
-                                            disk_format=img_disk_format,
-                                            properties=img_properties)
+            image = self._image_create('scenario-img',
+                                       img_container_format,
+                                       img_path,
+                                       disk_format=img_disk_format,
+                                       properties=img_properties)
         except IOError:
             LOG.debug("A qcow2 image was not found. Try to get a uec image.")
             kernel = self._image_create('scenario-aki', 'aki', aki_img_path)
             ramdisk = self._image_create('scenario-ari', 'ari', ari_img_path)
             properties = {'kernel_id': kernel, 'ramdisk_id': ramdisk}
-            self.image = self._image_create('scenario-ami', 'ami',
-                                            path=ami_img_path,
-                                            properties=properties)
-        LOG.debug("image:%s" % self.image)
+            image = self._image_create('scenario-ami', 'ami',
+                                       path=ami_img_path,
+                                       properties=properties)
+        LOG.debug("image:%s" % image)
+
+        return image
 
     def _log_console_output(self, servers=None):
         if not CONF.compute_feature_enabled.console_output:
@@ -786,7 +789,7 @@
         if not external_network_id:
             external_network_id = CONF.network.public_network_id
         if not client:
-            client = self.network_client
+            client = self.floating_ips_client
         if not port_id:
             port_id, ip4 = self._get_server_port_id_and_ip4(thing)
         else:
@@ -1371,16 +1374,6 @@
         else:
             cls.admin_volume_types_client = cls.os_adm.volume_types_v2_client
 
-    def _wait_for_volume_status(self, status):
-        self.status_timeout(
-            self.volume_client.volumes, self.volume.id, status)
-
-    def nova_boot(self):
-        self.keypair = self.create_keypair()
-        create_kwargs = {'key_name': self.keypair['name']}
-        self.server = self.create_server(image=self.image,
-                                         create_kwargs=create_kwargs)
-
     def create_volume_type(self, client=None, name=None):
         if not client:
             client = self.admin_volume_types_client
diff --git a/tempest/scenario/test_encrypted_cinder_volumes.py b/tempest/scenario/test_encrypted_cinder_volumes.py
index 99837eb..082a8bf 100644
--- a/tempest/scenario/test_encrypted_cinder_volumes.py
+++ b/tempest/scenario/test_encrypted_cinder_volumes.py
@@ -42,8 +42,11 @@
             raise cls.skipException('Encrypted volume attach is not supported')
 
     def launch_instance(self):
-        self.glance_image_create()
-        self.nova_boot()
+        image = self.glance_image_create()
+        keypair = self.create_keypair()
+
+        return self.create_server(image=image,
+                                  create_kwargs={'key_name': keypair['name']})
 
     def create_encrypted_volume(self, encryption_provider, volume_type):
         volume_type = self.create_volume_type(name=volume_type)
@@ -52,26 +55,26 @@
                                     key_size=512,
                                     cipher='aes-xts-plain64',
                                     control_location='front-end')
-        self.volume = self.create_volume(volume_type=volume_type['name'])
+        return self.create_volume(volume_type=volume_type['name'])
 
-    def attach_detach_volume(self):
-        self.volume = self.nova_volume_attach(self.server, self.volume)
-        self.nova_volume_detach(self.server, self.volume)
+    def attach_detach_volume(self, server, volume):
+        attached_volume = self.nova_volume_attach(server, volume)
+        self.nova_volume_detach(server, attached_volume)
 
     @test.idempotent_id('79165fb4-5534-4b9d-8429-97ccffb8f86e')
     @test.services('compute', 'volume', 'image')
     def test_encrypted_cinder_volumes_luks(self):
-        self.launch_instance()
-        self.create_encrypted_volume('nova.volume.encryptors.'
-                                     'luks.LuksEncryptor',
-                                     volume_type='luks')
-        self.attach_detach_volume()
+        server = self.launch_instance()
+        volume = self.create_encrypted_volume('nova.volume.encryptors.'
+                                              'luks.LuksEncryptor',
+                                              volume_type='luks')
+        self.attach_detach_volume(server, volume)
 
     @test.idempotent_id('cbc752ed-b716-4717-910f-956cce965722')
     @test.services('compute', 'volume', 'image')
     def test_encrypted_cinder_volumes_cryptsetup(self):
-        self.launch_instance()
-        self.create_encrypted_volume('nova.volume.encryptors.'
-                                     'cryptsetup.CryptsetupEncryptor',
-                                     volume_type='cryptsetup')
-        self.attach_detach_volume()
+        server = self.launch_instance()
+        volume = self.create_encrypted_volume('nova.volume.encryptors.'
+                                              'cryptsetup.CryptsetupEncryptor',
+                                              volume_type='cryptsetup')
+        self.attach_detach_volume(server, volume)
diff --git a/tempest/scenario/test_large_ops.py b/tempest/scenario/test_large_ops.py
index 6497f7a..f45fb3a 100644
--- a/tempest/scenario/test_large_ops.py
+++ b/tempest/scenario/test_large_ops.py
@@ -79,7 +79,7 @@
             waiters.wait_for_server_status(self.servers_client,
                                            server['id'], status)
 
-    def nova_boot(self):
+    def nova_boot(self, image):
         name = data_utils.rand_name('scenario-server')
         flavor_id = CONF.compute.flavor_ref
         # Explicitly create secgroup to avoid cleanup at the end of testcases.
@@ -99,7 +99,7 @@
                                                          create_kwargs)
         self.servers_client.create_server(
             name=name,
-            imageRef=self.image,
+            imageRef=image,
             flavorRef=flavor_id,
             **create_kwargs)
         # needed because of bug 1199788
@@ -118,8 +118,8 @@
         self._wait_for_server_status('ACTIVE')
 
     def _large_ops_scenario(self):
-        self.glance_image_create()
-        self.nova_boot()
+        image = self.glance_image_create()
+        self.nova_boot(image)
 
     @test.idempotent_id('14ba0e78-2ed9-4d17-9659-a48f4756ecb3')
     @test.services('compute', 'image')
diff --git a/tempest/scenario/test_minimum_basic.py b/tempest/scenario/test_minimum_basic.py
index c3f3c78..92e3592 100644
--- a/tempest/scenario/test_minimum_basic.py
+++ b/tempest/scenario/test_minimum_basic.py
@@ -37,6 +37,18 @@
     * with and without optional parameters
     * check command outputs
 
+    Steps:
+    1. Create image
+    2. Create keypair
+    3. Boot instance with keypair and get list of instances
+    4. Create volume and show list of volumes
+    5. Attach volume to instance and getlist of volumes
+    6. Add IP to instance
+    7. Create and add security group to instance
+    8. Check SSH connection to instance
+    9. Reboot instance
+    10. Check SSH connection to instance after reboot
+
     """
 
     def _wait_for_server_status(self, server, status):
@@ -46,11 +58,6 @@
         waiters.wait_for_server_status(self.servers_client,
                                        server_id, status)
 
-    def nova_boot(self, keypair):
-        create_kwargs = {'key_name': keypair['name']}
-        return self.create_server(image=self.image,
-                                  create_kwargs=create_kwargs)
-
     def nova_list(self):
         servers = self.servers_client.list_servers()
         # The list servers in the compute client is inconsistent...
@@ -107,11 +114,12 @@
     @test.idempotent_id('bdbb5441-9204-419d-a225-b4fdbfb1a1a8')
     @test.services('compute', 'volume', 'image', 'network')
     def test_minimum_basic_scenario(self):
-        self.glance_image_create()
-
+        image = self.glance_image_create()
         keypair = self.create_keypair()
 
-        server = self.nova_boot(keypair)
+        create_kwargs = {'key_name': keypair['name']}
+        server = self.create_server(image=image,
+                                    create_kwargs=create_kwargs)
         servers = self.nova_list()
         self.assertIn(server['id'], [x['id'] for x in servers])
 
@@ -130,10 +138,15 @@
         floating_ip = self.create_floating_ip(server)
         self.create_and_add_security_group_to_server(server)
 
+        # check that we can SSH to the server before reboot
         self.linux_client = self.get_remote_client(
             floating_ip['ip'], private_key=keypair['private_key'])
+
         self.nova_reboot(server)
 
+        # check that we can SSH to the server after reboot
+        # (both connections are part of the scenario)
         self.linux_client = self.get_remote_client(
             floating_ip['ip'], private_key=keypair['private_key'])
+
         self.check_partitions()
diff --git a/tempest/scenario/test_security_groups_basic_ops.py b/tempest/scenario/test_security_groups_basic_ops.py
index 51188d5..6a23c4b 100644
--- a/tempest/scenario/test_security_groups_basic_ops.py
+++ b/tempest/scenario/test_security_groups_basic_ops.py
@@ -283,7 +283,7 @@
         public_network_id = CONF.network.public_network_id
         floating_ip = self.create_floating_ip(
             server, public_network_id,
-            client=tenant.manager.network_client)
+            client=tenant.manager.floating_ips_client)
         self.floating_ips.setdefault(server['id'], floating_ip)
 
     def _create_tenant_network(self, tenant):
diff --git a/tempest/services/compute/json/images_client.py b/tempest/services/compute/json/images_client.py
deleted file mode 100644
index 99fdfe6..0000000
--- a/tempest/services/compute/json/images_client.py
+++ /dev/null
@@ -1,122 +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 images as schema
-from tempest.common import service_client
-
-
-class ImagesClient(service_client.ServiceClient):
-
-    def create_image(self, server_id, **kwargs):
-        """Creates an image of the original server."""
-
-        post_body = {'createImage': kwargs}
-        post_body = json.dumps(post_body)
-        resp, body = self.post('servers/%s/action' % server_id,
-                               post_body)
-        self.validate_response(schema.create_image, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def list_images(self, detail=False, **params):
-        """Returns a list of all images filtered by any parameters."""
-        url = 'images'
-        _schema = schema.list_images
-        if detail:
-            url += '/detail'
-            _schema = schema.list_images_details
-
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(_schema, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_image(self, image_id):
-        """Returns the details of a single image."""
-        resp, body = self.get("images/%s" % image_id)
-        self.expected_success(200, resp.status)
-        body = json.loads(body)
-        self.validate_response(schema.get_image, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_image(self, image_id):
-        """Deletes the provided image."""
-        resp, body = self.delete("images/%s" % image_id)
-        self.validate_response(schema.delete, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def list_image_metadata(self, image_id):
-        """Lists all metadata items for an image."""
-        resp, body = self.get("images/%s/metadata" % image_id)
-        body = json.loads(body)
-        self.validate_response(schema.image_metadata, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def set_image_metadata(self, image_id, meta):
-        """Sets the metadata for an image."""
-        post_body = json.dumps({'metadata': meta})
-        resp, body = self.put('images/%s/metadata' % image_id, post_body)
-        body = json.loads(body)
-        self.validate_response(schema.image_metadata, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def update_image_metadata(self, image_id, meta):
-        """Updates the metadata for an image."""
-        post_body = json.dumps({'metadata': meta})
-        resp, body = self.post('images/%s/metadata' % image_id, post_body)
-        body = json.loads(body)
-        self.validate_response(schema.image_metadata, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_image_metadata_item(self, image_id, key):
-        """Returns the value for a specific image metadata key."""
-        resp, body = self.get("images/%s/metadata/%s" % (image_id, key))
-        body = json.loads(body)
-        self.validate_response(schema.image_meta_item, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def set_image_metadata_item(self, image_id, key, meta):
-        """Sets the value for a specific image metadata key."""
-        post_body = json.dumps({'meta': meta})
-        resp, body = self.put('images/%s/metadata/%s' % (image_id, key),
-                              post_body)
-        body = json.loads(body)
-        self.validate_response(schema.image_meta_item, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_image_metadata_item(self, image_id, key):
-        """Deletes a single image metadata key/value pair."""
-        resp, body = self.delete("images/%s/metadata/%s" %
-                                 (image_id, key))
-        self.validate_response(schema.delete, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def is_resource_deleted(self, id):
-        try:
-            self.show_image(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 'image'
diff --git a/tempest/services/compute/json/instance_usage_audit_log_client.py b/tempest/services/compute/json/instance_usage_audit_log_client.py
deleted file mode 100644
index 4d9625e..0000000
--- a/tempest/services/compute/json/instance_usage_audit_log_client.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2013 IBM 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 oslo_serialization import jsonutils as json
-
-from tempest.api_schema.response.compute.v2_1 import \
-    instance_usage_audit_logs as schema
-from tempest.common import service_client
-
-
-class InstanceUsagesAuditLogClient(service_client.ServiceClient):
-
-    def list_instance_usage_audit_logs(self):
-        url = 'os-instance_usage_audit_log'
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_instance_usage_audit_log,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_instance_usage_audit_log(self, time_before):
-        url = 'os-instance_usage_audit_log/%s' % time_before
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.get_instance_usage_audit_log, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/limits_client.py b/tempest/services/compute/json/limits_client.py
deleted file mode 100644
index b64b4a5..0000000
--- a/tempest/services/compute/json/limits_client.py
+++ /dev/null
@@ -1,28 +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 tempest.api_schema.response.compute.v2_1 import limits as schema
-from tempest.common import service_client
-
-
-class LimitsClient(service_client.ServiceClient):
-
-    def show_limits(self):
-        resp, body = self.get("limits")
-        body = json.loads(body)
-        self.validate_response(schema.get_limit, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/migrations_client.py b/tempest/services/compute/json/migrations_client.py
deleted file mode 100644
index b302539..0000000
--- a/tempest/services/compute/json/migrations_client.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2014 NEC Corporation.
-#
-#    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.api_schema.response.compute.v2_1 import migrations as schema
-from tempest.common import service_client
-
-
-class MigrationsClient(service_client.ServiceClient):
-
-    def list_migrations(self, **params):
-        """Lists all migrations."""
-
-        url = 'os-migrations'
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_migrations, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/networks_client.py b/tempest/services/compute/json/networks_client.py
deleted file mode 100644
index dd20ee5..0000000
--- a/tempest/services/compute/json/networks_client.py
+++ /dev/null
@@ -1,33 +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 tempest.common import service_client
-
-
-class NetworksClient(service_client.ServiceClient):
-
-    def list_networks(self):
-        resp, body = self.get("os-networks")
-        body = json.loads(body)
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def show_network(self, network_id):
-        resp, body = self.get("os-networks/%s" % network_id)
-        body = json.loads(body)
-        self.expected_success(200, resp.status)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/quota_classes_client.py b/tempest/services/compute/json/quota_classes_client.py
deleted file mode 100644
index 7aac5e4..0000000
--- a/tempest/services/compute/json/quota_classes_client.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2012 NTT Data
-# 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 quota_classes as classes_schema
-from tempest.common import service_client
-
-
-class QuotaClassesClient(service_client.ServiceClient):
-
-    def show_quota_class_set(self, quota_class_id):
-        """List the quota class set for a quota class."""
-
-        url = 'os-quota-class-sets/%s' % quota_class_id
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(classes_schema.get_quota_class_set, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def update_quota_class_set(self, quota_class_id, **kwargs):
-        """Updates the quota class's limits for one or more resources."""
-        post_body = json.dumps({'quota_class_set': kwargs})
-
-        resp, body = self.put('os-quota-class-sets/%s' % quota_class_id,
-                              post_body)
-
-        body = json.loads(body)
-        self.validate_response(classes_schema.update_quota_class_set,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/quotas_client.py b/tempest/services/compute/json/quotas_client.py
deleted file mode 100644
index e628b3a..0000000
--- a/tempest/services/compute/json/quotas_client.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright 2012 NTT Data
-# 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 quotas as schema
-from tempest.common import service_client
-
-
-class QuotasClient(service_client.ServiceClient):
-
-    def show_quota_set(self, tenant_id, user_id=None):
-        """List the quota set for a tenant."""
-
-        url = 'os-quota-sets/%s' % tenant_id
-        if user_id:
-            url += '?user_id=%s' % user_id
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.get_quota_set, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_default_quota_set(self, tenant_id):
-        """List the default quota set for a tenant."""
-
-        url = 'os-quota-sets/%s/defaults' % tenant_id
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.get_quota_set, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def update_quota_set(self, tenant_id, user_id=None, **kwargs):
-        """Updates the tenant's quota limits for one or more resources"""
-        post_body = json.dumps({'quota_set': kwargs})
-
-        if user_id:
-            resp, body = self.put('os-quota-sets/%s?user_id=%s' %
-                                  (tenant_id, user_id), post_body)
-        else:
-            resp, body = self.put('os-quota-sets/%s' % tenant_id,
-                                  post_body)
-
-        body = json.loads(body)
-        self.validate_response(schema.update_quota_set, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_quota_set(self, tenant_id):
-        """Delete the tenant's quota set."""
-        resp, body = self.delete('os-quota-sets/%s' % tenant_id)
-        self.validate_response(schema.delete_quota, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/security_group_default_rules_client.py b/tempest/services/compute/json/security_group_default_rules_client.py
deleted file mode 100644
index b31baab..0000000
--- a/tempest/services/compute/json/security_group_default_rules_client.py
+++ /dev/null
@@ -1,65 +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 oslo_serialization import jsonutils as json
-
-from tempest.api_schema.response.compute.v2_1 import \
-    security_group_default_rule as schema
-from tempest.common import service_client
-
-
-class SecurityGroupDefaultRulesClient(service_client.ServiceClient):
-
-    def create_security_default_group_rule(self, **kwargs):
-        """Creating security group default rules.
-
-        ip_protocol : ip_protocol (icmp, tcp, udp).
-        from_port: Port at start of range.
-        to_port  : Port at end of range.
-        cidr     : CIDR for address range.
-        """
-        post_body = json.dumps({'security_group_default_rule': kwargs})
-        url = 'os-security-group-default-rules'
-        resp, body = self.post(url, post_body)
-        body = json.loads(body)
-        self.validate_response(schema.create_get_security_group_default_rule,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_security_group_default_rule(self,
-                                           security_group_default_rule_id):
-        """Deletes the provided Security Group default rule."""
-        resp, body = self.delete('os-security-group-default-rules/%s' % (
-            security_group_default_rule_id))
-        self.validate_response(schema.delete_security_group_default_rule,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def list_security_group_default_rules(self):
-        """List all Security Group default rules."""
-        resp, body = self.get('os-security-group-default-rules')
-        body = json.loads(body)
-        self.validate_response(schema.list_security_group_default_rules,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_security_group_default_rule(self, security_group_default_rule_id):
-        """Return the details of provided Security Group default rule."""
-        resp, body = self.get('os-security-group-default-rules/%s' %
-                              security_group_default_rule_id)
-        body = json.loads(body)
-        self.validate_response(schema.create_get_security_group_default_rule,
-                               resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/security_groups_client.py b/tempest/services/compute/json/security_groups_client.py
deleted file mode 100644
index c996079..0000000
--- a/tempest/services/compute/json/security_groups_client.py
+++ /dev/null
@@ -1,89 +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 security_groups as schema
-from tempest.common import service_client
-
-
-class SecurityGroupsClient(service_client.ServiceClient):
-
-    def list_security_groups(self, **params):
-        """List all security groups for a user."""
-
-        url = 'os-security-groups'
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_security_groups, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_security_group(self, security_group_id):
-        """Get the details of a Security Group."""
-        url = "os-security-groups/%s" % security_group_id
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.get_security_group, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def create_security_group(self, **kwargs):
-        """Creates a new security group.
-
-        name (Required): Name of security group.
-        description (Required): Description of security group.
-        """
-        post_body = json.dumps({'security_group': kwargs})
-        resp, body = self.post('os-security-groups', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.get_security_group, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def update_security_group(self, security_group_id, **kwargs):
-        """Update a security group.
-
-        security_group_id: a security_group to update
-        name: new name of security group
-        description: new description of security group
-        """
-        post_body = json.dumps({'security_group': kwargs})
-        resp, body = self.put('os-security-groups/%s' % security_group_id,
-                              post_body)
-        body = json.loads(body)
-        self.validate_response(schema.update_security_group, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_security_group(self, security_group_id):
-        """Deletes the provided Security Group."""
-        resp, body = self.delete(
-            'os-security-groups/%s' % security_group_id)
-        self.validate_response(schema.delete_security_group, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def is_resource_deleted(self, id):
-        try:
-            self.show_security_group(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 'security_group'
diff --git a/tempest/services/compute/json/servers_client.py b/tempest/services/compute/json/servers_client.py
index 90b7a2d..a0251f1 100644
--- a/tempest/services/compute/json/servers_client.py
+++ b/tempest/services/compute/json/servers_client.py
@@ -152,11 +152,11 @@
         return self.action(server_id, 'changePassword',
                            adminPass=adminPass)
 
-    def get_password(self, server_id):
+    def show_password(self, server_id):
         resp, body = self.get("servers/%s/os-server-password" %
                               server_id)
         body = json.loads(body)
-        self.validate_response(schema.get_password, resp, body)
+        self.validate_response(schema.show_password, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def delete_password(self, server_id):
@@ -240,10 +240,10 @@
                                resp, body)
         return service_client.ResponseBody(resp, body)
 
-    def get_server_metadata_item(self, server_id, key):
+    def show_server_metadata_item(self, server_id, key):
         resp, body = self.get("servers/%s/metadata/%s" % (server_id, key))
         body = json.loads(body)
-        self.validate_response(schema.set_get_server_metadata_item,
+        self.validate_response(schema.set_show_server_metadata_item,
                                resp, body)
         return service_client.ResponseBody(resp, body)
 
@@ -252,7 +252,7 @@
         resp, body = self.put('servers/%s/metadata/%s' % (server_id, key),
                               post_body)
         body = json.loads(body)
-        self.validate_response(schema.set_get_server_metadata_item,
+        self.validate_response(schema.set_show_server_metadata_item,
                                resp, body)
         return service_client.ResponseBody(resp, body)
 
@@ -278,19 +278,19 @@
         self.validate_response(schema.attach_volume, resp, body)
         return service_client.ResponseBody(resp, body)
 
-    def detach_volume(self, server_id, volume_id):
+    def detach_volume(self, server_id, volume_id):  # noqa
         """Detaches a volume from a server instance."""
         resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
                                  (server_id, volume_id))
         self.validate_response(schema.detach_volume, resp, body)
         return service_client.ResponseBody(resp, body)
 
-    def get_volume_attachment(self, server_id, attach_id):
+    def show_volume_attachment(self, server_id, attach_id):
         """Return details about the given volume attachment."""
         resp, body = self.get('servers/%s/os-volume_attachments/%s' % (
             server_id, attach_id))
         body = json.loads(body)
-        self.validate_response(schema.get_volume_attachment, resp, body)
+        self.validate_response(schema.show_volume_attachment, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def list_volume_attachments(self, server_id):
@@ -387,7 +387,7 @@
         """Unrescue the provided server."""
         return self.action(server_id, 'unrescue')
 
-    def get_server_diagnostics(self, server_id):
+    def show_server_diagnostics(self, server_id):
         """Get the usage data for a server."""
         resp, body = self.get("servers/%s/diagnostics" % server_id)
         return service_client.ResponseBody(resp, json.loads(body))
@@ -400,12 +400,12 @@
         self.validate_response(schema.list_instance_actions, resp, body)
         return service_client.ResponseBody(resp, body)
 
-    def get_instance_action(self, server_id, request_id):
+    def show_instance_action(self, server_id, request_id):
         """Returns the action details of the provided server."""
         resp, body = self.get("servers/%s/os-instance-actions/%s" %
                               (server_id, request_id))
         body = json.loads(body)
-        self.validate_response(schema.get_instance_action, resp, body)
+        self.validate_response(schema.show_instance_action, resp, body)
         return service_client.ResponseBody(resp, body)
 
     def force_delete_server(self, server_id, **kwargs):
diff --git a/tempest/services/compute/json/services_client.py b/tempest/services/compute/json/services_client.py
deleted file mode 100644
index 57d0434..0000000
--- a/tempest/services/compute/json/services_client.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2013 NEC Corporation
-# 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 six.moves.urllib import parse as urllib
-
-from tempest.api_schema.response.compute.v2_1 import services as schema
-from tempest.common import service_client
-
-
-class ServicesClient(service_client.ServiceClient):
-
-    def list_services(self, **params):
-        url = 'os-services'
-        if params:
-            url += '?%s' % urllib.urlencode(params)
-
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.list_services, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def enable_service(self, **kwargs):
-        """Enable service on a host
-
-        host_name: Name of host
-        binary: Service binary
-        """
-        post_body = json.dumps(kwargs)
-        resp, body = self.put('os-services/enable', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.enable_disable_service, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def disable_service(self, **kwargs):
-        """Disable service on a host
-
-        host_name: Name of host
-        binary: Service binary
-        """
-        post_body = json.dumps(kwargs)
-        resp, body = self.put('os-services/disable', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.enable_disable_service, resp, body)
-        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/compute/json/snapshots_client.py b/tempest/services/compute/json/snapshots_client.py
deleted file mode 100644
index e3f92db..0000000
--- a/tempest/services/compute/json/snapshots_client.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright 2015 Fujitsu(fnst) 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 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 snapshots as schema
-from tempest.common import service_client
-
-
-class SnapshotsClient(service_client.ServiceClient):
-
-    def create_snapshot(self, volume_id, **kwargs):
-        post_body = {
-            'volume_id': volume_id
-        }
-        post_body.update(kwargs)
-        post_body = json.dumps({'snapshot': post_body})
-        resp, body = self.post('os-snapshots', post_body)
-        body = json.loads(body)
-        self.validate_response(schema.create_get_snapshot, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_snapshot(self, snapshot_id):
-        url = "os-snapshots/%s" % snapshot_id
-        resp, body = self.get(url)
-        body = json.loads(body)
-        self.validate_response(schema.create_get_snapshot, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def list_snapshots(self, detail=False, params=None):
-        url = 'os-snapshots'
-
-        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_snapshots, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_snapshot(self, snapshot_id):
-        resp, body = self.delete("os-snapshots/%s" % snapshot_id)
-        self.validate_response(schema.delete_snapshot, resp, body)
-        return service_client.ResponseBody(resp, body)
-
-    def is_resource_deleted(self, id):
-        try:
-            self.show_snapshot(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 'snapshot'
diff --git a/tempest/services/identity/v2/json/identity_client.py b/tempest/services/identity/v2/json/identity_client.py
index b27f036..3f6727d 100644
--- a/tempest/services/identity/v2/json/identity_client.py
+++ b/tempest/services/identity/v2/json/identity_client.py
@@ -11,7 +11,6 @@
 #    under the License.
 
 from oslo_serialization import jsonutils as json
-from tempest_lib import exceptions as lib_exc
 
 from tempest.common import service_client
 
@@ -85,7 +84,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def remove_user_role(self, tenant_id, user_id, role_id):
+    def delete_user_role(self, tenant_id, user_id, role_id):
         """Removes a role assignment for a user on a tenant."""
         resp, body = self.delete('/tenants/%s/users/%s/roles/OS-KSADM/%s' %
                                  (tenant_id, user_id, role_id))
@@ -119,13 +118,6 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_tenant_by_name(self, tenant_name):
-        tenants = self.list_tenants()['tenants']
-        for tenant in tenants:
-            if tenant['name'] == tenant_name:
-                return tenant
-        raise lib_exc.NotFound('No such tenant')
-
     def update_tenant(self, tenant_id, **kwargs):
         """Updates a tenant."""
         body = self.show_tenant(tenant_id)['tenant']
@@ -220,13 +212,6 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def get_user_by_username(self, tenant_id, username):
-        users = self.list_tenant_users(tenant_id)['users']
-        for user in users:
-            if user['name'] == username:
-                return user
-        raise lib_exc.NotFound('No such user')
-
     def create_service(self, name, type, **kwargs):
         """Create a service."""
         post_body = {
diff --git a/tempest/services/identity/v3/json/groups_client.py b/tempest/services/identity/v3/json/groups_client.py
new file mode 100644
index 0000000..70edd23
--- /dev/null
+++ b/tempest/services/identity/v3/json/groups_client.py
@@ -0,0 +1,90 @@
+# Copyright 2013 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.
+
+"""
+http://developer.openstack.org/api-ref-identity-v3.html#groups-v3
+"""
+
+from oslo_serialization import jsonutils as json
+
+from tempest.common import service_client
+
+
+class GroupsClient(service_client.ServiceClient):
+    api_version = "v3"
+
+    def create_group(self, **kwargs):
+        """Creates a group.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-identity-v3.html#createGroup
+        """
+        post_body = json.dumps({'group': kwargs})
+        resp, body = self.post('groups', post_body)
+        self.expected_success(201, resp.status)
+        body = json.loads(body)
+        return service_client.ResponseBody(resp, body)
+
+    def show_group(self, group_id):
+        """Get group details."""
+        resp, body = self.get('groups/%s' % group_id)
+        self.expected_success(200, resp.status)
+        body = json.loads(body)
+        return service_client.ResponseBody(resp, body)
+
+    def list_groups(self):
+        """Lists the groups."""
+        resp, body = self.get('groups')
+        self.expected_success(200, resp.status)
+        body = json.loads(body)
+        return service_client.ResponseBody(resp, body)
+
+    def update_group(self, group_id, **kwargs):
+        """Updates a group.
+
+        Available params: see http://developer.openstack.org/
+                              api-ref-identity-v3.html#updateGroup
+        """
+        post_body = json.dumps({'group': kwargs})
+        resp, body = self.patch('groups/%s' % group_id, post_body)
+        self.expected_success(200, resp.status)
+        body = json.loads(body)
+        return service_client.ResponseBody(resp, body)
+
+    def delete_group(self, group_id):
+        """Delete a group."""
+        resp, body = self.delete('groups/%s' % str(group_id))
+        self.expected_success(204, resp.status)
+        return service_client.ResponseBody(resp, body)
+
+    def add_group_user(self, group_id, user_id):
+        """Add user into group."""
+        resp, body = self.put('groups/%s/users/%s' % (group_id, user_id),
+                              None)
+        self.expected_success(204, resp.status)
+        return service_client.ResponseBody(resp, body)
+
+    def list_group_users(self, group_id):
+        """List users in group."""
+        resp, body = self.get('groups/%s/users' % group_id)
+        self.expected_success(200, resp.status)
+        body = json.loads(body)
+        return service_client.ResponseBody(resp, body)
+
+    def delete_group_user(self, group_id, user_id):
+        """Delete user in group."""
+        resp, body = self.delete('groups/%s/users/%s' % (group_id, user_id))
+        self.expected_success(204, resp.status)
+        return service_client.ResponseBody(resp, body)
diff --git a/tempest/services/identity/v3/json/identity_client.py b/tempest/services/identity/v3/json/identity_client.py
index f7913d0..bbd8804 100644
--- a/tempest/services/identity/v3/json/identity_client.py
+++ b/tempest/services/identity/v3/json/identity_client.py
@@ -299,72 +299,6 @@
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def create_group(self, name, **kwargs):
-        """Creates a group."""
-        description = kwargs.get('description', None)
-        domain_id = kwargs.get('domain_id', 'default')
-        project_id = kwargs.get('project_id', None)
-        post_body = {
-            'description': description,
-            'domain_id': domain_id,
-            'project_id': project_id,
-            'name': name
-        }
-        post_body = json.dumps({'group': post_body})
-        resp, body = self.post('groups', post_body)
-        self.expected_success(201, resp.status)
-        body = json.loads(body)
-        return service_client.ResponseBody(resp, body)
-
-    def get_group(self, group_id):
-        """Get group details."""
-        resp, body = self.get('groups/%s' % group_id)
-        self.expected_success(200, resp.status)
-        body = json.loads(body)
-        return service_client.ResponseBody(resp, body)
-
-    def list_groups(self):
-        """Lists the groups."""
-        resp, body = self.get('groups')
-        self.expected_success(200, resp.status)
-        body = json.loads(body)
-        return service_client.ResponseBody(resp, body)
-
-    def update_group(self, group_id, **kwargs):
-        """Updates a group."""
-        body = self.get_group(group_id)['group']
-        name = kwargs.get('name', body['name'])
-        description = kwargs.get('description', body['description'])
-        post_body = {
-            'name': name,
-            'description': description
-        }
-        post_body = json.dumps({'group': post_body})
-        resp, body = self.patch('groups/%s' % group_id, post_body)
-        self.expected_success(200, resp.status)
-        body = json.loads(body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_group(self, group_id):
-        """Delete a group."""
-        resp, body = self.delete('groups/%s' % str(group_id))
-        self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def add_group_user(self, group_id, user_id):
-        """Add user into group."""
-        resp, body = self.put('groups/%s/users/%s' % (group_id, user_id),
-                              None)
-        self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
-
-    def list_group_users(self, group_id):
-        """List users in group."""
-        resp, body = self.get('groups/%s/users' % group_id)
-        self.expected_success(200, resp.status)
-        body = json.loads(body)
-        return service_client.ResponseBody(resp, body)
-
     def list_user_groups(self, user_id):
         """Lists groups which a user belongs to."""
         resp, body = self.get('users/%s/groups' % user_id)
@@ -372,12 +306,6 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def delete_group_user(self, group_id, user_id):
-        """Delete user in group."""
-        resp, body = self.delete('groups/%s/users/%s' % (group_id, user_id))
-        self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
-
     def assign_user_role_on_project(self, project_id, user_id, role_id):
         """Add roles to a user on a project."""
         resp, body = self.put('projects/%s/users/%s/roles/%s' %
@@ -408,14 +336,14 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def revoke_role_from_user_on_project(self, project_id, user_id, role_id):
+    def delete_role_from_user_on_project(self, project_id, user_id, role_id):
         """Delete role of a user on a project."""
         resp, body = self.delete('projects/%s/users/%s/roles/%s' %
                                  (project_id, user_id, role_id))
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def revoke_role_from_user_on_domain(self, domain_id, user_id, role_id):
+    def delete_role_from_user_on_domain(self, domain_id, user_id, role_id):
         """Delete role of a user on a domain."""
         resp, body = self.delete('domains/%s/users/%s/roles/%s' %
                                  (domain_id, user_id, role_id))
@@ -452,14 +380,14 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def revoke_role_from_group_on_project(self, project_id, group_id, role_id):
+    def delete_role_from_group_on_project(self, project_id, group_id, role_id):
         """Delete role of a user on a project."""
         resp, body = self.delete('projects/%s/groups/%s/roles/%s' %
                                  (project_id, group_id, role_id))
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def revoke_role_from_group_on_domain(self, domain_id, group_id, role_id):
+    def delete_role_from_group_on_domain(self, domain_id, group_id, role_id):
         """Delete role of a user on a domain."""
         resp, body = self.delete('domains/%s/groups/%s/roles/%s' %
                                  (domain_id, group_id, role_id))
diff --git a/tempest/services/image/v2/json/image_client.py b/tempest/services/image/v2/json/image_client.py
index eea179d..a7e0f04 100644
--- a/tempest/services/image/v2/json/image_client.py
+++ b/tempest/services/image/v2/json/image_client.py
@@ -153,7 +153,7 @@
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp, body)
 
-    def load_image_file(self, image_id):
+    def show_image_file(self, image_id):
         url = 'v2/images/%s/file' % image_id
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
@@ -178,17 +178,17 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def add_image_member(self, image_id, member_id):
+    def add_image_member(self, image_id, **kwargs):
         url = 'v2/images/%s/members' % image_id
-        data = json.dumps({'member': member_id})
+        data = json.dumps(kwargs)
         resp, body = self.post(url, data)
         self.expected_success(200, resp.status)
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def update_image_member(self, image_id, member_id, body):
+    def update_image_member(self, image_id, member_id, **kwargs):
         url = 'v2/images/%s/members/%s' % (image_id, member_id)
-        data = json.dumps(body)
+        data = json.dumps(kwargs)
         resp, body = self.put(url, data)
         self.expected_success(200, resp.status)
         body = json.loads(body)
@@ -200,7 +200,7 @@
         self.expected_success(200, resp.status)
         return service_client.ResponseBody(resp, json.loads(body))
 
-    def remove_image_member(self, image_id, member_id):
+    def delete_image_member(self, image_id, member_id):
         url = 'v2/images/%s/members/%s' % (image_id, member_id)
         resp, _ = self.delete(url)
         self.expected_success(204, resp.status)
@@ -220,19 +220,13 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def create_namespaces(self, namespace, **kwargs):
-        params = {
-            "namespace": namespace,
-        }
+    def create_namespace(self, **kwargs):
+        """Create a namespace.
 
-        for option in kwargs:
-            value = kwargs.get(option)
-            if isinstance(value, dict) or isinstance(value, tuple):
-                params.update(value)
-            else:
-                params[option] = value
-
-        data = json.dumps(params)
+        Available params: see http://developer.openstack.org/
+                              api-ref-image-v2.html#createNamespace-v2
+        """
+        data = json.dumps(kwargs)
         self._validate_schema(data)
 
         resp, body = self.post('/v2/metadefs/namespaces', data)
@@ -240,25 +234,23 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def show_namespaces(self, namespace):
+    def show_namespace(self, namespace):
         url = '/v2/metadefs/namespaces/%s' % namespace
         resp, body = self.get(url)
         self.expected_success(200, resp.status)
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def update_namespaces(self, namespace, visibility, **kwargs):
-        params = {
-            "namespace": namespace,
-            "visibility": visibility
-        }
-        for option in kwargs:
-            value = kwargs.get(option)
-            if isinstance(value, dict) or isinstance(value, tuple):
-                params.update(value)
-            else:
-                params[option] = value
+    def update_namespace(self, namespace, **kwargs):
+        """Update a namespace.
 
+        Available params: see http://developer.openstack.org/
+                              api-ref-image-v2.html#updateNamespace-v2
+        """
+        # NOTE: On Glance API, we need to pass namespace on both URI
+        # and a request body.
+        params = {'namespace': namespace}
+        params.update(kwargs)
         data = json.dumps(params)
         self._validate_schema(data)
         url = '/v2/metadefs/namespaces/%s' % namespace
@@ -267,7 +259,7 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
-    def delete_namespaces(self, namespace):
+    def delete_namespace(self, namespace):
         url = '/v2/metadefs/namespaces/%s' % namespace
         resp, _ = self.delete(url)
         self.expected_success(204, resp.status)
diff --git a/tempest/services/messaging/json/messaging_client.py b/tempest/services/messaging/json/messaging_client.py
index 2f233a9..5a43841 100644
--- a/tempest/services/messaging/json/messaging_client.py
+++ b/tempest/services/messaging/json/messaging_client.py
@@ -170,7 +170,7 @@
         self.expected_success(204, resp.status)
         return resp, body
 
-    def release_claim(self, claim_uri):
+    def delete_claim(self, claim_uri):
         resp, body = self.delete(claim_uri)
         self.expected_success(204, resp.status)
         return resp, body
diff --git a/tempest/services/network/json/floating_ips_client.py b/tempest/services/network/json/floating_ips_client.py
new file mode 100644
index 0000000..5c490ed
--- /dev/null
+++ b/tempest/services/network/json/floating_ips_client.py
@@ -0,0 +1,38 @@
+#    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 FloatingIPsClient(base.BaseNetworkClient):
+
+    def create_floatingip(self, **kwargs):
+        uri = '/floatingips'
+        post_data = {'floatingip': kwargs}
+        return self.create_resource(uri, post_data)
+
+    def update_floatingip(self, floatingip_id, **kwargs):
+        uri = '/floatingips/%s' % floatingip_id
+        post_data = {'floatingip': kwargs}
+        return self.update_resource(uri, post_data)
+
+    def show_floatingip(self, floatingip_id, **fields):
+        uri = '/floatingips/%s' % floatingip_id
+        return self.show_resource(uri, **fields)
+
+    def delete_floatingip(self, floatingip_id):
+        uri = '/floatingips/%s' % floatingip_id
+        return self.delete_resource(uri)
+
+    def list_floatingips(self, **filters):
+        uri = '/floatingips'
+        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 50a5d5e..5a4229c 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -35,28 +35,6 @@
     quotas
     """
 
-    def create_floatingip(self, **kwargs):
-        uri = '/floatingips'
-        post_data = {'floatingip': kwargs}
-        return self.create_resource(uri, post_data)
-
-    def update_floatingip(self, floatingip_id, **kwargs):
-        uri = '/floatingips/%s' % floatingip_id
-        post_data = {'floatingip': kwargs}
-        return self.update_resource(uri, post_data)
-
-    def show_floatingip(self, floatingip_id, **fields):
-        uri = '/floatingips/%s' % floatingip_id
-        return self.show_resource(uri, **fields)
-
-    def delete_floatingip(self, floatingip_id):
-        uri = '/floatingips/%s' % floatingip_id
-        return self.delete_resource(uri)
-
-    def list_floatingips(self, **filters):
-        uri = '/floatingips'
-        return self.list_resources(uri, **filters)
-
     def create_metering_label(self, **kwargs):
         uri = '/metering/metering-labels'
         post_data = {'metering_label': kwargs}
diff --git a/tempest/services/telemetry/json/alarming_client.py b/tempest/services/telemetry/json/alarming_client.py
new file mode 100644
index 0000000..ce14211
--- /dev/null
+++ b/tempest/services/telemetry/json/alarming_client.py
@@ -0,0 +1,98 @@
+# 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 oslo_serialization import jsonutils as json
+from six.moves.urllib import parse as urllib
+
+from tempest.common import service_client
+
+
+class AlarmingClient(service_client.ServiceClient):
+
+    version = '2'
+    uri_prefix = "v2"
+
+    def deserialize(self, body):
+        return json.loads(body.replace("\n", ""))
+
+    def serialize(self, body):
+        return json.dumps(body)
+
+    def list_alarms(self, query=None):
+        uri = '%s/alarms' % self.uri_prefix
+        uri_dict = {}
+        if query:
+            uri_dict = {'q.field': query[0],
+                        'q.op': query[1],
+                        'q.value': query[2]}
+        if uri_dict:
+            uri += "?%s" % urllib.urlencode(uri_dict)
+        resp, body = self.get(uri)
+        self.expected_success(200, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBodyList(resp, body)
+
+    def show_alarm(self, alarm_id):
+        uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
+        resp, body = self.get(uri)
+        self.expected_success(200, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBody(resp, body)
+
+    def show_alarm_history(self, alarm_id):
+        uri = "%s/alarms/%s/history" % (self.uri_prefix, alarm_id)
+        resp, body = self.get(uri)
+        self.expected_success(200, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBodyList(resp, body)
+
+    def delete_alarm(self, alarm_id):
+        uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
+        resp, body = self.delete(uri)
+        self.expected_success(204, resp.status)
+        if body:
+            body = self.deserialize(body)
+        return service_client.ResponseBody(resp, body)
+
+    def create_alarm(self, **kwargs):
+        uri = "%s/alarms" % self.uri_prefix
+        body = self.serialize(kwargs)
+        resp, body = self.post(uri, body)
+        self.expected_success(201, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBody(resp, body)
+
+    def update_alarm(self, alarm_id, **kwargs):
+        uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
+        body = self.serialize(kwargs)
+        resp, body = self.put(uri, body)
+        self.expected_success(200, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBody(resp, body)
+
+    def show_alarm_state(self, alarm_id):
+        uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
+        resp, body = self.get(uri)
+        self.expected_success(200, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBodyData(resp, body)
+
+    def alarm_set_state(self, alarm_id, state):
+        uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
+        body = self.serialize(state)
+        resp, body = self.put(uri, body)
+        self.expected_success(200, resp.status)
+        body = self.deserialize(body)
+        return service_client.ResponseBodyData(resp, body)
diff --git a/tempest/services/telemetry/json/telemetry_client.py b/tempest/services/telemetry/json/telemetry_client.py
index fc8951e..05530b1 100644
--- a/tempest/services/telemetry/json/telemetry_client.py
+++ b/tempest/services/telemetry/json/telemetry_client.py
@@ -72,10 +72,6 @@
         uri = '%s/meters' % self.uri_prefix
         return self._helper_list(uri, query)
 
-    def list_alarms(self, query=None):
-        uri = '%s/alarms' % self.uri_prefix
-        return self._helper_list(uri, query)
-
     def list_statistics(self, meter, period=None, query=None):
         uri = "%s/meters/%s/statistics" % (self.uri_prefix, meter)
         return self._helper_list(uri, query, period)
@@ -94,56 +90,3 @@
         self.expected_success(200, resp.status)
         body = self.deserialize(body)
         return service_client.ResponseBody(resp, body)
-
-    def show_alarm(self, alarm_id):
-        uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
-        resp, body = self.get(uri)
-        self.expected_success(200, resp.status)
-        body = self.deserialize(body)
-        return service_client.ResponseBody(resp, body)
-
-    def delete_alarm(self, alarm_id):
-        uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
-        resp, body = self.delete(uri)
-        self.expected_success(204, resp.status)
-        if body:
-            body = self.deserialize(body)
-        return service_client.ResponseBody(resp, body)
-
-    def create_alarm(self, **kwargs):
-        uri = "%s/alarms" % self.uri_prefix
-        body = self.serialize(kwargs)
-        resp, body = self.post(uri, body)
-        self.expected_success(201, resp.status)
-        body = self.deserialize(body)
-        return service_client.ResponseBody(resp, body)
-
-    def update_alarm(self, alarm_id, **kwargs):
-        uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
-        body = self.serialize(kwargs)
-        resp, body = self.put(uri, body)
-        self.expected_success(200, resp.status)
-        body = self.deserialize(body)
-        return service_client.ResponseBody(resp, body)
-
-    def show_alarm_state(self, alarm_id):
-        uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
-        resp, body = self.get(uri)
-        self.expected_success(200, resp.status)
-        body = self.deserialize(body)
-        return service_client.ResponseBodyData(resp, body)
-
-    def alarm_set_state(self, alarm_id, state):
-        uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
-        body = self.serialize(state)
-        resp, body = self.put(uri, body)
-        self.expected_success(200, resp.status)
-        body = self.deserialize(body)
-        return service_client.ResponseBodyData(resp, body)
-
-    def show_alarm_history(self, alarm_id):
-        uri = "%s/alarms/%s/history" % (self.uri_prefix, alarm_id)
-        resp, body = self.get(uri)
-        self.expected_success(200, resp.status)
-        body = self.deserialize(body)
-        return service_client.ResponseBodyList(resp, body)
diff --git a/tempest/test.py b/tempest/test.py
index 7b508ac..a9c8ba7 100644
--- a/tempest/test.py
+++ b/tempest/test.py
@@ -612,8 +612,8 @@
             admin_creds = cred_provider.get_admin_creds()
             admin_manager = clients.Manager(admin_creds)
             networks_client = admin_manager.compute_networks_client
-        return fixed_network.get_tenant_network(cred_provider,
-                                                networks_client)
+        return fixed_network.get_tenant_network(
+            cred_provider, networks_client, CONF.compute.fixed_network_name)
 
     def assertEmpty(self, list, msg=None):
         self.assertTrue(len(list) == 0, msg)
diff --git a/tempest/tests/cmd/test_javelin.py b/tempest/tests/cmd/test_javelin.py
index fc3d984..d328d56 100644
--- a/tempest/tests/cmd/test_javelin.py
+++ b/tempest/tests/cmd/test_javelin.py
@@ -106,10 +106,12 @@
         self.assertFalse(mocked_function.called)
 
     def test_create_users(self):
-        self.fake_client.identity.get_tenant_by_name.return_value = \
-            self.fake_object['tenant']
-        self.fake_client.identity.get_user_by_username.side_effect = \
-            lib_exc.NotFound("user is not found")
+        self.useFixture(mockpatch.Patch(
+                        'tempest.common.identity.get_tenant_by_name',
+                        return_value=self.fake_object['tenant']))
+        self.useFixture(mockpatch.Patch(
+                        'tempest.common.identity.get_user_by_username',
+                        side_effect=lib_exc.NotFound("user is not found")))
         self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
                                               return_value=self.fake_client))
 
@@ -125,8 +127,9 @@
                                                 enabled=True)
 
     def test_create_user_missing_tenant(self):
-        self.fake_client.identity.get_tenant_by_name.side_effect = \
-            lib_exc.NotFound("tenant is not found")
+        self.useFixture(mockpatch.Patch(
+                        'tempest.common.identity.get_tenant_by_name',
+                        side_effect=lib_exc.NotFound("tenant is not found")))
         self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
                                               return_value=self.fake_client))
 
@@ -289,8 +292,9 @@
 
         fake_tenant = self.fake_object['tenant']
         fake_auth = self.fake_client
-        fake_auth.identity.get_tenant_by_name.return_value = fake_tenant
-
+        self.useFixture(mockpatch.Patch(
+                        'tempest.common.identity.get_tenant_by_name',
+                        return_value=fake_tenant))
         self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
                                               return_value=fake_auth))
         javelin.destroy_tenants([fake_tenant])
@@ -304,9 +308,13 @@
         fake_tenant = self.fake_object['tenant']
 
         fake_auth = self.fake_client
-        fake_auth.identity.get_tenant_by_name.return_value = fake_tenant
-        fake_auth.identity.get_user_by_username.return_value = fake_user
+        fake_auth.identity.list_tenants.return_value = \
+            {'tenants': [fake_tenant]}
+        fake_auth.identity.list_users.return_value = {'users': [fake_user]}
 
+        self.useFixture(mockpatch.Patch(
+                        'tempest.common.identity.get_user_by_username',
+                        return_value=fake_user))
         self.useFixture(mockpatch.PatchObject(javelin, "keystone_admin",
                                               return_value=fake_auth))
 
diff --git a/tempest/tests/common/test_preprov_creds.py b/tempest/tests/common/test_preprov_creds.py
index 36dd976..fd7df16 100644
--- a/tempest/tests/common/test_preprov_creds.py
+++ b/tempest/tests/common/test_preprov_creds.py
@@ -17,17 +17,17 @@
 
 import mock
 from oslo_concurrency.fixture import lockutils as lockutils_fixtures
-from oslo_concurrency import lockutils
 from oslo_config import cfg
 from oslotest import mockpatch
+import shutil
 import six
 from tempest_lib import auth
+from tempest_lib import exceptions as lib_exc
 from tempest_lib.services.identity.v2 import token_client
 
 from tempest.common import cred_provider
 from tempest.common import preprov_creds
 from tempest import config
-from tempest import exceptions
 from tempest.tests import base
 from tempest.tests import fake_config
 from tempest.tests import fake_http
@@ -38,7 +38,11 @@
 
     fixed_params = {'name': 'test class',
                     'identity_version': 'v2',
-                    'admin_role': 'admin'}
+                    'test_accounts_file': 'fake_accounts_file',
+                    'accounts_lock_dir': 'fake_locks_dir',
+                    'admin_role': 'admin',
+                    'object_storage_operator_role': 'operator',
+                    'object_storage_reseller_admin_role': 'reseller'}
 
     def setUp(self):
         super(TestPreProvisionedCredentials, self).setUp()
@@ -77,9 +81,13 @@
         self.accounts_mock = self.useFixture(mockpatch.Patch(
             'tempest.common.preprov_creds.read_accounts_yaml',
             return_value=self.test_accounts))
-        cfg.CONF.set_default('test_accounts_file', 'fake_path', group='auth')
         self.useFixture(mockpatch.Patch('os.path.isfile', return_value=True))
 
+    def tearDown(self):
+        super(TestPreProvisionedCredentials, self).tearDown()
+        shutil.rmtree(self.fixed_params['accounts_lock_dir'],
+                      ignore_errors=True)
+
     def _get_hash_list(self, accounts_list):
         hash_list = []
         for account in accounts_list:
@@ -147,11 +155,10 @@
         with mock.patch('six.moves.builtins.open', mock.mock_open(),
                         create=True) as open_mock:
             test_account_class._get_free_hash(hash_list)
-            lock_path = os.path.join(lockutils.get_lock_path(
-                preprov_creds.CONF), 'test_accounts', hash_list[0])
+            lock_path = os.path.join(self.fixed_params['accounts_lock_dir'],
+                                     hash_list[0])
             open_mock.assert_called_once_with(lock_path, 'w')
-        mkdir_path = os.path.join(
-            preprov_creds.CONF.oslo_concurrency.lock_path, 'test_accounts')
+        mkdir_path = os.path.join(self.fixed_params['accounts_lock_dir'])
         mkdir_mock.mock.assert_called_once_with(mkdir_path)
 
     @mock.patch('oslo_concurrency.lockutils.lock')
@@ -165,7 +172,7 @@
             **self.fixed_params)
         with mock.patch('six.moves.builtins.open', mock.mock_open(),
                         create=True):
-            self.assertRaises(exceptions.InvalidConfiguration,
+            self.assertRaises(lib_exc.InvalidCredentials,
                               test_account_class._get_free_hash, hash_list)
 
     @mock.patch('oslo_concurrency.lockutils.lock')
@@ -187,9 +194,8 @@
         with mock.patch('six.moves.builtins.open', mock.mock_open(),
                         create=True) as open_mock:
             test_account_class._get_free_hash(hash_list)
-            lock_path = os.path.join(
-                lockutils.get_lock_path(preprov_creds.CONF),
-                'test_accounts', hash_list[3])
+            lock_path = os.path.join(self.fixed_params['accounts_lock_dir'],
+                                     hash_list[3])
             open_mock.assert_has_calls([mock.call(lock_path, 'w')])
 
     @mock.patch('oslo_concurrency.lockutils.lock')
@@ -204,11 +210,9 @@
         remove_mock = self.useFixture(mockpatch.Patch('os.remove'))
         rmdir_mock = self.useFixture(mockpatch.Patch('os.rmdir'))
         test_account_class.remove_hash(hash_list[2])
-        hash_path = os.path.join(lockutils.get_lock_path(preprov_creds.CONF),
-                                 'test_accounts',
+        hash_path = os.path.join(self.fixed_params['accounts_lock_dir'],
                                  hash_list[2])
-        lock_path = os.path.join(preprov_creds.CONF.oslo_concurrency.lock_path,
-                                 'test_accounts')
+        lock_path = self.fixed_params['accounts_lock_dir']
         remove_mock.mock.assert_called_once_with(hash_path)
         rmdir_mock.mock.assert_called_once_with(lock_path)
 
@@ -225,8 +229,7 @@
         remove_mock = self.useFixture(mockpatch.Patch('os.remove'))
         rmdir_mock = self.useFixture(mockpatch.Patch('os.rmdir'))
         test_account_class.remove_hash(hash_list[2])
-        hash_path = os.path.join(lockutils.get_lock_path(preprov_creds.CONF),
-                                 'test_accounts',
+        hash_path = os.path.join(self.fixed_params['accounts_lock_dir'],
                                  hash_list[2])
         remove_mock.mock.assert_called_once_with(hash_path)
         rmdir_mock.mock.assert_not_called()
@@ -316,7 +319,7 @@
             return_value=test_accounts))
         test_accounts_class = preprov_creds.PreProvisionedCredentialProvider(
             **self.fixed_params)
-        with mock.patch('tempest.services.compute.json.networks_client.'
+        with mock.patch('tempest_lib.services.compute.networks_client.'
                         'NetworksClient.list_networks',
                         return_value={'networks': [{'name': 'network-2',
                                                     'id': 'fake-id',
diff --git a/tempest/tests/common/test_service_clients.py b/tempest/tests/common/test_service_clients.py
index 4225da8..b0706f2 100644
--- a/tempest/tests/common/test_service_clients.py
+++ b/tempest/tests/common/test_service_clients.py
@@ -19,11 +19,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 quota_classes_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 services_client
 from tempest.services.compute.json import volumes_client \
     as compute_volumes_client
 from tempest.services.data_processing.v1_1 import data_processing_client
@@ -46,6 +44,7 @@
 from tempest.services.object_storage import container_client
 from tempest.services.object_storage import object_client
 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.json.admin import volume_hosts_client
 from tempest.services.volume.json.admin import volume_quotas_client
@@ -89,11 +88,9 @@
             baremetal_client.BaremetalClient,
             floating_ips_client.FloatingIPsClient,
             interfaces_client.InterfacesClient,
-            quota_classes_client.QuotaClassesClient,
             security_group_rules_client.SecurityGroupRulesClient,
             server_groups_client.ServerGroupsClient,
             servers_client.ServersClient,
-            services_client.ServicesClient,
             compute_volumes_client.VolumesClient,
             data_processing_client.DataProcessingClient,
             db_flavor_client.DatabaseFlavorsClient,
@@ -105,6 +102,7 @@
             object_client.ObjectClient,
             orchestration_client.OrchestrationClient,
             telemetry_client.TelemetryClient,
+            alarming_client.AlarmingClient,
             qos_client.QosSpecsClient,
             volume_hosts_client.VolumeHostsClient,
             volume_quotas_client.VolumeQuotasClient,
diff --git a/tempest/tests/services/compute/test_images_client.py b/tempest/tests/services/compute/test_images_client.py
deleted file mode 100644
index 1d532b7..0000000
--- a/tempest/tests/services/compute/test_images_client.py
+++ /dev/null
@@ -1,240 +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 images_client
-from tempest.tests import fake_auth_provider
-from tempest.tests.services.compute import base
-
-
-class TestImagesClient(base.BaseComputeServiceTest):
-    # Data Dictionaries used for testing #
-    FAKE_IMAGE_METADATA = {
-        "list":
-            {"metadata": {
-             "auto_disk_config": "True",
-             "Label": "Changed"
-             }},
-        "set_item":
-            {"meta": {
-             "auto_disk_config": "True"
-             }},
-        "show_item":
-            {"meta": {
-             "kernel_id": "nokernel",
-             }},
-        "update":
-            {"metadata": {
-             "kernel_id": "False",
-             "Label": "UpdatedImage"
-             }},
-        "set":
-            {"metadata": {
-             "Label": "Changed",
-             "auto_disk_config": "True"
-             }},
-        "delete_item": {}
-        }
-
-    FAKE_IMAGE_DATA = {
-        "list":
-            {"images": [
-             {"id": "70a599e0-31e7-49b7-b260-868f441e862b",
-              "links": [
-                    {"href": "http://openstack.example.com/v2/openstack" +
-                             "/images/70a599e0-31e7-49b7-b260-868f441e862b",
-                     "rel": "self"
-                     }
-              ],
-              "name": "fakeimage7"
-              }]},
-        "show": {"image": {
-            "created": "2011-01-01T01:02:03Z",
-            "id": "70a599e0-31e7-49b7-b260-868f441e862b",
-            "links": [
-                {
-                    "href": "http://openstack.example.com/v2/openstack" +
-                            "/images/70a599e0-31e7-49b7-b260-868f441e862b",
-                    "rel": "self"
-                },
-            ],
-            "metadata": {
-                "architecture": "x86_64",
-                "auto_disk_config": "True",
-                "kernel_id": "nokernel",
-                "ramdisk_id": "nokernel"
-            },
-            "minDisk": 0,
-            "minRam": 0,
-            "name": "fakeimage7",
-            "progress": 100,
-            "status": "ACTIVE",
-            "updated": "2011-01-01T01:02:03Z"}},
-        "delete": {}
-        }
-    func2mock = {
-        'get': 'tempest.common.service_client.ServiceClient.get',
-        'post': 'tempest.common.service_client.ServiceClient.post',
-        'put': 'tempest.common.service_client.ServiceClient.put',
-        'delete': 'tempest.common.service_client.ServiceClient.delete'}
-    # Variable definition
-    FAKE_IMAGE_ID = FAKE_IMAGE_DATA['show']['image']['id']
-    FAKE_CREATE_INFO = {'location': 'None'}
-    FAKE_METADATA = FAKE_IMAGE_METADATA['show_item']['meta']
-
-    def setUp(self):
-        super(TestImagesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = images_client.ImagesClient(fake_auth,
-                                                 "compute", "regionOne")
-
-    def _test_image_operation(self, operation="delete", bytes_body=False):
-        response_code = 200
-        mock_operation = self.func2mock['get']
-        expected_op = self.FAKE_IMAGE_DATA[operation]
-        params = {"image_id": self.FAKE_IMAGE_ID}
-        if operation == 'list':
-            function = self.client.list_images
-        elif operation == 'show':
-            function = self.client.show_image
-        else:
-            function = self.client.delete_image
-            mock_operation = self.func2mock['delete']
-            response_code = 204
-
-        self.check_service_client_function(
-            function, mock_operation, expected_op,
-            bytes_body, response_code, **params)
-
-    def _test_image_metadata(self, operation="set_item", bytes_body=False):
-        response_code = 200
-        expected_op = self.FAKE_IMAGE_METADATA[operation]
-        if operation == 'list':
-            function = self.client.list_image_metadata
-            mock_operation = self.func2mock['get']
-            params = {"image_id": self.FAKE_IMAGE_ID}
-
-        elif operation == 'set':
-            function = self.client.set_image_metadata
-            mock_operation = self.func2mock['put']
-            params = {"image_id": "_dummy_data",
-                      "meta": self.FAKE_METADATA}
-
-        elif operation == 'update':
-            function = self.client.update_image_metadata
-            mock_operation = self.func2mock['post']
-            params = {"image_id": self.FAKE_IMAGE_ID,
-                      "meta": self.FAKE_METADATA}
-
-        elif operation == 'show_item':
-            mock_operation = self.func2mock['get']
-            function = self.client.show_image_metadata_item
-            params = {"image_id": self.FAKE_IMAGE_ID,
-                      "key": "123"}
-
-        elif operation == 'delete_item':
-            function = self.client.delete_image_metadata_item
-            mock_operation = self.func2mock['delete']
-            response_code = 204
-            params = {"image_id": self.FAKE_IMAGE_ID,
-                      "key": "123"}
-
-        else:
-            function = self.client.set_image_metadata_item
-            mock_operation = self.func2mock['put']
-            params = {"image_id": self.FAKE_IMAGE_ID,
-                      "key": "123",
-                      "meta": self.FAKE_METADATA}
-
-        self.check_service_client_function(
-            function, mock_operation, expected_op,
-            bytes_body, response_code, **params)
-
-    def _test_resource_deleted(self, bytes_body=False):
-        params = {"id": self.FAKE_IMAGE_ID}
-        expected_op = self.FAKE_IMAGE_DATA['show']['image']
-        self.useFixture(mockpatch.Patch('tempest.services.compute.json'
-                        '.images_client.ImagesClient.show_image',
-                                        side_effect=lib_exc.NotFound))
-        self.assertEqual(True, self.client.is_resource_deleted(**params))
-        tempdata = copy.deepcopy(self.FAKE_IMAGE_DATA['show'])
-        tempdata['image']['id'] = None
-        self.useFixture(mockpatch.Patch('tempest.services.compute.json'
-                        '.images_client.ImagesClient.show_image',
-                                        return_value=expected_op))
-        self.assertEqual(False, self.client.is_resource_deleted(**params))
-
-    def test_list_images_with_str_body(self):
-        self._test_image_operation('list')
-
-    def test_list_images_with_bytes_body(self):
-        self._test_image_operation('list', True)
-
-    def test_show_image_with_str_body(self):
-        self._test_image_operation('show')
-
-    def test_show_image_with_bytes_body(self):
-        self._test_image_operation('show', True)
-
-    def test_delete_image_with_str_body(self):
-        self._test_image_operation('delete')
-
-    def test_delete_image_with_bytes_body(self):
-        self._test_image_operation('delete', True)
-
-    def test_list_image_metadata_with_str_body(self):
-        self._test_image_metadata('list')
-
-    def test_list_image_metadata_with_bytes_body(self):
-        self._test_image_metadata('list', True)
-
-    def test_set_image_metadata_with_str_body(self):
-        self._test_image_metadata('set')
-
-    def test_set_image_metadata_with_bytes_body(self):
-        self._test_image_metadata('set', True)
-
-    def test_update_image_metadata_with_str_body(self):
-        self._test_image_metadata('update')
-
-    def test_update_image_metadata_with_bytes_body(self):
-        self._test_image_metadata('update', True)
-
-    def test_set_image_metadata_item_with_str_body(self):
-        self._test_image_metadata()
-
-    def test_set_image_metadata_item_with_bytes_body(self):
-        self._test_image_metadata(bytes_body=True)
-
-    def test_show_image_metadata_item_with_str_body(self):
-        self._test_image_metadata('show_item')
-
-    def test_show_image_metadata_item_with_bytes_body(self):
-        self._test_image_metadata('show_item', True)
-
-    def test_delete_image_metadata_item_with_str_body(self):
-        self._test_image_metadata('delete_item')
-
-    def test_delete_image_metadata_item_with_bytes_body(self):
-        self._test_image_metadata('delete_item', True)
-
-    def test_resource_delete_with_str_body(self):
-        self._test_resource_deleted()
-
-    def test_resource_delete_with_bytes_body(self):
-        self._test_resource_deleted(True)
diff --git a/tempest/tests/services/compute/test_instance_usage_audit_log_client.py b/tempest/tests/services/compute/test_instance_usage_audit_log_client.py
deleted file mode 100644
index b4af9d5..0000000
--- a/tempest/tests/services/compute/test_instance_usage_audit_log_client.py
+++ /dev/null
@@ -1,74 +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 datetime
-
-from tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import instance_usage_audit_log_client
-from tempest.tests.services.compute import base
-
-
-class TestInstanceUsagesAuditLogClient(base.BaseComputeServiceTest):
-
-    FAKE_AUDIT_LOG = {
-        "hosts_not_run": [
-            "f4eb7cfd155f4574967f8b55a7faed75"
-        ],
-        "log": {},
-        "num_hosts": 1,
-        "num_hosts_done": 0,
-        "num_hosts_not_run": 1,
-        "num_hosts_running": 0,
-        "overall_status": "0 of 1 hosts done. 0 errors.",
-        "period_beginning": "2012-12-01 00:00:00",
-        "period_ending": "2013-01-01 00:00:00",
-        "total_errors": 0,
-        "total_instances": 0
-    }
-
-    def setUp(self):
-        super(TestInstanceUsagesAuditLogClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = (instance_usage_audit_log_client.
-                       InstanceUsagesAuditLogClient(fake_auth, 'compute',
-                                                    'regionOne'))
-
-    def _test_list_instance_usage_audit_logs(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.list_instance_usage_audit_logs,
-            'tempest.common.service_client.ServiceClient.get',
-            {"instance_usage_audit_logs": self.FAKE_AUDIT_LOG},
-            bytes_body)
-
-    def test_list_instance_usage_audit_logs_with_str_body(self):
-        self._test_list_instance_usage_audit_logs()
-
-    def test_list_instance_usage_audit_logs_with_bytes_body(self):
-        self._test_list_instance_usage_audit_logs(bytes_body=True)
-
-    def _test_show_instance_usage_audit_log(self, bytes_body=False):
-        before_time = datetime.datetime(2012, 12, 1, 0, 0)
-        self.check_service_client_function(
-            self.client.show_instance_usage_audit_log,
-            'tempest.common.service_client.ServiceClient.get',
-            {"instance_usage_audit_log": self.FAKE_AUDIT_LOG},
-            bytes_body,
-            time_before=before_time)
-
-    def test_show_instance_usage_audit_log_with_str_body(self):
-        self._test_show_instance_usage_audit_log()
-
-    def test_show_network_with_bytes_body_with_bytes_body(self):
-        self._test_show_instance_usage_audit_log(bytes_body=True)
diff --git a/tempest/tests/services/compute/test_limits_client.py b/tempest/tests/services/compute/test_limits_client.py
deleted file mode 100644
index 733d3d1..0000000
--- a/tempest/tests/services/compute/test_limits_client.py
+++ /dev/null
@@ -1,67 +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_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import limits_client
-from tempest.tests.services.compute import base
-
-
-class TestLimitsClient(base.BaseComputeServiceTest):
-
-    def setUp(self):
-        super(TestLimitsClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = limits_client.LimitsClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_show_limits(self, bytes_body=False):
-        expected = {
-            "limits": {
-                "rate": [],
-                "absolute": {
-                    "maxServerMeta": 128,
-                    "maxPersonality": 5,
-                    "totalServerGroupsUsed": 0,
-                    "maxImageMeta": 128,
-                    "maxPersonalitySize": 10240,
-                    "maxServerGroups": 10,
-                    "maxSecurityGroupRules": 20,
-                    "maxTotalKeypairs": 100,
-                    "totalCoresUsed": 0,
-                    "totalRAMUsed": 0,
-                    "totalInstancesUsed": 0,
-                    "maxSecurityGroups": 10,
-                    "totalFloatingIpsUsed": 0,
-                    "maxTotalCores": 20,
-                    "totalSecurityGroupsUsed": 0,
-                    "maxTotalFloatingIps": 10,
-                    "maxTotalInstances": 10,
-                    "maxTotalRAMSize": 51200,
-                    "maxServerGroupMembers": 10
-                    }
-            }
-        }
-
-        self.check_service_client_function(
-            self.client.show_limits,
-            'tempest.common.service_client.ServiceClient.get',
-            expected,
-            bytes_body)
-
-    def test_show_limits_with_str_body(self):
-        self._test_show_limits()
-
-    def test_show_limits_with_bytes_body(self):
-        self._test_show_limits(bytes_body=True)
diff --git a/tempest/tests/services/compute/test_migrations_client.py b/tempest/tests/services/compute/test_migrations_client.py
deleted file mode 100644
index 55f2ef2..0000000
--- a/tempest/tests/services/compute/test_migrations_client.py
+++ /dev/null
@@ -1,53 +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_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import migrations_client
-from tempest.tests.services.compute import base
-
-
-class TestMigrationsClient(base.BaseComputeServiceTest):
-    FAKE_MIGRATION_INFO = {"migrations": [{
-        "created_at": "2012-10-29T13:42:02",
-        "dest_compute": "compute2",
-        "dest_host": "1.2.3.4",
-        "dest_node": "node2",
-        "id": 1234,
-        "instance_uuid": "e9e4fdd7-f956-44ff-bfeb-d654a96ab3a2",
-        "new_instance_type_id": 2,
-        "old_instance_type_id": 1,
-        "source_compute": "compute1",
-        "source_node": "node1",
-        "status": "finished",
-        "updated_at": "2012-10-29T13:42:02"}]}
-
-    def setUp(self):
-        super(TestMigrationsClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.mg_client_obj = migrations_client.MigrationsClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_list_migrations(self, bytes_body=False):
-        self.check_service_client_function(
-            self.mg_client_obj.list_migrations,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_MIGRATION_INFO,
-            bytes_body)
-
-    def test_list_migration_with_str_body(self):
-        self._test_list_migrations()
-
-    def test_list_migration_with_bytes_body(self):
-        self._test_list_migrations(True)
diff --git a/tempest/tests/services/compute/test_networks_client.py b/tempest/tests/services/compute/test_networks_client.py
deleted file mode 100644
index cec8262..0000000
--- a/tempest/tests/services/compute/test_networks_client.py
+++ /dev/null
@@ -1,95 +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_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import networks_client
-from tempest.tests.services.compute import base
-
-
-class TestNetworksClient(base.BaseComputeServiceTest):
-
-    FAKE_NETWORK = {
-        "bridge": None,
-        "vpn_public_port": None,
-        "dhcp_start": None,
-        "bridge_interface": None,
-        "share_address": None,
-        "updated_at": None,
-        "id": "34d5ae1e-5659-49cf-af80-73bccd7d7ad3",
-        "cidr_v6": None,
-        "deleted_at": None,
-        "gateway": None,
-        "rxtx_base": None,
-        "label": u'30d7',
-        "priority": None,
-        "project_id": None,
-        "vpn_private_address": None,
-        "deleted": None,
-        "vlan": None,
-        "broadcast": None,
-        "netmask": None,
-        "injected": None,
-        "cidr": None,
-        "vpn_public_address": None,
-        "multi_host": None,
-        "enable_dhcp": None,
-        "dns2": None,
-        "created_at": None,
-        "host": None,
-        "mtu": None,
-        "gateway_v6": None,
-        "netmask_v6": None,
-        "dhcp_server": None,
-        "dns1": None
-        }
-
-    network_id = "34d5ae1e-5659-49cf-af80-73bccd7d7ad3"
-
-    FAKE_NETWORKS = [FAKE_NETWORK]
-
-    def setUp(self):
-        super(TestNetworksClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = networks_client.NetworksClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_list_networks(self, bytes_body=False):
-        fake_list = {"networks": self.FAKE_NETWORKS}
-        self.check_service_client_function(
-            self.client.list_networks,
-            'tempest.common.service_client.ServiceClient.get',
-            fake_list,
-            bytes_body)
-
-    def test_list_networks_with_str_body(self):
-        self._test_list_networks()
-
-    def test_list_networks_with_bytes_body(self):
-        self._test_list_networks(bytes_body=True)
-
-    def _test_show_network(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_network,
-            'tempest.common.service_client.ServiceClient.get',
-            {"network": self.FAKE_NETWORK},
-            bytes_body,
-            network_id=self.network_id
-            )
-
-    def test_show_network_with_str_body(self):
-        self._test_show_network()
-
-    def test_show_network_with_bytes_body(self):
-        self._test_show_network(bytes_body=True)
diff --git a/tempest/tests/services/compute/test_quota_classes_client.py b/tempest/tests/services/compute/test_quota_classes_client.py
deleted file mode 100644
index 29800a2..0000000
--- a/tempest/tests/services/compute/test_quota_classes_client.py
+++ /dev/null
@@ -1,72 +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 tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import quota_classes_client
-from tempest.tests.services.compute import base
-
-
-class TestQuotaClassesClient(base.BaseComputeServiceTest):
-
-    FAKE_QUOTA_CLASS_SET = {
-        "injected_file_content_bytes": 10240,
-        "metadata_items": 128,
-        "server_group_members": 10,
-        "server_groups": 10,
-        "ram": 51200,
-        "floating_ips": 10,
-        "key_pairs": 100,
-        "id": u'\u2740(*\xb4\u25e1`*)\u2740',
-        "instances": 10,
-        "security_group_rules": 20,
-        "security_groups": 10,
-        "injected_files": 5,
-        "cores": 20,
-        "fixed_ips": -1,
-        "injected_file_path_bytes": 255,
-        }
-
-    def setUp(self):
-        super(TestQuotaClassesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = quota_classes_client.QuotaClassesClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_show_quota_class_set(self, bytes_body=False):
-        fake_body = {'quota_class_set': self.FAKE_QUOTA_CLASS_SET}
-        self.check_service_client_function(
-            self.client.show_quota_class_set,
-            'tempest.common.service_client.ServiceClient.get',
-            fake_body,
-            bytes_body,
-            quota_class_id="test")
-
-    def test_show_quota_class_set_with_str_body(self):
-        self._test_show_quota_class_set()
-
-    def test_show_quota_class_set_with_bytes_body(self):
-        self._test_show_quota_class_set(bytes_body=True)
-
-    def test_update_quota_class_set(self):
-        fake_quota_class_set = copy.deepcopy(self.FAKE_QUOTA_CLASS_SET)
-        fake_quota_class_set.pop("id")
-        fake_body = {'quota_class_set': fake_quota_class_set}
-        self.check_service_client_function(
-            self.client.update_quota_class_set,
-            'tempest.common.service_client.ServiceClient.put',
-            fake_body,
-            quota_class_id="test")
diff --git a/tempest/tests/services/compute/test_quotas_client.py b/tempest/tests/services/compute/test_quotas_client.py
deleted file mode 100644
index 9a9d8fe..0000000
--- a/tempest/tests/services/compute/test_quotas_client.py
+++ /dev/null
@@ -1,93 +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 tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import quotas_client
-from tempest.tests.services.compute import base
-
-
-class TestQuotasClient(base.BaseComputeServiceTest):
-
-    FAKE_QUOTA_SET = {
-        "quota_set": {
-            "injected_file_content_bytes": 10240,
-            "metadata_items": 128,
-            "server_group_members": 10,
-            "server_groups": 10,
-            "ram": 51200,
-            "floating_ips": 10,
-            "key_pairs": 100,
-            "id": "8421f7be61064f50b680465c07f334af",
-            "instances": 10,
-            "security_group_rules": 20,
-            "injected_files": 5,
-            "cores": 20,
-            "fixed_ips": -1,
-            "injected_file_path_bytes": 255,
-            "security_groups": 10}
-        }
-
-    project_id = "8421f7be61064f50b680465c07f334af"
-
-    def setUp(self):
-        super(TestQuotasClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = quotas_client.QuotasClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_show_quota_set(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_quota_set,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_QUOTA_SET,
-            to_utf=bytes_body,
-            tenant_id=self.project_id)
-
-    def test_show_quota_set_with_str_body(self):
-        self._test_show_quota_set()
-
-    def test_show_quota_set_with_bytes_body(self):
-        self._test_show_quota_set(bytes_body=True)
-
-    def _test_show_default_quota_set(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_default_quota_set,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_QUOTA_SET,
-            to_utf=bytes_body,
-            tenant_id=self.project_id)
-
-    def test_show_default_quota_set_with_str_body(self):
-        self._test_show_quota_set()
-
-    def test_show_default_quota_set_with_bytes_body(self):
-        self._test_show_quota_set(bytes_body=True)
-
-    def test_update_quota_set(self):
-        fake_quota_set = copy.deepcopy(self.FAKE_QUOTA_SET)
-        fake_quota_set['quota_set'].pop("id")
-        self.check_service_client_function(
-            self.client.update_quota_set,
-            'tempest.common.service_client.ServiceClient.put',
-            fake_quota_set,
-            tenant_id=self.project_id)
-
-    def test_delete_quota_set(self):
-        self.check_service_client_function(
-            self.client.delete_quota_set,
-            'tempest.common.service_client.ServiceClient.delete',
-            {}, status=202, tenant_id=self.project_id)
diff --git a/tempest/tests/services/compute/test_security_group_default_rules_client.py b/tempest/tests/services/compute/test_security_group_default_rules_client.py
deleted file mode 100644
index 99ab305..0000000
--- a/tempest/tests/services/compute/test_security_group_default_rules_client.py
+++ /dev/null
@@ -1,89 +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_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import security_group_default_rules_client
-from tempest.tests.services.compute import base
-
-
-class TestSecurityGroupDefaultRulesClient(base.BaseComputeServiceTest):
-    FAKE_RULE = {
-        "from_port": 80,
-        "id": 1,
-        "ip_protocol": "TCP",
-        "ip_range": {
-            "cidr": "10.10.10.0/24"
-        },
-        "to_port": 80
-    }
-
-    def setUp(self):
-        super(TestSecurityGroupDefaultRulesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = (security_group_default_rules_client.
-                       SecurityGroupDefaultRulesClient(fake_auth, 'compute',
-                                                       'regionOne'))
-
-    def _test_list_security_group_default_rules(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.list_security_group_default_rules,
-            'tempest.common.service_client.ServiceClient.get',
-            {"security_group_default_rules": [self.FAKE_RULE]},
-            to_utf=bytes_body)
-
-    def test_list_security_group_default_rules_with_str_body(self):
-        self._test_list_security_group_default_rules()
-
-    def test_list_security_group_default_rules_with_bytes_body(self):
-        self._test_list_security_group_default_rules(bytes_body=True)
-
-    def _test_show_security_group_default_rule(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_security_group_default_rule,
-            'tempest.common.service_client.ServiceClient.get',
-            {"security_group_default_rule": self.FAKE_RULE},
-            to_utf=bytes_body,
-            security_group_default_rule_id=1)
-
-    def test_show_security_group_default_rule_with_str_body(self):
-        self._test_show_security_group_default_rule()
-
-    def test_show_security_group_default_rule_with_bytes_body(self):
-        self._test_show_security_group_default_rule(bytes_body=True)
-
-    def _test_create_security_default_group_rule(self, bytes_body=False):
-        request_body = {
-            "to_port": 80,
-            "from_port": 80,
-            "ip_protocol": "TCP",
-            "cidr": "10.10.10.0/24"
-        }
-        self.check_service_client_function(
-            self.client.create_security_default_group_rule,
-            'tempest.common.service_client.ServiceClient.post',
-            {"security_group_default_rule": self.FAKE_RULE},
-            to_utf=bytes_body, **request_body)
-
-    def test_create_security_default_group_rule_with_str_body(self):
-        self._test_create_security_default_group_rule()
-
-    def test_create_security_default_group_rule_with_bytes_body(self):
-        self._test_create_security_default_group_rule(bytes_body=True)
-
-    def test_delete_security_group_default_rule(self):
-        self.check_service_client_function(
-            self.client.delete_security_group_default_rule,
-            'tempest.common.service_client.ServiceClient.delete',
-            {}, status=204, security_group_default_rule_id=1)
diff --git a/tempest/tests/services/compute/test_security_groups_client.py b/tempest/tests/services/compute/test_security_groups_client.py
deleted file mode 100644
index 9e40b96..0000000
--- a/tempest/tests/services/compute/test_security_groups_client.py
+++ /dev/null
@@ -1,113 +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 oslotest import mockpatch
-from tempest_lib import exceptions as lib_exc
-from tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import security_groups_client
-from tempest.tests.services.compute import base
-
-
-class TestSecurityGroupsClient(base.BaseComputeServiceTest):
-
-    FAKE_SECURITY_GROUP_INFO = [{
-        "description": "default",
-        "id": "3fb26eb3-581b-4420-9963-b0879a026506",
-        "name": "default",
-        "rules": [],
-        "tenant_id": "openstack"
-    }]
-
-    def setUp(self):
-        super(TestSecurityGroupsClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = security_groups_client.SecurityGroupsClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_list_security_groups(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.list_security_groups,
-            'tempest.common.service_client.ServiceClient.get',
-            {"security_groups": self.FAKE_SECURITY_GROUP_INFO},
-            to_utf=bytes_body)
-
-    def test_list_security_groups_with_str_body(self):
-        self._test_list_security_groups()
-
-    def test_list_security_groups_with_bytes_body(self):
-        self._test_list_security_groups(bytes_body=True)
-
-    def _test_show_security_group(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_security_group,
-            'tempest.common.service_client.ServiceClient.get',
-            {"security_group": self.FAKE_SECURITY_GROUP_INFO[0]},
-            to_utf=bytes_body,
-            security_group_id='fake-id')
-
-    def test_show_security_group_with_str_body(self):
-        self._test_show_security_group()
-
-    def test_show_security_group_with_bytes_body(self):
-        self._test_show_security_group(bytes_body=True)
-
-    def _test_create_security_group(self, bytes_body=False):
-        post_body = {"name": "test", "description": "test_group"}
-        self.check_service_client_function(
-            self.client.create_security_group,
-            'tempest.common.service_client.ServiceClient.post',
-            {"security_group": self.FAKE_SECURITY_GROUP_INFO[0]},
-            to_utf=bytes_body,
-            kwargs=post_body)
-
-    def test_create_security_group_with_str_body(self):
-        self._test_create_security_group()
-
-    def test_create_security_group_with_bytes_body(self):
-        self._test_create_security_group(bytes_body=True)
-
-    def _test_update_security_group(self, bytes_body=False):
-        req_body = {"name": "test", "description": "test_group"}
-        self.check_service_client_function(
-            self.client.update_security_group,
-            'tempest.common.service_client.ServiceClient.put',
-            {"security_group": self.FAKE_SECURITY_GROUP_INFO[0]},
-            to_utf=bytes_body,
-            security_group_id='fake-id',
-            kwargs=req_body)
-
-    def test_update_security_group_with_str_body(self):
-        self._test_update_security_group()
-
-    def test_update_security_group_with_bytes_body(self):
-        self._test_update_security_group(bytes_body=True)
-
-    def test_delete_security_group(self):
-        self.check_service_client_function(
-            self.client.delete_security_group,
-            'tempest.common.service_client.ServiceClient.delete',
-            {}, status=202, security_group_id='fake-id')
-
-    def test_is_resource_deleted_true(self):
-        mod = ('tempest.services.compute.json.security_groups_client.'
-               'SecurityGroupsClient.show_security_group')
-        self.useFixture(mockpatch.Patch(mod, side_effect=lib_exc.NotFound))
-        self.assertTrue(self.client.is_resource_deleted('fake-id'))
-
-    def test_is_resource_deleted_false(self):
-        mod = ('tempest.services.compute.json.security_groups_client.'
-               'SecurityGroupsClient.show_security_group')
-        self.useFixture(mockpatch.Patch(mod, return_value='success'))
-        self.assertFalse(self.client.is_resource_deleted('fake-id'))
diff --git a/tempest/tests/services/compute/test_services_client.py b/tempest/tests/services/compute/test_services_client.py
deleted file mode 100644
index fce28e8..0000000
--- a/tempest/tests/services/compute/test_services_client.py
+++ /dev/null
@@ -1,95 +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 tempest_lib.tests import fake_auth_provider
-
-from tempest.services.compute.json import services_client
-from tempest.tests.services.compute import base
-
-
-class TestServicesClient(base.BaseComputeServiceTest):
-
-    FAKE_SERVICES = {
-        "services":
-        [{
-            "status": "enabled",
-            "binary": "nova-conductor",
-            "zone": "internal",
-            "state": "up",
-            "updated_at": "2015-08-19T06:50:55.000000",
-            "host": "controller",
-            "disabled_reason": None,
-            "id": 1
-        }]
-    }
-
-    FAKE_SERVICE = {
-        "service":
-        {
-            "status": "enabled",
-            "binary": "nova-conductor",
-            "host": "controller"
-        }
-    }
-
-    def setUp(self):
-        super(TestServicesClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = services_client.ServicesClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def test_list_services_with_str_body(self):
-        self.check_service_client_function(
-            self.client.list_services,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_SERVICES)
-
-    def test_list_services_with_bytes_body(self):
-        self.check_service_client_function(
-            self.client.list_services,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_SERVICES, to_utf=True)
-
-    def _test_enable_service(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.enable_service,
-            'tempest.common.service_client.ServiceClient.put',
-            self.FAKE_SERVICE,
-            bytes_body,
-            host_name="nova-conductor", binary="controller")
-
-    def test_enable_service_with_str_body(self):
-        self._test_enable_service()
-
-    def test_enable_service_with_bytes_body(self):
-        self._test_enable_service(bytes_body=True)
-
-    def _test_disable_service(self, bytes_body=False):
-        fake_service = copy.deepcopy(self.FAKE_SERVICE)
-        fake_service["service"]["status"] = "disable"
-
-        self.check_service_client_function(
-            self.client.disable_service,
-            'tempest.common.service_client.ServiceClient.put',
-            fake_service,
-            bytes_body,
-            host_name="nova-conductor", binary="controller")
-
-    def test_disable_service_with_str_body(self):
-        self._test_disable_service()
-
-    def test_disable_service_with_bytes_body(self):
-        self._test_disable_service(bytes_body=True)
diff --git a/tempest/tests/services/compute/test_snapshots_client.py b/tempest/tests/services/compute/test_snapshots_client.py
deleted file mode 100644
index c24c6ae..0000000
--- a/tempest/tests/services/compute/test_snapshots_client.py
+++ /dev/null
@@ -1,103 +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 oslotest import mockpatch
-from tempest_lib import exceptions as lib_exc
-
-from tempest.services.compute.json import snapshots_client
-from tempest.tests import fake_auth_provider
-from tempest.tests.services.compute import base
-
-
-class TestSnapshotsClient(base.BaseComputeServiceTest):
-
-    FAKE_SNAPSHOT = {
-        "createdAt": "2015-10-02T16:27:54.724209",
-        "displayDescription": u"Another \u1234.",
-        "displayName": u"v\u1234-001",
-        "id": "100",
-        "size": 100,
-        "status": "available",
-        "volumeId": "12"
-    }
-
-    FAKE_SNAPSHOTS = {"snapshots": [FAKE_SNAPSHOT]}
-
-    def setUp(self):
-        super(TestSnapshotsClient, self).setUp()
-        fake_auth = fake_auth_provider.FakeAuthProvider()
-        self.client = snapshots_client.SnapshotsClient(
-            fake_auth, 'compute', 'regionOne')
-
-    def _test_create_snapshot(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.create_snapshot,
-            'tempest.common.service_client.ServiceClient.post',
-            {"snapshot": self.FAKE_SNAPSHOT},
-            to_utf=bytes_body, status=200,
-            volume_id=self.FAKE_SNAPSHOT["volumeId"])
-
-    def test_create_snapshot_with_str_body(self):
-        self._test_create_snapshot()
-
-    def test_create_shapshot_with_bytes_body(self):
-        self._test_create_snapshot(bytes_body=True)
-
-    def _test_show_snapshot(self, bytes_body=False):
-        self.check_service_client_function(
-            self.client.show_snapshot,
-            'tempest.common.service_client.ServiceClient.get',
-            {"snapshot": self.FAKE_SNAPSHOT},
-            to_utf=bytes_body, snapshot_id=self.FAKE_SNAPSHOT["id"])
-
-    def test_show_snapshot_with_str_body(self):
-        self._test_show_snapshot()
-
-    def test_show_snapshot_with_bytes_body(self):
-        self._test_show_snapshot(bytes_body=True)
-
-    def _test_list_snapshots(self, bytes_body=False, **params):
-        self.check_service_client_function(
-            self.client.list_snapshots,
-            'tempest.common.service_client.ServiceClient.get',
-            self.FAKE_SNAPSHOTS, to_utf=bytes_body, **params)
-
-    def test_list_snapshots_with_str_body(self):
-        self._test_list_snapshots()
-
-    def test_list_snapshots_with_byte_body(self):
-        self._test_list_snapshots(bytes_body=True)
-
-    def test_list_snapshots_with_params(self):
-        self._test_list_snapshots('fake')
-
-    def test_delete_snapshot(self):
-        self.check_service_client_function(
-            self.client.delete_snapshot,
-            'tempest.common.service_client.ServiceClient.delete',
-            {}, status=202, snapshot_id=self.FAKE_SNAPSHOT['id'])
-
-    def test_is_resource_deleted_true(self):
-        module = ('tempest.services.compute.json.snapshots_client.'
-                  'SnapshotsClient.show_snapshot')
-        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.snapshots_client.'
-                  'SnapshotsClient.show_snapshot')
-        self.useFixture(mockpatch.Patch(
-            module, return_value={}))
-        self.assertFalse(self.client.is_resource_deleted('fake-id'))
diff --git a/tempest/thirdparty/boto/test_ec2_instance_run.py b/tempest/thirdparty/boto/test_ec2_instance_run.py
index 49a1854..6c1b362 100644
--- a/tempest/thirdparty/boto/test_ec2_instance_run.py
+++ b/tempest/thirdparty/boto/test_ec2_instance_run.py
@@ -175,23 +175,23 @@
             instance.add_tag('key1', value='value1')
 
         tags = self.ec2_client.get_all_tags()
-        td = {item.name: item.value for item in tags}
+        td = dict((item.name, item.value) for item in tags)
 
         self.assertIn('key1', td)
         self.assertEqual('value1', td['key1'])
 
         tags = self.ec2_client.get_all_tags(filters={'key': 'key1'})
-        td = {item.name: item.value for item in tags}
+        td = dict((item.name, item.value) for item in tags)
         self.assertIn('key1', td)
         self.assertEqual('value1', td['key1'])
 
         tags = self.ec2_client.get_all_tags(filters={'value': 'value1'})
-        td = {item.name: item.value for item in tags}
+        td = dict((item.name, item.value) for item in tags)
         self.assertIn('key1', td)
         self.assertEqual('value1', td['key1'])
 
         tags = self.ec2_client.get_all_tags(filters={'key': 'value2'})
-        td = {item.name: item.value for item in tags}
+        td = dict((item.name, item.value) for item in tags)
         self.assertNotIn('key1', td)
 
         for instance in reservation.instances: