diff --git a/contrib/post_test_hook.sh b/contrib/post_test_hook.sh
index e934cc4..a0353ca 100644
--- a/contrib/post_test_hook.sh
+++ b/contrib/post_test_hook.sh
@@ -16,10 +16,6 @@
 # First argument ($1) expects 'rbac-role' as value for setting appropriate
 # tempest rbac option 'rbac_test_role'.
 
-# Install pip manually.
-PATROLE_DIR=$BASE/new/patrole
-sudo pip install -e $PATROLE_DIR
-
 # Allow tempest.conf to be modified by Jenkins.
 sudo chown -R jenkins:stack $BASE/new/tempest
 sudo chown -R jenkins:stack $BASE/data/tempest
diff --git a/contrib/pre_test_hook.sh b/contrib/pre_test_hook.sh
index ffa4c20..bbe05c7 100755
--- a/contrib/pre_test_hook.sh
+++ b/contrib/pre_test_hook.sh
@@ -14,6 +14,5 @@
 
 # This script is executed inside pre_test_hook function in devstack gate.
 # Installs patrole tempest plugin manually.
-
 PATROLE_DIR=$BASE/new/patrole
 sudo pip install -e $PATROLE_DIR
diff --git a/patrole_tempest_plugin/plugin.py b/patrole_tempest_plugin/plugin.py
index 3abf4aa..cfe5c0a 100644
--- a/patrole_tempest_plugin/plugin.py
+++ b/patrole_tempest_plugin/plugin.py
@@ -25,7 +25,7 @@
     def load_tests(self):
         base_path = os.path.split(os.path.dirname(
             os.path.abspath(__file__)))[0]
-        test_dir = "patrole_tempest_plugin/tests"
+        test_dir = "patrole_tempest_plugin/tests/api"
         full_test_dir = os.path.join(base_path, test_dir)
         return full_test_dir, base_path
 
diff --git a/patrole_tempest_plugin/rbac_policy_parser.py b/patrole_tempest_plugin/rbac_policy_parser.py
index d4e989b..1047d37 100644
--- a/patrole_tempest_plugin/rbac_policy_parser.py
+++ b/patrole_tempest_plugin/rbac_policy_parser.py
@@ -81,7 +81,7 @@
         path = getattr(CONF.rbac, '%s_policy_file' % str(service), None)
         if not path:
             LOG.info("No config option found for %s,"
-                     " using default path" % str(service))
+                     " using default path", str(service))
             path = os.path.join('/etc', service, 'policy.json')
         self.path = path
         self.rules = policy.Rules.load(self._get_policy_data(service),
diff --git a/patrole_tempest_plugin/rbac_rule_validation.py b/patrole_tempest_plugin/rbac_rule_validation.py
index d77b2d6..c63ef90 100644
--- a/patrole_tempest_plugin/rbac_rule_validation.py
+++ b/patrole_tempest_plugin/rbac_rule_validation.py
@@ -104,7 +104,7 @@
                            (role, rule))
                     LOG.error(msg)
                     raise exceptions.Forbidden(
-                        "%s exception was: %s" % (msg, e))
+                        "%s Exception was: %s" % (msg, e))
             except Exception as e:
                 exc_info = sys.exc_info()
                 error_details = exc_info[1].__str__()
@@ -115,8 +115,8 @@
                 six.reraise(exc_info[0], exc_info[0](msg), exc_info[2])
             else:
                 if not allowed:
-                    LOG.error("Role %s was allowed to perform %s" %
-                              (role, rule))
+                    LOG.error("Role %s was allowed to perform %s",
+                              role, rule)
                     raise rbac_exceptions.RbacOverPermission(
                         "OverPermission: Role %s was allowed to perform %s" %
                         (role, rule))
diff --git a/patrole_tempest_plugin/rbac_utils.py b/patrole_tempest_plugin/rbac_utils.py
index 4cddb8d..fe2d99f 100644
--- a/patrole_tempest_plugin/rbac_utils.py
+++ b/patrole_tempest_plugin/rbac_utils.py
@@ -18,7 +18,6 @@
 
 from oslo_log import log as logging
 import oslo_utils.uuidutils as uuid_utils
-import six
 
 from tempest.common import credentials_factory as credentials
 from tempest import config
@@ -29,19 +28,11 @@
 LOG = logging.getLogger(__name__)
 
 
-class Singleton(type):
-    _instances = {}
-
-    def __call__(cls, *args, **kwargs):
-        if cls not in cls._instances:
-            cls._instances[cls] = super(Singleton, cls).__call__(*args,
-                                                                 **kwargs)
-        return cls._instances[cls]
-
-
-@six.add_metaclass(Singleton)
 class RbacUtils(object):
 
+    def __init__(self, test_obj):
+        self.switch_role(test_obj, toggle_rbac_role=False)
+
     # References the last value of `toggle_rbac_role` that was passed to
     # `switch_role`. Used for ensuring that `switch_role` is correctly used
     # in a test file, so that false positives are prevented. The key used
@@ -70,7 +61,7 @@
             if not self.admin_role_id or not self.rbac_role_id:
                 self._get_roles()
 
-            rbac_utils._validate_switch_role(self, test_obj, toggle_rbac_role)
+            self._validate_switch_role(test_obj, toggle_rbac_role)
 
             if toggle_rbac_role:
                 self._add_role_to_user(self.rbac_role_id)
@@ -171,5 +162,3 @@
 
         self.admin_role_id = admin_role_id
         self.rbac_role_id = rbac_role_id
-
-rbac_utils = RbacUtils
diff --git a/patrole_tempest_plugin/tests/api/compute/rbac_base.py b/patrole_tempest_plugin/tests/api/compute/rbac_base.py
index bc02dbf..0be42e7 100644
--- a/patrole_tempest_plugin/tests/api/compute/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/compute/rbac_base.py
@@ -16,7 +16,7 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 
-from patrole_tempest_plugin.rbac_utils import rbac_utils
+from patrole_tempest_plugin import rbac_utils
 
 CONF = config.CONF
 
@@ -36,8 +36,8 @@
     def setup_clients(cls):
         super(BaseV2ComputeRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
-        cls.rbac_utils = rbac_utils()
-        cls.rbac_utils.switch_role(cls, toggle_rbac_role=False)
+        cls.rbac_utils = rbac_utils.RbacUtils(cls)
+        cls.hosts_client = cls.os_primary.hosts_client
 
     @classmethod
     def resource_setup(cls):
@@ -58,7 +58,7 @@
     @classmethod
     def _create_flavor(cls, **kwargs):
         flavor_kwargs = {
-            "name": data_utils.rand_name('flavor'),
+            "name": data_utils.rand_name(cls.__name__ + '-flavor'),
             "ram": data_utils.rand_int_id(1, 10),
             "vcpus": data_utils.rand_int_id(1, 10),
             "disk": data_utils.rand_int_id(1, 10),
diff --git a/patrole_tempest_plugin/tests/api/compute/test_admin_password_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_admin_password_rbac.py
index 08a06e6..a0e46a6 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_admin_password_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_admin_password_rbac.py
@@ -33,11 +33,6 @@
             raise cls.skipException('Change password not available.')
 
     @classmethod
-    def setup_clients(cls):
-        super(AdminPasswordRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def resource_setup(cls):
         super(AdminPasswordRbacTest, cls).resource_setup()
         cls.server_id = cls.create_test_server(wait_until='ACTIVE')['id']
@@ -47,6 +42,6 @@
     @decorators.idempotent_id('908a7d59-3a66-441c-94cf-38e57ed14956')
     def test_change_server_password(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.change_password(
+        self.servers_client.change_password(
             self.server_id,
             adminPass=data_utils.rand_password())
diff --git a/patrole_tempest_plugin/tests/api/compute/test_admin_server_actions_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_admin_server_actions_rbac.py
index a2d23af..37fad18 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_admin_server_actions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_admin_server_actions_rbac.py
@@ -26,11 +26,6 @@
 class AdminServerActionsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(AdminServerActionsRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(AdminServerActionsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-admin-actions', 'compute'):
@@ -48,8 +43,8 @@
     @decorators.idempotent_id('ae84dd0b-f364-462e-b565-3457f9c019ef')
     def test_reset_server_state(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.reset_state(self.server_id, state='error')
-        self.addCleanup(self.client.reset_state,
+        self.servers_client.reset_state(self.server_id, state='error')
+        self.addCleanup(self.servers_client.reset_state,
                         self.server_id,
                         state='active')
 
@@ -59,7 +54,7 @@
     @decorators.idempotent_id('ce48c340-51c1-4cff-9b6e-0cc5ef008630')
     def test_inject_network_info(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.inject_network_info(self.server_id)
+        self.servers_client.inject_network_info(self.server_id)
 
     @rbac_rule_validation.action(
         service="nova",
@@ -67,4 +62,4 @@
     @decorators.idempotent_id('2911a242-15c4-4fcb-80d5-80a8930661b0')
     def test_reset_network(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.reset_network(self.server_id)
+        self.servers_client.reset_network(self.server_id)
diff --git a/patrole_tempest_plugin/tests/api/compute/test_aggregates_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_aggregates_rbac.py
index db504c0..eec4030 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_aggregates_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_aggregates_rbac.py
@@ -37,7 +37,7 @@
         cls.hosts_client = cls.os_primary.hosts_client
 
     def _create_aggregate(self):
-        agg_name = data_utils.rand_name('aggregate')
+        agg_name = data_utils.rand_name(self.__class__.__name__ + '-aggregate')
         aggregate = self.aggregates_client.create_aggregate(name=agg_name)
         aggregate_id = aggregate['aggregate']['id']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -82,7 +82,7 @@
     def test_update_aggregate_rbac(self):
         aggregate_id = self._create_aggregate()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        new_name = data_utils.rand_name('aggregate')
+        new_name = data_utils.rand_name(self.__class__.__name__ + '-aggregate')
         self.aggregates_client.update_aggregate(aggregate_id, name=new_name)
 
     @rbac_rule_validation.action(
@@ -115,8 +115,8 @@
     @decorators.idempotent_id('ed6f3849-065c-4ae9-a81e-6ad7ed0d3d9d')
     def test_set_metadata_on_aggregate_rbac(self):
         aggregate_id = self._create_aggregate()
-        rand_key = data_utils.rand_name('key')
-        rand_val = data_utils.rand_name('val')
+        rand_key = data_utils.rand_name(self.__class__.__name__ + '-key')
+        rand_val = data_utils.rand_name(self.__class__.__name__ + '-val')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.aggregates_client.set_metadata(
             aggregate_id,
diff --git a/patrole_tempest_plugin/tests/api/compute/test_attach_interfaces_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_attach_interfaces_rbac.py
index 90b60c9..05a41ba 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_attach_interfaces_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_attach_interfaces_rbac.py
@@ -28,11 +28,6 @@
 class AttachInterfacesRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(AttachInterfacesRbacTest, cls).setup_clients()
-        cls.client = cls.interfaces_client
-
-    @classmethod
     def skip_checks(cls):
         super(AttachInterfacesRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-attach-interfaces', 'compute'):
@@ -58,14 +53,14 @@
         cls.server = cls.create_test_server(wait_until='ACTIVE')
 
     def _attach_interface_to_server(self):
-        interface = self.client.create_interface(
+        interface = self.interfaces_client.create_interface(
             self.server['id'])['interfaceAttachment']
         waiters.wait_for_interface_status(
             self.interfaces_client, self.server['id'], interface['port_id'],
             'ACTIVE')
         self.addCleanup(
             test_utils.call_and_ignore_notfound_exc,
-            self.client.delete_interface, self.server['id'],
+            self.interfaces_client.delete_interface, self.server['id'],
             interface['port_id'])
         return interface
 
@@ -75,7 +70,8 @@
         rule="os_compute_api:os-attach-interfaces")
     def test_list_interfaces(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_interfaces(self.server['id'])['interfaceAttachments']
+        self.interfaces_client.list_interfaces(
+            self.server['id'])['interfaceAttachments']
 
     @decorators.idempotent_id('d2d3a24d-4738-4bce-a287-36d664746cde')
     @rbac_rule_validation.action(
@@ -92,4 +88,5 @@
     def test_delete_interface(self):
         interface = self._attach_interface_to_server()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_interface(self.server['id'], interface['port_id'])
+        self.interfaces_client.delete_interface(self.server['id'],
+                                                interface['port_id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_availability_zone_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_availability_zone_rbac.py
index 0743d7c..2ce9176 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_availability_zone_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_availability_zone_rbac.py
@@ -28,21 +28,16 @@
                    "enabled." % cls.__name__)
             raise cls.skipException(msg)
 
-    @classmethod
-    def setup_clients(cls):
-        super(NovaAvailabilityZoneRbacTest, cls).setup_clients()
-        cls.client = cls.availability_zone_client
-
     @rbac_rule_validation.action(service="nova", rule="os_compute_api:"
                                  "os-availability-zone:list")
     @decorators.idempotent_id('cd34e7ea-d26e-4fa3-a8d0-f8883726ce3d')
     def test_get_availability_zone_list_rbac(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_availability_zones()
+        self.availability_zone_client.list_availability_zones()
 
     @rbac_rule_validation.action(service="nova", rule="os_compute_api:"
                                  "os-availability-zone:detail")
     @decorators.idempotent_id('2f61c191-6ece-4f21-b487-39d749e3d38e')
     def test_get_availability_zone_list_detail_rbac(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_availability_zones(detail=True)
+        self.availability_zone_client.list_availability_zones(detail=True)
diff --git a/patrole_tempest_plugin/tests/api/compute/test_deferred_delete_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_deferred_delete_rbac.py
index fe9cb11..ebeab76 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_deferred_delete_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_deferred_delete_rbac.py
@@ -23,11 +23,6 @@
 class DeferredDeleteRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(DeferredDeleteRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(DeferredDeleteRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-deferred-delete', 'compute'):
@@ -49,4 +44,4 @@
         # Force-deleting a server enforces os-deferred-delete according to the
         # following API: https://github.com/openstack/nova/blob/master/nova/api
         # /openstack/compute/deferred_delete.py
-        self.client.force_delete_server(self.server['id'])
+        self.servers_client.force_delete_server(self.server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_flavor_access_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_flavor_access_rbac.py
index 2019331..b771d32 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_flavor_access_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_flavor_access_rbac.py
@@ -28,11 +28,6 @@
 class FlavorAccessRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(FlavorAccessRbacTest, cls).setup_clients()
-        cls.client = cls.flavors_client
-
-    @classmethod
     def skip_checks(cls):
         super(FlavorAccessRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('OS-FLV-EXT-DATA', 'compute'):
@@ -55,7 +50,7 @@
         # NOTE(felipemonteiro): show_flavor enforces the specified policy
         # action, but only works if a public flavor is passed.
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_flavor(self.public_flavor_id)['flavor']
+        self.flavors_client.show_flavor(self.public_flavor_id)['flavor']
 
     @decorators.idempotent_id('39cb5c8f-9990-436f-9282-fc76a41d9bac')
     @rbac_rule_validation.action(
@@ -63,10 +58,10 @@
         rule="os_compute_api:os-flavor-access:add_tenant_access")
     def test_add_flavor_access(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.add_flavor_access(
+        self.flavors_client.add_flavor_access(
             flavor_id=self.flavor_id, tenant_id=self.tenant_id)[
             'flavor_access']
-        self.addCleanup(self.client.remove_flavor_access,
+        self.addCleanup(self.flavors_client.remove_flavor_access,
                         flavor_id=self.flavor_id, tenant_id=self.tenant_id)
 
     @decorators.idempotent_id('61b8621f-52e4-473a-8d07-e228af8853d1')
@@ -74,11 +69,11 @@
         service="nova",
         rule="os_compute_api:os-flavor-access:remove_tenant_access")
     def test_remove_flavor_access(self):
-        self.client.add_flavor_access(
+        self.flavors_client.add_flavor_access(
             flavor_id=self.flavor_id, tenant_id=self.tenant_id)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.remove_flavor_access,
+                        self.flavors_client.remove_flavor_access,
                         flavor_id=self.flavor_id, tenant_id=self.tenant_id)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.remove_flavor_access(
+        self.flavors_client.remove_flavor_access(
             flavor_id=self.flavor_id, tenant_id=self.tenant_id)
diff --git a/patrole_tempest_plugin/tests/api/compute/test_flavor_extra_specs_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_flavor_extra_specs_rbac.py
index 0ee8d9a..e59fd78 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_flavor_extra_specs_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_flavor_extra_specs_rbac.py
@@ -25,11 +25,6 @@
 class FlavorExtraSpecsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(FlavorExtraSpecsRbacTest, cls).setup_clients()
-        cls.client = cls.flavors_client
-
-    @classmethod
     def skip_checks(cls):
         super(FlavorExtraSpecsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-flavor-extra-specs', 'compute'):
@@ -43,19 +38,19 @@
 
     @classmethod
     def resource_cleanup(cls):
-        cls.client.delete_flavor(cls.flavor['id'])
-        cls.client.wait_for_resource_deletion(cls.flavor['id'])
+        cls.flavors_client.delete_flavor(cls.flavor['id'])
+        cls.flavors_client.wait_for_resource_deletion(cls.flavor['id'])
         super(FlavorExtraSpecsRbacTest, cls).resource_cleanup()
 
     def _set_flavor_extra_spec(self):
-        rand_key = data_utils.rand_name('key')
-        rand_val = data_utils.rand_name('val')
+        rand_key = data_utils.rand_name(self.__class__.__name__ + '-key')
+        rand_val = data_utils.rand_name(self.__class__.__name__ + '-val')
         specs = {rand_key: rand_val}
-        self.client.set_flavor_extra_spec(self.flavor['id'],
-                                          **specs)['extra_specs']
+        self.flavors_client.set_flavor_extra_spec(self.flavor['id'],
+                                                  **specs)['extra_specs']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.unset_flavor_extra_spec, self.flavor['id'],
-                        rand_key)
+                        self.flavors_client.unset_flavor_extra_spec,
+                        self.flavor['id'], rand_key)
         return rand_key
 
     @decorators.idempotent_id('daee891d-dfe9-4501-a39c-29f2371bec3c')
@@ -65,7 +60,7 @@
     def test_show_flavor_extra_spec(self):
         key = self._set_flavor_extra_spec()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_flavor_extra_spec(self.flavor['id'], key)[key]
+        self.flavors_client.show_flavor_extra_spec(self.flavor['id'], key)[key]
 
     @decorators.idempotent_id('fcffeca2-ed04-4e85-bf93-02fb5643f22b')
     @rbac_rule_validation.action(
@@ -82,9 +77,9 @@
     def test_update_flavor_extra_spec(self):
         key = self._set_flavor_extra_spec()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        update_val = data_utils.rand_name('val')
-        self.client.update_flavor_extra_spec(self.flavor['id'], key,
-                                             **{key: update_val})[key]
+        update_val = data_utils.rand_name(self.__class__.__name__ + '-val')
+        self.flavors_client.update_flavor_extra_spec(
+            self.flavor['id'], key, **{key: update_val})[key]
 
     @decorators.idempotent_id('4b0e5471-e010-4c09-8965-80898e6760a3')
     @rbac_rule_validation.action(
@@ -93,7 +88,7 @@
     def test_unset_flavor_extra_spec(self):
         key = self._set_flavor_extra_spec()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.unset_flavor_extra_spec(self.flavor['id'], key)
+        self.flavors_client.unset_flavor_extra_spec(self.flavor['id'], key)
 
     @decorators.idempotent_id('02c3831a-3ce9-476e-a722-d805ac2da621')
     @rbac_rule_validation.action(
@@ -102,4 +97,5 @@
     def test_list_flavor_extra_specs(self):
         self._set_flavor_extra_spec()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_flavor_extra_specs(self.flavor['id'])['extra_specs']
+        self.flavors_client.list_flavor_extra_specs(
+            self.flavor['id'])['extra_specs']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_flavor_rxtx_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_flavor_rxtx_rbac.py
index 7f070eb..33b1564 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_flavor_rxtx_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_flavor_rxtx_rbac.py
@@ -23,11 +23,6 @@
 class FlavorRxtxRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(FlavorRxtxRbacTest, cls).setup_clients()
-        cls.client = cls.flavors_client
-
-    @classmethod
     def skip_checks(cls):
         super(FlavorRxtxRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-flavor-rxtx', 'compute'):
@@ -41,4 +36,4 @@
     def test_create_flavor_rxtx(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # Enforces os_compute_api:os-flavor-rxtx.
-        self.client.list_flavors(detail=True)['flavors']
+        self.flavors_client.list_flavors(detail=True)['flavors']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_floating_ip_pools_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_floating_ip_pools_rbac.py
index 75cc8f4..7b35525 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_floating_ip_pools_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_floating_ip_pools_rbac.py
@@ -28,13 +28,12 @@
     # Tests will fail with a 404 starting from microversion 2.36:
     # See the following link for details:
     # https://developer.openstack.org/api-ref/compute/#floating-ip-pools-os-floating-ip-pools-deprecated
-    min_microversion = '2.10'
     max_microversion = '2.35'
 
     @classmethod
     def setup_clients(cls):
         super(FloatingIpPoolsRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.floating_ip_pools_client
+        cls.fip_pools_client = cls.os_primary.floating_ip_pools_client
 
     @classmethod
     def skip_checks(cls):
@@ -50,4 +49,4 @@
         rule="os_compute_api:os-floating-ip-pools")
     def test_list_floating_ip_pools(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_floating_ip_pools()['floating_ip_pools']
+        self.fip_pools_client.list_floating_ip_pools()['floating_ip_pools']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_floating_ips_bulk_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_floating_ips_bulk_rbac.py
index bff0612..cceccd4 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_floating_ips_bulk_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_floating_ips_bulk_rbac.py
@@ -28,13 +28,12 @@
     # Tests will fail with a 404 starting from microversion 2.36:
     # See the following link for details:
     # https://developer.openstack.org/api-ref/compute/#floating-ips-bulk-os-floating-ips-bulk-deprecated
-    min_microversion = '2.10'
     max_microversion = '2.35'
 
     @classmethod
     def setup_clients(cls):
         super(FloatingIpsBulkRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.floating_ips_bulk_client
+        cls.fip_bulk_client = cls.os_primary.floating_ips_bulk_client
 
     @classmethod
     def skip_checks(cls):
@@ -50,4 +49,4 @@
         rule="os_compute_api:os-floating-ips-bulk")
     def test_list_floating_ips_bulk(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_floating_ips_bulk()['floating_ip_info']
+        self.fip_bulk_client.list_floating_ips_bulk()['floating_ip_info']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py
index 0bd00a4..764d165 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_floating_ips_rbac.py
@@ -28,15 +28,9 @@
     # Tests will fail with a 404 starting from microversion 2.36:
     # See the following link for details:
     # https://developer.openstack.org/api-ref/compute/#floating-ips-os-floating-ips-deprecated
-    min_microversion = '2.10'
     max_microversion = '2.35'
 
     @classmethod
-    def setup_clients(cls):
-        super(FloatingIpsRbacTest, cls).setup_clients()
-        cls.client = cls.floating_ips_client
-
-    @classmethod
     def skip_checks(cls):
         super(FloatingIpsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-floating-ips', 'compute'):
@@ -50,4 +44,4 @@
         rule="os_compute_api:os-floating-ips")
     def test_list_floating_ips(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_floating_ips()['floating_ips']
+        self.floating_ips_client.list_floating_ips()['floating_ips']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_hosts_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_hosts_rbac.py
index 0b7f2d1..2a6b171 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_hosts_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_hosts_rbac.py
@@ -23,11 +23,6 @@
 class HostsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(HostsRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.hosts_client
-
-    @classmethod
     def skip_checks(cls):
         super(HostsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-hosts', 'compute'):
@@ -40,4 +35,4 @@
         rule="os_compute_api:os-hosts")
     def test_list_hosts(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_hosts()['hosts']
+        self.hosts_client.list_hosts()['hosts']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_hypervisor_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_hypervisor_rbac.py
index ecd0fd3..e687fb4 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_hypervisor_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_hypervisor_rbac.py
@@ -23,11 +23,6 @@
 class HypervisorRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(HypervisorRbacTest, cls).setup_clients()
-        cls.client = cls.hypervisor_client
-
-    @classmethod
     def skip_checks(cls):
         super(HypervisorRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-hypervisors', 'compute'):
@@ -35,10 +30,69 @@
                   % cls.__name__
             raise cls.skipException(msg)
 
+    @classmethod
+    def resource_setup(cls):
+        super(HypervisorRbacTest, cls).resource_setup()
+        cls.hypervisor =\
+            cls.hypervisor_client.list_hypervisors()['hypervisors'][0]
+
     @decorators.idempotent_id('17bbeb9a-e73e-445f-a771-c794448ef562')
     @rbac_rule_validation.action(
         service="nova",
         rule="os_compute_api:os-hypervisors")
     def test_list_hypervisors(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_hypervisors()['hypervisors']
+        self.hypervisor_client.list_hypervisors()['hypervisors']
+
+    @decorators.idempotent_id('36b95c7d-1085-487a-a674-b7c1ca35f520')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-hypervisors")
+    def test_list_hypervisors_with_details(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.hypervisor_client.list_hypervisors(detail=True)['hypervisors']
+
+    @decorators.idempotent_id('8a7f6f9e-34a6-4480-8875-bba566c3a581')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-hypervisors")
+    def test_show_hypervisor(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.hypervisor_client.show_hypervisor(
+            self.hypervisor['id'])['hypervisor']
+
+    @decorators.idempotent_id('b86f03cf-2e79-4d88-9eea-62f761591413')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-hypervisors")
+    def test_list_servers_on_hypervisor(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.hypervisor_client.list_servers_on_hypervisor(
+            self.hypervisor['hypervisor_hostname'])['hypervisors']
+
+    @decorators.idempotent_id('ca0e465c-6365-4a7f-ae58-6f8ddbca06c2')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-hypervisors")
+    def test_show_hypervisor_statistics(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.hypervisor_client.\
+            show_hypervisor_statistics()['hypervisor_statistics']
+
+    @decorators.idempotent_id('109b37c5-91ba-4da5-b2a2-d7618d84406d')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-hypervisors")
+    def test_show_hypervisor_uptime(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.hypervisor_client.show_hypervisor_uptime(
+            self.hypervisor['id'])['hypervisor']
+
+    @decorators.idempotent_id('3dbc71c1-8f04-4674-a67c-dcb2fd99b1b4')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-hypervisors")
+    def test_search_hypervisor(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.hypervisor_client.search_hypervisor(
+            self.hypervisor['hypervisor_hostname'])['hypervisors']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_images_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_images_rbac.py
index b848509..3d66f2e 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_images_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_images_rbac.py
@@ -17,6 +17,7 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 from tempest.lib import decorators
+from tempest.lib import exceptions as lib_exc
 
 from patrole_tempest_plugin import rbac_rule_validation
 from patrole_tempest_plugin.tests.api.compute import rbac_base
@@ -24,7 +25,7 @@
 CONF = config.CONF
 
 
-class ImagesV235RbacTest(rbac_base.BaseV2ComputeRbacTest):
+class ImagesRbacTest(rbac_base.BaseV2ComputeRbacTest):
     """RBAC tests for the Nova images client.
 
     These APIs are proxy calls to the Image service. Consequently, no nova
@@ -34,32 +35,39 @@
     """
 
     # These tests will fail with a 404 starting from microversion 2.36.
-    min_microversion = '2.10'
+    # See the following link for details:
+    # https://developer.openstack.org/api-ref/compute/#images-deprecated
     max_microversion = '2.35'
 
     @classmethod
     def skip_checks(cls):
-        super(ImagesV235RbacTest, cls).skip_checks()
+        super(ImagesRbacTest, cls).skip_checks()
         if not CONF.service_available.glance:
             skip_msg = ("%s skipped as glance is not available" % cls.__name__)
             raise cls.skipException(skip_msg)
 
     @classmethod
     def setup_clients(cls):
-        super(ImagesV235RbacTest, cls).setup_clients()
-        cls.client = cls.compute_images_client
-        cls.glance_image_client = cls.os_primary.image_client_v2
+        super(ImagesRbacTest, cls).setup_clients()
+        if CONF.image_feature_enabled.api_v1:
+            cls.glance_image_client = cls.os_primary.image_client
+        elif CONF.image_feature_enabled.api_v2:
+            cls.glance_image_client = cls.os_primary.image_client_v2
+        else:
+            raise lib_exc.InvalidConfiguration(
+                'Either api_v1 or api_v2 must be True in '
+                '[image-feature-enabled].')
 
     @classmethod
     def resource_setup(cls):
-        super(ImagesV235RbacTest, cls).resource_setup()
+        super(ImagesRbacTest, cls).resource_setup()
         cls.image = cls.glance_image_client.create_image(
-            name=data_utils.rand_name('image'))
+            name=data_utils.rand_name(cls.__name__ + '-image'))
 
     @classmethod
     def resource_cleanup(cls):
         cls.glance_image_client.delete_image(cls.image['id'])
-        super(ImagesV235RbacTest, cls).resource_cleanup()
+        super(ImagesRbacTest, cls).resource_cleanup()
 
     @decorators.idempotent_id('b861f302-b72b-4055-81db-c62ff30b136d')
     @rbac_rule_validation.action(
@@ -67,7 +75,7 @@
         rule="get_images")
     def test_list_images(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_images()
+        self.compute_images_client.list_images()
 
     @decorators.idempotent_id('4365ae0f-15ee-4b54-a527-1679faaed140')
     @rbac_rule_validation.action(
@@ -75,7 +83,7 @@
         rule="get_images")
     def test_list_images_with_details(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_images(detail=True)
+        self.compute_images_client.list_images(detail=True)
 
     @decorators.idempotent_id('886dfcae-51bf-4610-9e52-82d7189524c2')
     @rbac_rule_validation.action(
@@ -83,19 +91,21 @@
         rule="get_image")
     def test_show_image_details(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_image(self.image['id'])
+        self.compute_images_client.show_image(self.image['id'])
 
     @decorators.idempotent_id('dbe09d4c-e615-48cb-b908-a06a0f410a8e')
     @rbac_rule_validation.action(
         service="glance",
         rule="get_image")
     def test_show_image_metadata_item(self):
-        self.client.set_image_metadata(self.image['id'], meta={'foo': 'bar'})
-        self.addCleanup(self.client.delete_image_metadata_item,
+        self.compute_images_client.set_image_metadata(self.image['id'],
+                                                      meta={'foo': 'bar'})
+        self.addCleanup(self.compute_images_client.delete_image_metadata_item,
                         self.image['id'], key='foo')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_image_metadata_item(self.image['id'], key='foo')
+        self.compute_images_client.show_image_metadata_item(self.image['id'],
+                                                            key='foo')
 
     @decorators.idempotent_id('59f66079-d564-47e8-81b0-03c2e84d339e')
     @rbac_rule_validation.action(
@@ -103,7 +113,7 @@
         rule="get_image")
     def test_list_image_metadata(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_image_metadata(self.image['id'])
+        self.compute_images_client.list_image_metadata(self.image['id'])
 
     @decorators.idempotent_id('5888c7aa-0803-46d4-a3fb-5d4729465cd5')
     @rbac_rule_validation.action(
@@ -111,12 +121,12 @@
         rule="delete_image")
     def test_delete_image(self):
         image = self.glance_image_client.create_image(
-            name=data_utils.rand_name('image'))
+            name=data_utils.rand_name(self.__class__.__name__ + '-image'))
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.glance_image_client.delete_image, image['id'])
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_image(image['id'])
+        self.compute_images_client.delete_image(image['id'])
 
     @decorators.idempotent_id('575604aa-909f-4b1b-a5a5-cfae1f63044b')
     @rbac_rule_validation.action(
@@ -127,9 +137,9 @@
         # NOTE(felipemonteiro): Although the name of the client function
         # appears wrong, it's actually correct: update_image_metadata does an
         # http post.
-        self.client.update_image_metadata(self.image['id'],
-                                          meta={'foo': 'bar'})
-        self.addCleanup(self.client.delete_image_metadata_item,
+        self.compute_images_client.update_image_metadata(self.image['id'],
+                                                         meta={'foo': 'bar'})
+        self.addCleanup(self.compute_images_client.delete_image_metadata_item,
                         self.image['id'], key='foo')
 
     @decorators.idempotent_id('fb8c4eb6-00e5-454c-b8bc-0e801ec369f1')
@@ -138,8 +148,9 @@
         rule="modify_image")
     def test_update_image_metadata(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.set_image_metadata(self.image['id'], meta={'foo': 'bar'})
-        self.addCleanup(self.client.delete_image_metadata_item,
+        self.compute_images_client.set_image_metadata(self.image['id'],
+                                                      meta={'foo': 'bar'})
+        self.addCleanup(self.compute_images_client.delete_image_metadata_item,
                         self.image['id'], key='foo')
 
     @decorators.idempotent_id('9c7c2036-af9b-49a8-8ba1-09b027ee5def')
@@ -148,9 +159,9 @@
         rule="modify_image")
     def test_update_image_metadata_item(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.set_image_metadata_item(self.image['id'],
-                                            meta={'foo': 'bar'}, key='foo')
-        self.addCleanup(self.client.delete_image_metadata_item,
+        self.compute_images_client.set_image_metadata_item(
+            self.image['id'], meta={'foo': 'bar'}, key='foo')
+        self.addCleanup(self.compute_images_client.delete_image_metadata_item,
                         self.image['id'], key='foo')
 
     @decorators.idempotent_id('5f0dc4e6-0761-4613-9bde-0a6acdc78f46')
@@ -158,10 +169,12 @@
         service="glance",
         rule="modify_image")
     def test_delete_image_metadata_item(self):
-        self.client.set_image_metadata(self.image['id'], meta={'foo': 'bar'})
+        self.compute_images_client.set_image_metadata(self.image['id'],
+                                                      meta={'foo': 'bar'})
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.delete_image_metadata_item,
+                        self.compute_images_client.delete_image_metadata_item,
                         self.image['id'], key='foo')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_image_metadata_item(self.image['id'], key='foo')
+        self.compute_images_client.delete_image_metadata_item(self.image['id'],
+                                                              key='foo')
diff --git a/patrole_tempest_plugin/tests/api/compute/test_instance_actions_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_instance_actions_rbac.py
index bd1e5c8..b81d2ab 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_instance_actions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_instance_actions_rbac.py
@@ -24,11 +24,6 @@
 class InstanceActionsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(InstanceActionsRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(InstanceActionsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-instance-actions', 'compute'):
@@ -47,7 +42,7 @@
         rule="os_compute_api:os-instance-actions")
     def test_list_instance_actions(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_instance_actions(self.server['id'])
+        self.servers_client.list_instance_actions(self.server['id'])
 
     @decorators.idempotent_id('eb04c439-4215-4029-9ccb-5b3c041bfc25')
     @rbac_rule_validation.action(
@@ -55,7 +50,7 @@
         rule="os_compute_api:os-instance-actions:events")
     def test_get_instance_action(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        instance_action = self.client.show_instance_action(
+        instance_action = self.servers_client.show_instance_action(
             self.server['id'], self.request_id)['instanceAction']
         if 'events' not in instance_action:
             raise rbac_exceptions.RbacActionFailed
diff --git a/patrole_tempest_plugin/tests/api/compute/test_instance_usages_audit_log_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_instance_usages_audit_log_rbac.py
index cff3167..e55e306 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_instance_usages_audit_log_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_instance_usages_audit_log_rbac.py
@@ -31,15 +31,10 @@
             msg = "os-instance-usage-audit-log extension not enabled."
             raise cls.skipException(msg)
 
-    @classmethod
-    def setup_clients(cls):
-        super(InstanceUsagesAuditLogRbacTest, cls).setup_clients()
-        cls.client = cls.instance_usages_audit_log_client
-
     @decorators.idempotent_id('c80246c0-5c13-4ab0-97ba-91551cd53dc1')
     @rbac_rule_validation.action(
         service="nova", rule="os_compute_api:os-instance-usage-audit-log")
     def test_list_instance_usage_audit_logs(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_instance_usage_audit_logs()
+        self.instance_usages_audit_log_client.list_instance_usage_audit_logs()
         ["instance_usage_audit_logs"]
diff --git a/patrole_tempest_plugin/tests/api/compute/test_ips_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_ips_rbac.py
index 600cfbe..c42459a 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_ips_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_ips_rbac.py
@@ -26,11 +26,6 @@
 class IpsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(IpsRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(IpsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-ips', 'compute'):
@@ -56,15 +51,16 @@
         rule="os_compute_api:ips:index")
     def test_list_addresses(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_addresses(self.server['id'])['addresses']
+        self.servers_client.list_addresses(self.server['id'])['addresses']
 
     @decorators.idempotent_id('fa43e7e5-0db9-48eb-9c6b-c11eb766b8e4')
     @rbac_rule_validation.action(
         service="nova",
         rule="os_compute_api:ips:show")
     def test_list_addresses_by_network(self):
-        addresses = self.client.list_addresses(self.server['id'])['addresses']
+        addresses = self.servers_client.list_addresses(
+            self.server['id'])['addresses']
         address = next(iter(addresses))
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_addresses_by_network(
+        self.servers_client.list_addresses_by_network(
             self.server['id'], address)[address]
diff --git a/patrole_tempest_plugin/tests/api/compute/test_keypairs_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_keypairs_rbac.py
index f7b2ace..8e434fc 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_keypairs_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_keypairs_rbac.py
@@ -23,16 +23,11 @@
 
 class KeypairsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
-    @classmethod
-    def setup_clients(cls):
-        super(KeypairsRbacTest, cls).setup_clients()
-        cls.client = cls.keypairs_client
-
     def _create_keypair(self):
-        key_name = data_utils.rand_name('key')
-        keypair = self.client.create_keypair(name=key_name)
+        key_name = data_utils.rand_name(self.__class__.__name__ + '-key')
+        keypair = self.keypairs_client.create_keypair(name=key_name)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.delete_keypair,
+                        self.keypairs_client.delete_keypair,
                         key_name)
         return keypair
 
@@ -51,7 +46,7 @@
     def test_show_keypair(self):
         kp_name = self._create_keypair()['keypair']['name']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_keypair(kp_name)
+        self.keypairs_client.show_keypair(kp_name)
 
     @decorators.idempotent_id('6bff9f1c-b809-43c1-8d63-61fbd19d49d3')
     @rbac_rule_validation.action(
@@ -60,7 +55,7 @@
     def test_delete_keypair(self):
         kp_name = self._create_keypair()['keypair']['name']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_keypair(kp_name)
+        self.keypairs_client.delete_keypair(kp_name)
 
     @decorators.idempotent_id('6bb31346-ff7f-4b10-978e-170ac5fcfa3e')
     @rbac_rule_validation.action(
@@ -68,4 +63,4 @@
         rule="os_compute_api:os-keypairs:index")
     def test_index_keypair(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_keypairs()
+        self.keypairs_client.list_keypairs()
diff --git a/patrole_tempest_plugin/tests/api/compute/test_limits_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_limits_rbac.py
index f16a635..2f19d13 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_limits_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_limits_rbac.py
@@ -21,11 +21,6 @@
 class LimitsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(LimitsRbacTest, cls).setup_clients()
-        cls.client = cls.limits_client
-
-    @classmethod
     def skip_checks(cls):
         super(LimitsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-limits', 'compute'):
@@ -37,4 +32,4 @@
     @decorators.idempotent_id('3fb60f83-9a5f-4fdd-89d9-26c3710844a1')
     def test_show_limits(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_limits()
+        self.limits_client.show_limits()
diff --git a/patrole_tempest_plugin/tests/api/compute/test_migrations_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_migrations_rbac.py
index b6c6c5f..dc2bdf6 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_migrations_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_migrations_rbac.py
@@ -23,11 +23,6 @@
 class MigrationsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(MigrationsRbacTest, cls).setup_clients()
-        cls.client = cls.migrations_client
-
-    @classmethod
     def skip_checks(cls):
         super(MigrationsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-migrations', 'compute'):
@@ -40,4 +35,4 @@
         rule="os_compute_api:os-migrations:index")
     def test_list_services(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_migrations()['migrations']
+        self.migrations_client.list_migrations()['migrations']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_multinic_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_multinic_rbac.py
index 7e353be..e409269 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_multinic_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_multinic_rbac.py
@@ -22,19 +22,11 @@
 CONF = config.CONF
 
 
-class MultinicV210RbacTest(rbac_base.BaseV2ComputeRbacTest):
-
-    min_microversion = '2.10'
-    max_microversion = '2.36'
-
-    @classmethod
-    def setup_clients(cls):
-        super(MultinicV210RbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
+class MultinicRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
     def skip_checks(cls):
-        super(MultinicV210RbacTest, cls).skip_checks()
+        super(MultinicRbacTest, cls).skip_checks()
         if not CONF.service_available.neutron:
             raise cls.skipException("Neutron is required")
         if not CONF.compute_feature_enabled.interface_attach:
@@ -44,11 +36,11 @@
     def setup_credentials(cls):
         # This test class requires network and subnet
         cls.set_network_resources(network=True, subnet=True)
-        super(MultinicV210RbacTest, cls).setup_credentials()
+        super(MultinicRbacTest, cls).setup_credentials()
 
     @classmethod
     def resource_setup(cls):
-        super(MultinicV210RbacTest, cls).resource_setup()
+        super(MultinicRbacTest, cls).resource_setup()
         cls.server = cls.create_test_server(wait_until='ACTIVE')
 
     @rbac_rule_validation.action(
@@ -65,5 +57,5 @@
                 self.server['id'])['interfaceAttachment']['net_id']
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.add_fixed_ip(self.server['id'],
-                                 networkId=network_id)
+        self.servers_client.add_fixed_ip(self.server['id'],
+                                         networkId=network_id)
diff --git a/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py
index f6706a7..dc30d94 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_quota_sets_rbac.py
@@ -27,7 +27,6 @@
     @classmethod
     def setup_clients(cls):
         super(QuotaSetsRbacTest, cls).setup_clients()
-        cls.client = cls.quotas_client
         cls.projects_client = cls.os_primary.projects_client
 
     @classmethod
@@ -55,16 +54,16 @@
         service="nova",
         rule="os_compute_api:os-quota-sets:update")
     def test_update_quota_set(self):
-        default_quota_set = self.client.show_default_quota_set(
+        default_quota_set = self.quotas_client.show_default_quota_set(
             self.tenant_id)['quota_set']
         default_quota_set.pop('id')
         new_quota_set = {'injected_file_content_bytes': 20480}
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_quota_set(self.tenant_id,
-                                     force=True,
-                                     **new_quota_set)['quota_set']
-        self.addCleanup(self.client.update_quota_set, self.tenant_id,
+        self.quotas_client.update_quota_set(self.tenant_id,
+                                            force=True,
+                                            **new_quota_set)['quota_set']
+        self.addCleanup(self.quotas_client.update_quota_set, self.tenant_id,
                         **default_quota_set)
 
     @decorators.idempotent_id('58df5613-8f3c-400a-8b4b-2bae624d05e9')
@@ -73,7 +72,7 @@
         rule="os_compute_api:os-quota-sets:defaults")
     def test_show_default_quota_set(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_default_quota_set(self.tenant_id)['quota_set']
+        self.quotas_client.show_default_quota_set(self.tenant_id)['quota_set']
 
     @decorators.idempotent_id('e8169ac4-c402-4864-894e-aba74e3a459c')
     @rbac_rule_validation.action(
@@ -81,21 +80,22 @@
         rule="os_compute_api:os-quota-sets:show")
     def test_show_quota_set(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_quota_set(self.tenant_id)['quota_set']
+        self.quotas_client.show_quota_set(self.tenant_id)['quota_set']
 
     @decorators.idempotent_id('4e240644-bf61-4872-9c32-8289ee2fdbbd')
     @rbac_rule_validation.action(
         service="nova",
         rule="os_compute_api:os-quota-sets:delete")
     def test_delete_quota_set(self):
-        project_name = data_utils.rand_name('project')
+        project_name = data_utils.rand_name(
+            self.__class__.__name__ + '-project')
         project = self.projects_client.create_project(name=project_name)
         project_id = project['project']['id']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.projects_client.delete_project, project_id)
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_quota_set(project_id)
+        self.quotas_client.delete_quota_set(project_id)
 
     @decorators.idempotent_id('ac9184b6-f3b3-4e17-a632-4b92c6500f86')
     @rbac_rule_validation.action(
@@ -103,4 +103,5 @@
         rule="os_compute_api:os-quota-sets:detail")
     def test_show_quota_set_details(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_quota_set(self.tenant_id, detail=True)['quota_set']
+        self.quotas_client.show_quota_set(self.tenant_id,
+                                          detail=True)['quota_set']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_rescue_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_rescue_rbac.py
index 277ba1b..a0a021f 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_rescue_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_rescue_rbac.py
@@ -23,11 +23,6 @@
 class RescueRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(RescueRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(RescueRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-rescue', 'compute'):
@@ -45,4 +40,4 @@
     @decorators.idempotent_id('fbbb2afc-ed0e-4552-887d-ac00fb5d436e')
     def test_rescue_server(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.rescue_server(self.server['id'])
+        self.servers_client.rescue_server(self.server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_actions_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_actions_rbac.py
index 86b650e..a3197b3 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_actions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_actions_rbac.py
@@ -35,12 +35,6 @@
 class ServerActionsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(ServerActionsRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-        cls.snapshots_client = cls.snapshots_extensions_client
-
-    @classmethod
     def resource_setup(cls):
         cls.set_validation_resources()
         super(ServerActionsRbacTest, cls).resource_setup()
@@ -69,7 +63,7 @@
     def setUp(self):
         super(ServerActionsRbacTest, self).setUp()
         try:
-            waiters.wait_for_server_status(self.client,
+            waiters.wait_for_server_status(self.servers_client,
                                            self.server_id, 'ACTIVE')
         except lib_exc.NotFound:
             # if the server was found to be deleted by a previous test,
@@ -99,14 +93,17 @@
                     # Wait for snapshot status to become 'available' before
                     # deletion
                     waiters.wait_for_volume_resource_status(
-                        cls.snapshots_client, snapshot['id'], 'available')
+                        cls.snapshots_extensions_client, snapshot['id'],
+                        'available')
                     test_utils.call_and_ignore_notfound_exc(
-                        cls.snapshots_client.delete_snapshot, snapshot['id'])
+                        cls.snapshots_extensions_client.delete_snapshot,
+                        snapshot['id'])
 
             for snapshot in volume_snapshots:
                 if snapshot['volumeId'] == cls.volume_id:
                     test_utils.call_and_ignore_notfound_exc(
-                        cls.snapshots_client.wait_for_resource_deletion,
+                        (cls.snapshots_extensions_client.
+                            wait_for_resource_deletion),
                         snapshot['id'])
 
         super(ServerActionsRbacTest, cls).resource_cleanup()
@@ -123,39 +120,40 @@
 
         # Since the server is booted from volume, the imageRef does not need
         # to be specified.
-        server = self.client.create_server(name=server_name,
-                                           imageRef='',
-                                           flavorRef=CONF.compute.flavor_ref,
-                                           **device_mapping)['server']
+        server = self.servers_client.create_server(
+            name=server_name, imageRef='',
+            flavorRef=CONF.compute.flavor_ref,
+            **device_mapping)['server']
 
-        waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
+        waiters.wait_for_server_status(self.servers_client, server['id'],
+                                       'ACTIVE')
 
         self.servers.append(server)
         return server
 
     def _test_start_server(self):
-        self.client.start_server(self.server_id)
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.start_server(self.server_id)
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'ACTIVE')
 
     def _test_stop_server(self):
-        self.client.stop_server(self.server_id)
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.stop_server(self.server_id)
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'SHUTOFF')
 
     def _test_resize_server(self, flavor):
-        self.client.resize_server(self.server_id, flavor)
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.resize_server(self.server_id, flavor)
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'VERIFY_RESIZE')
 
     def _test_revert_resize_server(self):
-        self.client.revert_resize_server(self.server_id)
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.revert_resize_server(self.server_id)
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'ACTIVE')
 
     def _test_confirm_resize_server(self):
-        self.client.confirm_resize_server(self.server_id)
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.confirm_resize_server(self.server_id)
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'ACTIVE')
 
     @rbac_rule_validation.action(
@@ -221,8 +219,8 @@
     @decorators.idempotent_id('54b1a30b-c96c-472c-9c83-ccaf6ec7e20b')
     def test_rebuild_server(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.rebuild_server(self.server_id, self.image_ref)
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.rebuild_server(self.server_id, self.image_ref)
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'ACTIVE')
 
     @rbac_rule_validation.action(
@@ -231,8 +229,8 @@
     @decorators.idempotent_id('19f27856-56e1-44f8-8615-7257f6b85cbb')
     def test_reboot_server(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.reboot_server(self.server_id, type='HARD')
-        waiters.wait_for_server_status(self.client, self.server_id,
+        self.servers_client.reboot_server(self.server_id, type='HARD')
+        waiters.wait_for_server_status(self.servers_client, self.server_id,
                                        'ACTIVE')
 
     @rbac_rule_validation.action(
@@ -241,7 +239,7 @@
     @decorators.idempotent_id('631f0d86-7607-4198-8312-9da2f05464a4')
     def test_server_index(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_servers(minimal=True)
+        self.servers_client.list_servers(minimal=True)
 
     @rbac_rule_validation.action(
         service="nova",
@@ -249,7 +247,7 @@
     @decorators.idempotent_id('96093480-3ce5-4a8b-b569-aed870379c24')
     def test_server_detail(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_servers(detail=True)
+        self.servers_client.list_servers(detail=True)
 
     @rbac_rule_validation.action(
         service="nova",
@@ -257,7 +255,7 @@
     @decorators.idempotent_id('a9e5a1c0-acfe-49a2-b2b1-fd8b19d61f71')
     def test_server_detail_all_tenants(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_servers(detail=True, all_tenants=1)
+        self.servers_client.list_servers(detail=True, all_tenants=1)
 
     @rbac_rule_validation.action(
         service="nova",
@@ -265,7 +263,7 @@
     @decorators.idempotent_id('4b93ba56-69e6-41f5-82c4-84a5c4c42091')
     def test_server_index_all_tenants(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_servers(minimal=True, all_tenants=1)
+        self.servers_client.list_servers(minimal=True, all_tenants=1)
 
     @rbac_rule_validation.action(
         service="nova",
@@ -273,7 +271,7 @@
     @decorators.idempotent_id('eaaf4f51-31b5-497f-8f0f-f527e5f70b83')
     def test_show_server(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_server(self.server_id)
+        self.servers_client.show_server(self.server_id)
 
     @rbac_rule_validation.action(
         service="nova",
@@ -322,7 +320,7 @@
     def setUp(self):
         super(ServerActionsV216RbacTest, self).setUp()
         try:
-            waiters.wait_for_server_status(self.client,
+            waiters.wait_for_server_status(self.servers_client,
                                            self.server_id, 'ACTIVE')
         except lib_exc.NotFound:
             # if the server was found to be deleted by a previous test,
@@ -342,7 +340,7 @@
     @decorators.idempotent_id('736da575-86f8-4b2a-9902-dd37dc9a409b')
     def test_show_server_host_status(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        server = self.client.show_server(self.server_id)['server']
+        server = self.servers_client.show_server(self.server_id)['server']
 
         if 'host_status' not in server:
             LOG.info("host_status attribute not returned when role doesn't "
@@ -374,6 +372,6 @@
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.assertRaisesRegex(lib_exc.NotFound,
                                "Compute host fake-host not found.",
-                               self.client.evacuate_server,
+                               self.servers_client.evacuate_server,
                                self.server_id,
                                host='fake-host')
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_diagnostics_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_diagnostics_rbac.py
index 2a309e3..f6359b4 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_diagnostics_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_diagnostics_rbac.py
@@ -23,11 +23,6 @@
 class ServerDiagnosticsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(ServerDiagnosticsRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(ServerDiagnosticsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-server-diagnostics', 'compute'):
@@ -46,4 +41,4 @@
     @decorators.idempotent_id('5dabfcc4-bedb-417b-8247-b3ee7c5c0f3e')
     def test_show_server_diagnostics(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_server_diagnostics(self.server['id'])
+        self.servers_client.show_server_diagnostics(self.server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_groups_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_groups_rbac.py
index a75f550..ff79684 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_groups_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_groups_rbac.py
@@ -23,11 +23,6 @@
 class ServerGroupsRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(ServerGroupsRbacTest, cls).setup_clients()
-        cls.client = cls.server_groups_client
-
-    @classmethod
     def skip_checks(cls):
         super(ServerGroupsRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-server-groups', 'compute'):
@@ -54,7 +49,7 @@
     def test_delete_server_group(self):
         server_group = self.create_test_server_group()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_server_group(server_group['id'])
+        self.server_groups_client.delete_server_group(server_group['id'])
 
     @rbac_rule_validation.action(
         service="nova",
@@ -62,7 +57,7 @@
     @decorators.idempotent_id('5eccd67f-5945-483b-b1c8-de851ebfc1c1')
     def test_list_server_groups(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_server_groups()
+        self.server_groups_client.list_server_groups()
 
     @rbac_rule_validation.action(
         service="nova",
@@ -71,4 +66,4 @@
     def test_show_server_group(self):
         server_group = self.create_test_server_group()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_server_group(server_group['id'])
+        self.server_groups_client.show_server_group(server_group['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_migrations_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_migrations_rbac.py
index 38ef552..842d8b1 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_migrations_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_migrations_rbac.py
@@ -34,7 +34,6 @@
     @classmethod
     def skip_checks(cls):
         super(MigrateServerV225RbacTest, cls).skip_checks()
-
         if CONF.compute.min_compute_nodes < 2:
             raise cls.skipException(
                 "Less than 2 compute nodes, skipping migration tests.")
@@ -42,12 +41,10 @@
     @classmethod
     def setup_clients(cls):
         super(MigrateServerV225RbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
         cls.admin_servers_client = cls.os_admin.servers_client
-        cls.hosts_client = cls.os_primary.hosts_client
 
     def _get_server_details(self, server_id):
-        body = self.client.show_server(server_id)['server']
+        body = self.servers_client.show_server(server_id)['server']
         return body
 
     def _get_host_for_server(self, server_id):
@@ -76,7 +73,7 @@
     def test_cold_migration(self):
         server = self.create_test_server(wait_until="ACTIVE")
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.migrate_server(server['id'])
+        self.servers_client.migrate_server(server['id'])
         waiters.wait_for_server_status(self.admin_servers_client,
                                        server['id'], 'VERIFY_RESIZE')
 
@@ -94,7 +91,7 @@
         target_host = self._get_host_other_than(actual_host)
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.live_migrate_server(
+        self.servers_client.live_migrate_server(
             server_id, host=target_host, block_migration=self.block_migration)
         waiters.wait_for_server_status(self.admin_servers_client,
                                        server_id, "ACTIVE")
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_password_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_password_rbac.py
index 0a0a660..7826268 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_password_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_password_rbac.py
@@ -23,11 +23,6 @@
 class ServerPasswordRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(ServerPasswordRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(ServerPasswordRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-server-password', 'compute'):
@@ -46,7 +41,7 @@
         rule="os_compute_api:os-server-password")
     def test_delete_server_password(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_password(self.server['id'])
+        self.servers_client.delete_password(self.server['id'])
 
     @rbac_rule_validation.action(
         service="nova",
@@ -54,4 +49,4 @@
     @decorators.idempotent_id('f677971a-7d20-493c-977f-6ff0a74b5b2c')
     def test_get_server_password(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_password(self.server['id'])
+        self.servers_client.show_password(self.server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_rbac.py
index b71887c..3613a25 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_rbac.py
@@ -95,12 +95,13 @@
 
         # Since the server is booted from volume, the imageRef does not need
         # to be specified.
-        server = self.client.create_server(name=server_name,
-                                           imageRef='',
-                                           flavorRef=CONF.compute.flavor_ref,
-                                           **device_mapping)['server']
+        server = self.servers_client.create_server(
+            name=server_name, imageRef='',
+            flavorRef=CONF.compute.flavor_ref,
+            **device_mapping)['server']
 
-        waiters.wait_for_server_status(self.client, server['id'], 'ACTIVE')
+        waiters.wait_for_server_status(self.servers_client, server['id'],
+                                       'ACTIVE')
 
         self.servers.append(server)
         return server
@@ -155,8 +156,8 @@
         # clean them up after this test case. In order to do that,
         # we need to clean up the server first.
         self.addCleanup(waiters.wait_for_server_termination,
-                        self.client, server['id'])
-        self.addCleanup(self.client.delete_server, server['id'])
+                        self.servers_client, server['id'])
+        self.addCleanup(self.servers_client.delete_server, server['id'])
 
     @rbac_rule_validation.action(
         service="nova",
@@ -165,8 +166,8 @@
     def test_delete_server(self):
         server = self.create_test_server(wait_until='ACTIVE')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_server(server['id'])
-        waiters.wait_for_server_termination(self.client, server['id'])
+        self.servers_client.delete_server(server['id'])
+        waiters.wait_for_server_termination(self.servers_client, server['id'])
 
     @rbac_rule_validation.action(
         service="nova",
@@ -174,10 +175,10 @@
     @decorators.idempotent_id('077b17cb-5621-43b9-8adf-5725f0d7a863')
     def test_update_server(self):
         server = self.create_test_server(wait_until='ACTIVE')
-        new_name = data_utils.rand_name('server')
+        new_name = data_utils.rand_name(self.__class__.__name__ + '-server')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         try:
-            self.client.update_server(server['id'], name=new_name)
+            self.servers_client.update_server(server['id'], name=new_name)
         except exceptions.ServerFault as e:
             # Some other policy may have blocked it.
             LOG.info("ServerFault exception caught. Some other policy "
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_tags_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_tags_rbac.py
index 4de63ce..d3576d6 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_tags_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_tags_rbac.py
@@ -34,19 +34,14 @@
             raise cls.skipException(msg)
 
     @classmethod
-    def setup_clients(cls):
-        super(ServerTagsRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def resource_setup(cls):
         super(ServerTagsRbacTest, cls).resource_setup()
         cls.server = cls.create_test_server(wait_until='ACTIVE')
 
     def _add_tag_to_server(self):
-        tag_name = data_utils.rand_name('tag')
-        self.client.update_tag(self.server['id'], tag_name)
-        self.addCleanup(self.client.delete_all_tags, self.server['id'])
+        tag_name = data_utils.rand_name(self.__class__.__name__ + '-tag')
+        self.servers_client.update_tag(self.server['id'], tag_name)
+        self.addCleanup(self.servers_client.delete_all_tags, self.server['id'])
         return tag_name
 
     @decorators.idempotent_id('99e73dd3-adec-4044-b46c-84bdded35d09')
@@ -55,7 +50,7 @@
         rule="os_compute_api:os-server-tags:index")
     def test_list_tags(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_tags(self.server['id'])['tags']
+        self.servers_client.list_tags(self.server['id'])['tags']
 
     @decorators.idempotent_id('9297c99e-94eb-429f-93cf-9b1838e33622')
     @rbac_rule_validation.action(
@@ -64,7 +59,7 @@
     def test_check_tag_existence(self):
         tag_name = self._add_tag_to_server()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.check_tag_existence(self.server['id'], tag_name)
+        self.servers_client.check_tag_existence(self.server['id'], tag_name)
 
     @decorators.idempotent_id('0d84ee94-d3ca-4635-8edf-b7f67ab8e4a3')
     @rbac_rule_validation.action(
@@ -81,7 +76,7 @@
     def test_delete_tag(self):
         tag_name = self._add_tag_to_server()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_tag(self.server['id'], tag_name)
+        self.servers_client.delete_tag(self.server['id'], tag_name)
 
     @decorators.idempotent_id('a8e19b87-6580-4bc8-9933-e62561ff667d')
     @rbac_rule_validation.action(
@@ -89,8 +84,9 @@
         rule="os_compute_api:os-server-tags:update_all")
     def test_update_all_tags(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        new_tag_name = data_utils.rand_name('tag')
-        self.client.update_all_tags(self.server['id'], [new_tag_name])['tags']
+        new_tag_name = data_utils.rand_name(self.__class__.__name__ + '-tag')
+        self.servers_client.update_all_tags(self.server['id'],
+                                            [new_tag_name])['tags']
 
     @decorators.idempotent_id('89d51936-e333-42f9-a045-132a4865ba1a')
     @rbac_rule_validation.action(
@@ -98,4 +94,4 @@
         rule="os_compute_api:os-server-tags:delete_all")
     def test_delete_all_tags(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_all_tags(self.server['id'])
+        self.servers_client.delete_all_tags(self.server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_usage_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_usage_rbac.py
index 8f836a6..777af29 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_usage_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_usage_rbac.py
@@ -23,11 +23,6 @@
 class ServerUsageRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(ServerUsageRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(ServerUsageRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('OS-SRV-USG', 'compute'):
@@ -45,4 +40,4 @@
     @decorators.idempotent_id('f0437ead-b9fb-462a-9f3d-ce53fac9d57a')
     def test_show_server_diagnostics(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_server(self.server['id'])
+        self.servers_client.show_server(self.server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_virtual_interfaces_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_virtual_interfaces_rbac.py
index a0a000c..1480444 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_virtual_interfaces_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_virtual_interfaces_rbac.py
@@ -25,11 +25,6 @@
 
 class ServerVirtualInterfacesRbacTest(base.BaseV2ComputeRbacTest):
 
-    @classmethod
-    def setup_clients(cls):
-        super(ServerVirtualInterfacesRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
     @rbac_rule_validation.action(
         service="nova",
         rule="os_compute_api:os-virtual-interfaces")
@@ -41,6 +36,6 @@
         if CONF.service_available.neutron:
             msg = "Listing virtual interfaces is not supported by this cloud."
             with self.assertRaisesRegex(exceptions.BadRequest, msg):
-                self.client.list_virtual_interfaces(server['id'])
+                self.servers_client.list_virtual_interfaces(server['id'])
         else:
-            self.client.list_virtual_interfaces(server['id'])
+            self.servers_client.list_virtual_interfaces(server['id'])
diff --git a/patrole_tempest_plugin/tests/api/compute/test_server_volume_attachments_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_server_volume_attachments_rbac.py
index 160affd..98dbee5 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_server_volume_attachments_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_server_volume_attachments_rbac.py
@@ -30,7 +30,6 @@
     @classmethod
     def setup_clients(cls):
         super(ServerVolumeAttachmentRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
         cls.volumes_client = cls.os_primary.volumes_client
 
     @classmethod
@@ -52,7 +51,7 @@
     @decorators.idempotent_id('529b668b-6edb-41d5-8886-d7dbd0614678')
     def test_list_volume_attachments(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_volume_attachments(self.server['id'])[
+        self.servers_client.list_volume_attachments(self.server['id'])[
             'volumeAttachments']
 
     @rbac_rule_validation.action(
@@ -70,7 +69,7 @@
     def test_show_volume_attachment(self):
         attachment = self.attach_volume(self.server, self.volume)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_volume_attachment(
+        self.servers_client.show_volume_attachment(
             self.server['id'], attachment['id'])
 
     @test.attr(type='slow')
@@ -82,7 +81,7 @@
         attachment = self.attach_volume(self.server, self.volume)
         alt_volume = self.create_volume()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_attached_volume(
+        self.servers_client.update_attached_volume(
             self.server['id'], attachment['id'], volumeId=alt_volume['id'])
         waiters.wait_for_volume_resource_status(self.volumes_client,
                                                 alt_volume['id'], 'in-use')
@@ -104,6 +103,6 @@
     def test_delete_volume_attachment(self):
         self.attach_volume(self.server, self.volume)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.detach_volume(self.server['id'], self.volume['id'])
+        self.servers_client.detach_volume(self.server['id'], self.volume['id'])
         waiters.wait_for_volume_resource_status(self.volumes_client,
                                                 self.volume['id'], 'available')
diff --git a/patrole_tempest_plugin/tests/api/compute/test_services_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_services_rbac.py
index 82de5a3..94d094c 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_services_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_services_rbac.py
@@ -23,11 +23,6 @@
 class ServicesRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(ServicesRbacTest, cls).setup_clients()
-        cls.client = cls.services_client
-
-    @classmethod
     def skip_checks(cls):
         super(ServicesRbacTest, cls).skip_checks()
         if not test.is_extension_enabled('os-services', 'compute'):
@@ -40,4 +35,4 @@
     @decorators.idempotent_id('7472261b-9c6d-453a-bcb3-aecaa29ad281')
     def test_list_services(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_services()['services']
+        self.services_client.list_services()['services']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_simple_tenant_usage_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_simple_tenant_usage_rbac.py
index 5ecc32a..ae2a0fd 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_simple_tenant_usage_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_simple_tenant_usage_rbac.py
@@ -25,7 +25,7 @@
     @classmethod
     def setup_clients(cls):
         super(SimpleTenantUsageRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.tenant_usages_client
+        cls.tenant_usages_client = cls.os_primary.tenant_usages_client
 
     @classmethod
     def skip_checks(cls):
@@ -41,7 +41,7 @@
     @decorators.idempotent_id('2aef094f-0452-4df6-a66a-0ec22a92b16e')
     def test_simple_tenant_usage_list(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_tenant_usages()
+        self.tenant_usages_client.list_tenant_usages()
 
     @rbac_rule_validation.action(
         service="nova",
@@ -53,4 +53,4 @@
         self.create_test_server(wait_until='ACTIVE')['id']
         tenant_id = self.auth_provider.credentials.tenant_id
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_tenant_usage(tenant_id=tenant_id)
+        self.tenant_usages_client.show_tenant_usage(tenant_id=tenant_id)
diff --git a/patrole_tempest_plugin/tests/api/compute/test_suspend_server_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_suspend_server_rbac.py
index 8106a1a..64ffea6 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_suspend_server_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_suspend_server_rbac.py
@@ -26,11 +26,6 @@
 class SuspendServerRbacTest(rbac_base.BaseV2ComputeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(SuspendServerRbacTest, cls).setup_clients()
-        cls.client = cls.servers_client
-
-    @classmethod
     def skip_checks(cls):
         super(SuspendServerRbacTest, cls).skip_checks()
         if not CONF.compute_feature_enabled.suspend:
@@ -45,11 +40,12 @@
 
     def tearDown(self):
         # Guarantee that the server is active during each test run.
-        vm_state = self.client.show_server(self.server['id'])['server'][
-            'OS-EXT-STS:vm_state'].upper()
+        vm_state = self.servers_client.show_server(
+            self.server['id'])['server']['OS-EXT-STS:vm_state'].upper()
         if vm_state != 'ACTIVE':
-            self.client.resume_server(self.server['id'])
-            waiters.wait_for_server_status(self.client, self.server['id'],
+            self.servers_client.resume_server(self.server['id'])
+            waiters.wait_for_server_status(self.servers_client,
+                                           self.server['id'],
                                            'ACTIVE')
 
         super(SuspendServerRbacTest, self).tearDown()
@@ -60,8 +56,8 @@
         rule="os_compute_api:os-suspend-server:suspend")
     def test_suspend_server(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.suspend_server(self.server['id'])
-        waiters.wait_for_server_status(self.client, self.server['id'],
+        self.servers_client.suspend_server(self.server['id'])
+        waiters.wait_for_server_status(self.servers_client, self.server['id'],
                                        'SUSPENDED')
 
     @decorators.idempotent_id('4d90bd02-11f8-45b1-a8a1-534665584675')
@@ -69,11 +65,11 @@
         service="nova",
         rule="os_compute_api:os-suspend-server:resume")
     def test_resume_server(self):
-        self.client.suspend_server(self.server['id'])
-        waiters.wait_for_server_status(self.client, self.server['id'],
+        self.servers_client.suspend_server(self.server['id'])
+        waiters.wait_for_server_status(self.servers_client, self.server['id'],
                                        'SUSPENDED')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.resume_server(self.server['id'])
-        waiters.wait_for_server_status(self.client,
+        self.servers_client.resume_server(self.server['id'])
+        waiters.wait_for_server_status(self.servers_client,
                                        self.server['id'],
                                        'ACTIVE')
diff --git a/patrole_tempest_plugin/tests/api/compute/test_tenant_networks_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_tenant_networks_rbac.py
index ee2b9a2..9313943 100644
--- a/patrole_tempest_plugin/tests/api/compute/test_tenant_networks_rbac.py
+++ b/patrole_tempest_plugin/tests/api/compute/test_tenant_networks_rbac.py
@@ -35,7 +35,7 @@
     @classmethod
     def setup_clients(cls):
         super(TenantNetworksRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.tenant_networks_client
+        cls.tenant_networks_client = cls.os_primary.tenant_networks_client
 
     @classmethod
     def skip_checks(cls):
@@ -58,4 +58,4 @@
         rule="os_compute_api:os-tenant-networks")
     def test_list_show_tenant_networks(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_tenant_networks()['networks']
+        self.tenant_networks_client.list_tenant_networks()['networks']
diff --git a/patrole_tempest_plugin/tests/api/compute/test_volume_rbac.py b/patrole_tempest_plugin/tests/api/compute/test_volume_rbac.py
new file mode 100644
index 0000000..a2ae8e5
--- /dev/null
+++ b/patrole_tempest_plugin/tests/api/compute/test_volume_rbac.py
@@ -0,0 +1,75 @@
+# Copyright 2017 AT&T Corporation.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from tempest.common import waiters
+from tempest.lib import decorators
+
+from patrole_tempest_plugin import rbac_rule_validation
+from patrole_tempest_plugin.tests.api.compute import rbac_base
+
+from tempest import config
+
+CONF = config.CONF
+
+
+class VolumeV235RbacTest(rbac_base.BaseV2ComputeRbacTest):
+    """RBAC tests for the Nova Volume client."""
+
+    # These tests will fail with a 404 starting from microversion 2.36.
+    # For more information, see:
+    # https://developer.openstack.org/api-ref/compute/volume-extension-os-volumes-os-snapshots-deprecated
+    min_microversion = '2.10'
+    max_microversion = '2.35'
+
+    @decorators.idempotent_id('2402013e-a624-43e3-9518-44a5d1dbb32d')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-volumes")
+    def test_create_volume(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        volume = self.volumes_extensions_client.create_volume(
+            size=CONF.volume.volume_size)['volume']
+        # Use the admin volumes client to wait, because waiting involves
+        # calling show API action which enforces a different policy.
+        waiters.wait_for_volume_resource_status(self.os_admin.volumes_client,
+                                                volume['id'], 'available')
+        # Use non-deprecated volumes_client for deletion.
+        self.addCleanup(self.volumes_client.delete_volume, volume['id'])
+
+    @decorators.idempotent_id('69b3888c-dff2-47b0-9fa4-0672619c9054')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-volumes")
+    def test_list_volumes(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.volumes_extensions_client.list_volumes()
+
+    @decorators.idempotent_id('4ba0a820-040f-488b-86bb-be2e920ea12c')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-volumes")
+    def test_show_volume(self):
+        volume = self.create_volume()
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.volumes_extensions_client.show_volume(volume['id'])
+
+    @decorators.idempotent_id('6e7870f2-1bb2-4b58-96f8-6782071ef327')
+    @rbac_rule_validation.action(
+        service="nova",
+        rule="os_compute_api:os-volumes")
+    def test_delete_volume(self):
+        volume = self.create_volume()
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.volumes_extensions_client.delete_volume(volume['id'])
diff --git a/patrole_tempest_plugin/tests/api/identity/rbac_base.py b/patrole_tempest_plugin/tests/api/identity/rbac_base.py
index b37477e..6cb3d2f 100644
--- a/patrole_tempest_plugin/tests/api/identity/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/identity/rbac_base.py
@@ -12,6 +12,7 @@
 #    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_log import log as logging
 
 from tempest.api.identity import base
@@ -19,7 +20,7 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 
-from patrole_tempest_plugin.rbac_utils import rbac_utils
+from patrole_tempest_plugin import rbac_utils
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -40,9 +41,7 @@
     def setup_clients(cls):
         super(BaseIdentityRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
-
-        cls.rbac_utils = rbac_utils()
-        cls.rbac_utils.switch_role(cls, toggle_rbac_role=False)
+        cls.rbac_utils = rbac_utils.RbacUtils(cls)
 
     @classmethod
     def resource_setup(cls):
@@ -77,7 +76,8 @@
         """Creates a service and an endpoint for test."""
         interface = 'public'
         url = data_utils.rand_url()
-        region_name = data_utils.rand_name('region')
+        region_name = data_utils.rand_name(
+            cls.__name__ + '-region')
         # Endpoint creation requires a service
         if service is None:
             service = cls.setup_test_service()
@@ -103,7 +103,7 @@
     @classmethod
     def setup_test_role(cls):
         """Set up a test role."""
-        name = data_utils.rand_name('test_role')
+        name = data_utils.rand_name(cls.__name__ + '-test_role')
         role = cls.roles_client.create_role(name=name)['role']
         cls.roles.append(role)
 
@@ -112,9 +112,9 @@
     @classmethod
     def setup_test_service(cls):
         """Setup a test service."""
-        name = data_utils.rand_name('service')
+        name = data_utils.rand_name(cls.__name__ + '-service')
         serv_type = data_utils.rand_name('type')
-        desc = data_utils.rand_name('description')
+        desc = data_utils.rand_name(cls.__name__ + '-description')
 
         service = cls.services_client.create_service(
             name=name,
@@ -137,7 +137,7 @@
     @classmethod
     def setup_test_user(cls, password=None, **kwargs):
         """Set up a test user."""
-        username = data_utils.rand_name('test_user')
+        username = data_utils.rand_name(cls.__name__ + '-test_user')
         email = username + '@testmail.tm'
 
         user = cls.users_client.create_user(
@@ -195,10 +195,11 @@
     @classmethod
     def setup_test_tenant(cls):
         """Set up a test tenant."""
-        name = data_utils.rand_name('test_tenant')
+        name = data_utils.rand_name(cls.__name__ + '-test_tenant')
         tenant = cls.tenants_client.create_tenant(
             name=name,
-            description=data_utils.rand_name('desc'))['tenant']
+            description=data_utils.rand_name(
+                cls.__name__ + '-desc'))['tenant']
         cls.tenants.append(tenant)
         return tenant
 
@@ -213,8 +214,10 @@
         cls.creds_client = cls.os_primary.credentials_client
         cls.consumers_client = cls.os_primary.oauth_consumers_client
         cls.domains_client = cls.os_primary.domains_client
+        cls.domain_config_client = cls.os_primary.domain_config_client
         cls.endpoints_client = cls.os_primary.endpoints_v3_client
         cls.groups_client = cls.os_primary.groups_client
+        cls.identity_client = cls.os_primary.identity_v3_client
         cls.projects_client = cls.os_primary.projects_client
         cls.policies_client = cls.os_primary.policies_client
         cls.regions_client = cls.os_primary.regions_client
@@ -291,8 +294,9 @@
     def setup_test_domain(cls):
         """Set up a test domain."""
         domain = cls.domains_client.create_domain(
-            name=data_utils.rand_name('test_domain'),
-            description=data_utils.rand_name('desc'))['domain']
+            name=data_utils.rand_name(cls.__name__ + '-test_domain'),
+            description=data_utils.rand_name(
+                cls.__name__ + '-desc'))['domain']
         cls.domains.append(domain)
 
         return domain
@@ -300,7 +304,7 @@
     @classmethod
     def setup_test_group(cls):
         """Creates a group for test."""
-        name = data_utils.rand_name('test_group')
+        name = data_utils.rand_name(cls.__name__ + '-test_group')
         group = cls.groups_client.create_group(name=name)['group']
         cls.groups.append(group)
 
@@ -309,8 +313,9 @@
     @classmethod
     def setup_test_policy(cls):
         """Creates a policy for test."""
-        blob = data_utils.rand_name('test_blob')
-        policy_type = data_utils.rand_name('policy_type')
+        blob = data_utils.rand_name(cls.__name__ + '-test_blob')
+        policy_type = data_utils.rand_name(
+            cls.__name__ + '-policy_type')
 
         policy = cls.policies_client.create_policy(
             blob=blob,
@@ -324,8 +329,10 @@
     def setup_test_project(cls):
         """Set up a test project."""
         project = cls.projects_client.create_project(
-            name=data_utils.rand_name('test_project'),
-            description=data_utils.rand_name('desc'))['project']
+            name=data_utils.rand_name(
+                cls.__name__ + '-testproject'),
+            description=data_utils.rand_name(
+                cls.__name__ + '-desc'))['project']
         cls.projects.append(project)
 
         return project
@@ -333,7 +340,8 @@
     @classmethod
     def setup_test_region(cls):
         """Creates a region for test."""
-        description = data_utils.rand_name('test_region_desc')
+        description = data_utils.rand_name(
+            cls.__name__ + '-test_region_desc')
 
         region = cls.regions_client.create_region(
             description=description)['region']
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_auth_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_auth_rbac.py
new file mode 100644
index 0000000..bc096ce
--- /dev/null
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_auth_rbac.py
@@ -0,0 +1,38 @@
+# Copyright 2017 AT&T 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 decorators
+
+from patrole_tempest_plugin import rbac_rule_validation
+from patrole_tempest_plugin.tests.api.identity import rbac_base
+
+
+class IdentityAuthV3RbacTest(rbac_base.BaseIdentityV3RbacTest):
+    """Tests the APIs that enforce the auth policy actions.
+
+    For more information about the auth policy actions, see:
+    https://github.com/openstack/keystone/blob/master/keystone/common/policies/auth.py
+    """
+
+    # TODO(felipemonteiro): Add tests for identity:get_auth_catalog and
+    # identity:get_auth_domains once the endpoints are implemented in Tempest's
+    # identity v3 client.
+
+    @decorators.idempotent_id('2a9fbf7f-6feb-4161-ae4b-faf7d6421b1a')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_auth_projects")
+    def test_list_auth_projects(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.identity_client.list_auth_projects()['projects']
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_domain_configuration_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_domain_configuration_rbac.py
new file mode 100644
index 0000000..31f962a
--- /dev/null
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_domain_configuration_rbac.py
@@ -0,0 +1,165 @@
+# Copyright 2017 AT&T 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 import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.common.utils import test_utils
+from tempest.lib import decorators
+
+from patrole_tempest_plugin import rbac_rule_validation
+from patrole_tempest_plugin.tests.api.identity import rbac_base
+
+CONF = config.CONF
+
+
+class DomainConfigurationV3RbacTest(rbac_base.BaseIdentityV3RbacTest):
+    """RBAC tests for domain configuration client.
+
+    Provides coverage for the following policy actions:
+    https://github.com/openstack/keystone/blob/master/keystone/common/policies/domain_config.py
+    """
+
+    identity = {"driver": "ldap"}
+    ldap = {"url": "ldap://myldap.com:389/",
+            "user_tree_dn": "ou=Users,dc=my_new_root,dc=org"}
+
+    @classmethod
+    def resource_setup(cls):
+        super(DomainConfigurationV3RbacTest, cls).resource_setup()
+        cls.domain_id = cls.setup_test_domain()['id']
+
+    def setUp(self):
+        super(DomainConfigurationV3RbacTest, self).setUp()
+        self._create_domain_config(self.domain_id)
+
+    def _create_domain_config(self, domain_id):
+        domain_config = self.domain_config_client.create_domain_config(
+            domain_id, identity=self.identity, ldap=self.ldap)['config']
+        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
+                        self.domain_config_client.delete_domain_config,
+                        domain_id)
+        return domain_config
+
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:create_domain_config")
+    @decorators.idempotent_id('6bdaecd4-0843-4ed6-ab64-3a57ab0cd115')
+    def test_create_domain_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self._create_domain_config(self.domain_id)
+
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_domain_config")
+    @decorators.idempotent_id('6bdaecd4-0843-4ed6-ab64-3a57ab0cd118')
+    def test_show_domain_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_domain_config(self.domain_id)['config']
+
+    @decorators.idempotent_id('1b539f95-4991-4e09-960f-fa771e1007d7')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_domain_config")
+    def test_show_domain_group_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_domain_group_config(
+            self.domain_id, 'identity')['config']
+
+    @decorators.idempotent_id('590c774d-a294-44f8-866e-aac9f4ab3809')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_domain_config")
+    def test_show_domain_group_option_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_domain_group_option_config(
+            self.domain_id, 'identity', 'driver')['config']
+
+    @decorators.idempotent_id('21053885-1ce3-4167-b5e3-e470253481da')
+    @rbac_rule_validation.action(
+        service="keystone",
+        rule="identity:get_security_compliance_domain_config")
+    def test_show_security_compliance_domain_config(self):
+        # The "security_compliance" group can only be shown for the default
+        # domain.
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_domain_group_config(
+            CONF.identity.default_domain_id, 'security_compliance')
+
+    @decorators.idempotent_id('d1addd10-9ae4-4360-9961-47324fd22f23')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_domain_config_default")
+    def test_show_default_config_settings(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_default_config_settings()['config']
+
+    @decorators.idempotent_id('63183377-251f-4622-81f0-6b58a8a285c9')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_domain_config_default")
+    def test_show_default_group_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_default_group_config('identity')[
+            'config']
+
+    @decorators.idempotent_id('6440e9c1-e8da-474d-9118-89996fffe5f8')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:get_domain_config_default")
+    def test_show_default_group_option(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.show_default_group_option('identity',
+                                                            'driver')['config']
+
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:update_domain_config")
+    @decorators.idempotent_id('6bdaecd4-0843-4ed6-ab64-3a57ab0cd116')
+    def test_update_domain_config(self):
+        updated_config = {'ldap': {'url': data_utils.rand_url()}}
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.update_domain_config(
+            self.domain_id, **updated_config)['config']
+
+    @decorators.idempotent_id('6e32bf96-dbe9-4ac8-b814-0e79fa948285')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:update_domain_config")
+    def test_update_domain_group_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.update_domain_group_config(
+            self.domain_id, 'identity', identity=self.identity)['config']
+
+    @decorators.idempotent_id('d2c510da-a077-4c67-9522-27745ef2812b')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:update_domain_config")
+    def test_update_domain_group_option_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.update_domain_group_option_config(
+            self.domain_id, 'identity', 'driver', driver='ldap')['config']
+
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:delete_domain_config")
+    @decorators.idempotent_id('6bdaecd4-0843-4ed6-ab64-3a57ab0cd117')
+    def test_delete_domain_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.delete_domain_config(self.domain_id)
+
+    @decorators.idempotent_id('f479694b-df02-4d5a-88b6-c8b52f9341eb')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:delete_domain_config")
+    def test_delete_domain_group_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.delete_domain_group_config(self.domain_id,
+                                                             'identity')
+
+    @decorators.idempotent_id('f594bde3-31c9-414f-922d-0ddafdc0ca40')
+    @rbac_rule_validation.action(service="keystone",
+                                 rule="identity:delete_domain_config")
+    def test_delete_domain_group_option_config(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.domain_config_client.delete_domain_group_option_config(
+            self.domain_id, 'identity', 'driver')
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py
index b45c091..a8cd022 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_domains_rbac.py
@@ -34,7 +34,8 @@
     @decorators.idempotent_id('6bdaecd4-0843-4ed6-ab64-3a57ab0cd111')
     def test_update_domain(self):
         domain = self.setup_test_domain()
-        new_domain_name = data_utils.rand_name('test_update_domain')
+        new_domain_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test_update_domain')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.domains_client.update_domain(domain['id'],
                                           domain=domain,
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_groups_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_groups_rbac.py
index 74402d5..0fc29b7 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_groups_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_groups_rbac.py
@@ -41,7 +41,8 @@
     @decorators.idempotent_id('790fb7be-a657-4a64-9b83-c43425cf180b')
     def test_update_group(self):
         group = self.setup_test_group()
-        new_group_name = data_utils.rand_name('group')
+        new_group_name = data_utils.rand_name(
+            self.__class__.__name__ + '-group')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.groups_client.update_group(group['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py
index fab5a6e..5e21338 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_oauth_consumers_rbac.py
@@ -24,7 +24,8 @@
 class IdentityConsumersV3RbacTest(rbac_base.BaseIdentityV3RbacTest):
 
     def _create_consumer(self):
-        description = data_utils.rand_name('test_create_consumer')
+        description = data_utils.rand_name(
+            self.__class__.__name__ + '-test_consumer')
         consumer = self.consumers_client.create_consumer(
             description)['consumer']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -53,7 +54,8 @@
     @decorators.idempotent_id('0f148510-63bf-11e6-4522-080044d0d972')
     def test_update_consumer(self):
         consumer = self._create_consumer()
-        new_description = data_utils.rand_name('test_update_consumer')
+        new_description = data_utils.rand_name(
+            self.__class__.__name__ + '-test_consumer')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.consumers_client.update_consumer(consumer['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_policies_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_policies_rbac.py
index da587d9..3e03ac0 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_policies_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_policies_rbac.py
@@ -34,7 +34,8 @@
     @decorators.idempotent_id('9cfed3c6-0b27-4d15-be67-e06e0cfb01b9')
     def test_update_policy(self):
         policy = self.setup_test_policy()
-        updated_policy_type = data_utils.rand_name('policy_type')
+        updated_policy_type = data_utils.rand_name(
+            self.__class__.__name__ + '-policy_type')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.policies_client.update_policy(policy['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_projects_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_projects_rbac.py
index 0c65602..51086ae 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_projects_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_projects_rbac.py
@@ -34,7 +34,8 @@
     @decorators.idempotent_id('0f148510-63bf-11e6-1564-080044d0d905')
     def test_update_project(self):
         project = self.setup_test_project()
-        new_desc = data_utils.rand_name('description')
+        new_desc = data_utils.rand_name(
+            self.__class__.__name__ + '-description')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.projects_client.update_project(project['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_regions_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_regions_rbac.py
index 541e8af..55a2f77 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_regions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_regions_rbac.py
@@ -34,7 +34,8 @@
     @decorators.idempotent_id('6bdaecd4-0843-4ed6-ab64-3a57ab0cd120')
     def test_update_region(self):
         region = self.setup_test_region()
-        new_description = data_utils.rand_name('test_update_region')
+        new_description = data_utils.rand_name(
+            self.__class__.__name__ + '-test_update_region')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.regions_client.update_region(region['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_role_assignments_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_role_assignments_rbac.py
index 6fe6c29..c1d0369 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_role_assignments_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_role_assignments_rbac.py
@@ -21,17 +21,13 @@
 
 class IdentityRoleAssignmentsV3RbacTest(rbac_base.BaseIdentityV3RbacTest):
 
-    @classmethod
-    def setup_clients(cls):
-        super(IdentityRoleAssignmentsV3RbacTest, cls).setup_clients()
-        cls.client = cls.role_assignments_client
-
     @decorators.idempotent_id('afe57adb-1b9c-43d9-84a9-f0cf4c94e416')
     @rbac_rule_validation.action(service="keystone",
                                  rule="identity:list_role_assignments")
     def test_list_role_assignments(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_role_assignments()['role_assignments']
+        self.role_assignments_client.\
+            list_role_assignments()['role_assignments']
 
     @decorators.idempotent_id('36c7a990-857e-415c-8717-38d7200a9894')
     @rbac_rule_validation.action(
@@ -41,6 +37,6 @@
         project = self.setup_test_project()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_role_assignments(
-            include_subtree=True, **{'scope.project.id': project['id']})[
-            'role_assignments']
+        self.role_assignments_client.list_role_assignments(
+            include_subtree=True,
+            **{'scope.project.id': project['id']})['role_assignments']
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_roles_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_roles_rbac.py
index 0458e16..22b03f5 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_roles_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_roles_rbac.py
@@ -44,7 +44,8 @@
                                  rule="identity:update_role")
     @decorators.idempotent_id('0f148510-63bf-11e6-1395-080044d0d905')
     def test_update_role(self):
-        new_role_name = data_utils.rand_name('test_update_role')
+        new_role_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test_update_role')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.roles_client.update_role(self.role['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_services_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_services_rbac.py
index 2f0d1ac..44ce1a1 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_services_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_services_rbac.py
@@ -34,7 +34,7 @@
     @decorators.idempotent_id('b39447d1-2cf6-40e5-a899-46f287f2ecf0')
     def test_update_service(self):
         service = self.setup_test_service()
-        new_name = data_utils.rand_name('service')
+        new_name = data_utils.rand_name(self.__class__.__name__ + '-service')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.services_client.update_service(service['id'],
diff --git a/patrole_tempest_plugin/tests/api/identity/v3/test_users_rbac.py b/patrole_tempest_plugin/tests/api/identity/v3/test_users_rbac.py
index d3b3e4c..723455e 100644
--- a/patrole_tempest_plugin/tests/api/identity/v3/test_users_rbac.py
+++ b/patrole_tempest_plugin/tests/api/identity/v3/test_users_rbac.py
@@ -39,7 +39,8 @@
     @decorators.idempotent_id('0f148510-63bf-11e6-4522-080044d0d905')
     def test_update_user(self):
         user = self.setup_test_user()
-        new_email = data_utils.rand_name('user_email')
+        new_email = data_utils.rand_name(
+            self.__class__.__name__ + '-user_email')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.users_client.update_user(user['id'],
diff --git a/patrole_tempest_plugin/tests/api/image/rbac_base.py b/patrole_tempest_plugin/tests/api/image/rbac_base.py
index 2a45ccb..7270560 100644
--- a/patrole_tempest_plugin/tests/api/image/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/image/rbac_base.py
@@ -14,7 +14,7 @@
 from tempest.api.image import base as image_base
 from tempest import config
 
-from patrole_tempest_plugin.rbac_utils import rbac_utils
+from patrole_tempest_plugin import rbac_utils
 
 CONF = config.CONF
 
@@ -28,14 +28,13 @@
         super(BaseV1ImageRbacTest, cls).skip_checks()
         if not CONF.rbac.enable_rbac:
             raise cls.skipException(
-                "%s skipped as RBAC Flag not enabled" % cls.__name__)
+                "%s skipped as RBAC testing not enabled" % cls.__name__)
 
     @classmethod
     def setup_clients(cls):
         super(BaseV1ImageRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
-        cls.rbac_utils = rbac_utils()
-        cls.rbac_utils.switch_role(cls, toggle_rbac_role=False)
+        cls.rbac_utils = rbac_utils.RbacUtils(cls)
 
 
 class BaseV2ImageRbacTest(image_base.BaseV2ImageTest):
@@ -47,11 +46,10 @@
         super(BaseV2ImageRbacTest, cls).skip_checks()
         if not CONF.rbac.enable_rbac:
             raise cls.skipException(
-                "%s skipped as RBAC Flag not enabled" % cls.__name__)
+                "%s skipped as RBAC testing not enabled" % cls.__name__)
 
     @classmethod
     def setup_clients(cls):
         super(BaseV2ImageRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
-        cls.rbac_utils = rbac_utils()
-        cls.rbac_utils.switch_role(cls, toggle_rbac_role=False)
+        cls.rbac_utils = rbac_utils.RbacUtils(cls)
diff --git a/patrole_tempest_plugin/tests/api/image/v1/test_images_rbac.py b/patrole_tempest_plugin/tests/api/image/v1/test_images_rbac.py
index ae4e4d2..7010baa 100644
--- a/patrole_tempest_plugin/tests/api/image/v1/test_images_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v1/test_images_rbac.py
@@ -35,7 +35,7 @@
         RBAC test for the glance add_image policy.
         """
         properties = {'prop1': 'val1'}
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.create_image(name=image_name,
                           container_format='bare',
@@ -50,7 +50,7 @@
 
         RBAC test for the glance delete_image policy.
         """
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         properties = {'prop1': 'val1'}
         body = self.create_image(name=image_name,
                                  container_format='bare',
@@ -68,7 +68,7 @@
 
         RBAC test for the glance download_image policy.
         """
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         properties = {'prop1': 'val1'}
         body = self.create_image(name=image_name,
                                  container_format='bare',
@@ -90,7 +90,7 @@
 
         RBAC test for the glance get_image policy.
         """
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         properties = {'prop1': 'val1'}
         body = self.create_image(name=image_name,
                                  container_format='bare',
@@ -122,7 +122,7 @@
 
         RBAC test for the glance modify_image policy.
         """
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         properties = {'prop1': 'val1'}
         body = self.create_image(name=image_name,
                                  container_format='bare',
@@ -141,7 +141,7 @@
 
         RBAC test for the glance publicize_image policy.
         """
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         properties = {'prop1': 'val1'}
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.create_image(name=image_name,
diff --git a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_objects_rbac.py b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_objects_rbac.py
index 1c937b0..74c64e1 100644
--- a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_objects_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_objects_rbac.py
@@ -35,7 +35,8 @@
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # create a md object, it will be cleaned automatically after
         # cleanup of namespace
-        object_name = data_utils.rand_name('test-object')
+        object_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-object')
         self.namespace_objects_client.create_namespace_object(
             namespace['namespace'],
             name=object_name)
@@ -66,7 +67,8 @@
         RBAC test for the glance modify_metadef_object policy
         """
         namespace = self.create_namespace()
-        object_name = data_utils.rand_name('test-object')
+        object_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-object')
         self.namespace_objects_client.create_namespace_object(
             namespace['namespace'],
             name=object_name)
@@ -89,7 +91,8 @@
         RBAC test for the glance get_metadef_object policy
         """
         namespace = self.create_namespace()
-        object_name = data_utils.rand_name('test-object')
+        object_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-object')
         self.namespace_objects_client.create_namespace_object(
             namespace['namespace'],
             name=object_name)
diff --git a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_property_rbac.py b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_property_rbac.py
index 0d194b7..93c50c4 100644
--- a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_property_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_property_rbac.py
@@ -38,7 +38,8 @@
         """
         namespace = self.create_namespace()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        property_name = data_utils.rand_name('test-ns-property')
+        property_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-ns-property')
         self.namespace_properties_client.create_namespace_property(
             namespace=namespace['namespace'], type="string",
             title=property_name, name=self.resource_name)
@@ -65,7 +66,8 @@
         RBAC test for the glance get_metadef_property policy
         """
         namespace = self.create_namespace()
-        property_name = data_utils.rand_name('test-ns-property')
+        property_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-ns-property')
         self.namespace_properties_client.create_namespace_property(
             namespace=namespace['namespace'], type="string",
             title=property_name, name=self.resource_name)
@@ -83,7 +85,8 @@
         RBAC test for the glance modify_metadef_property policy
         """
         namespace = self.create_namespace()
-        property_name = data_utils.rand_name('test-ns-property')
+        property_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-ns-property')
         self.namespace_properties_client.create_namespace_property(
             namespace=namespace['namespace'], type="string",
             title=property_name, name=self.resource_name)
diff --git a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_rbac.py b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_rbac.py
index fb4a599..c6bd60e 100644
--- a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_rbac.py
@@ -31,7 +31,8 @@
 
         RBAC test for the glance add_metadef_namespace policy
         """
-        namespace_name = data_utils.rand_name('test-ns')
+        namespace_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-ns')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.namespaces_client.create_namespace(
             namespace=namespace_name,
@@ -60,7 +61,8 @@
 
         RBAC test for the glance modify_metadef_namespace policy
         """
-        namespace_name = data_utils.rand_name('test-ns')
+        namespace_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-ns')
         body = self.namespaces_client.create_namespace(
             namespace=namespace_name,
             protected=False)
diff --git a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_tags_rbac.py b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_tags_rbac.py
index cfd544c..8e2bc49 100644
--- a/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_tags_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v2/test_image_namespace_tags_rbac.py
@@ -34,15 +34,11 @@
     """
 
     @classmethod
-    def setup_clients(cls):
-        super(NamespaceTagsRbacTest, cls).setup_clients()
-        cls.client = cls.namespace_tags_client
-
-    @classmethod
     def resource_setup(cls):
         super(NamespaceTagsRbacTest, cls).resource_setup()
         cls.namespace = cls.namespaces_client.create_namespace(
-            namespace=data_utils.rand_name('namespace'))['namespace']
+            namespace=data_utils.rand_name(
+                cls.__name__ + '-namespace'))['namespace']
 
     @classmethod
     def resource_cleanup(cls):
@@ -54,18 +50,18 @@
         namespace_tag_names = []
 
         for i in range(tag_count):
-            tag_name = data_utils.rand_name('tag')
+            tag_name = data_utils.rand_name(self.__class__.__name__ + '-tag')
             namespace_tag_names.append({'name': tag_name})
 
         if multiple:
-            namespace_tags = self.client.create_namespace_tags(
+            namespace_tags = self.namespace_tags_client.create_namespace_tags(
                 self.namespace, tags=namespace_tag_names)['tags']
         else:
-            namespace_tags = self.client.create_namespace_tag(
+            namespace_tags = self.namespace_tags_client.create_namespace_tag(
                 self.namespace, namespace_tag_names[0]['name'])
 
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.delete_namespace_tags,
+                        self.namespace_tags_client.delete_namespace_tags,
                         self.namespace)
 
         return [nt['name'] for nt in namespace_tags] if multiple \
@@ -84,18 +80,19 @@
     def test_show_namespace_tag(self):
         tag_name = self._create_namespace_tag()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_namespace_tag(self.namespace, tag_name)
+        self.namespace_tags_client.show_namespace_tag(self.namespace, tag_name)
 
     @decorators.idempotent_id('01593828-3edb-461e-8abc-8fdeb3927e37')
     @rbac_rule_validation.action(service="glance",
                                  rule="modify_metadef_tag")
     def test_update_namespace_tag(self):
         tag_name = self._create_namespace_tag()
-        updated_tag_name = data_utils.rand_name('tag')
+        updated_tag_name = data_utils.rand_name(
+            self.__class__.__name__ + '-tag')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_namespace_tag(self.namespace, tag_name,
-                                         name=updated_tag_name)
+        self.namespace_tags_client.update_namespace_tag(
+            self.namespace, tag_name, name=updated_tag_name)
 
     @decorators.idempotent_id('20ffaf76-ebdc-4267-a1ad-194346f5cc91')
     @rbac_rule_validation.action(service="glance",
@@ -109,4 +106,4 @@
                                  rule="get_metadef_tags")
     def test_list_namespace_tags(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_namespace_tags(self.namespace)
+        self.namespace_tags_client.list_namespace_tags(self.namespace)
diff --git a/patrole_tempest_plugin/tests/api/image/v2/test_image_resource_types_rbac.py b/patrole_tempest_plugin/tests/api/image/v2/test_image_resource_types_rbac.py
index 552a137..6727cc8 100644
--- a/patrole_tempest_plugin/tests/api/image/v2/test_image_resource_types_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v2/test_image_resource_types_rbac.py
@@ -26,7 +26,8 @@
     @classmethod
     def resource_setup(cls):
         super(ImageResourceTypesRbacTest, cls).resource_setup()
-        cls.namespace_name = data_utils.rand_name('test-ns')
+        cls.namespace_name = data_utils.rand_name(
+            cls.__name__ + '-test-ns')
         cls.namespaces_client.create_namespace(
             namespace=cls.namespace_name,
             protected=False)
diff --git a/patrole_tempest_plugin/tests/api/image/v2/test_images_rbac.py b/patrole_tempest_plugin/tests/api/image/v2/test_images_rbac.py
index 880f892..5b7c823 100644
--- a/patrole_tempest_plugin/tests/api/image/v2/test_images_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/v2/test_images_rbac.py
@@ -30,7 +30,7 @@
         cls.client = cls.os_primary.image_client_v2
 
     def _create_image(self, **kwargs):
-        image_name = data_utils.rand_name('image')
+        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
         image = self.create_image(name=image_name,
                                   container_format='bare',
                                   disk_format='raw',
@@ -135,7 +135,8 @@
         image = self._create_image()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        updated_image_name = data_utils.rand_name('image')
+        updated_image_name = data_utils.rand_name(
+            self.__class__.__name__ + '-image')
         self.client.update_image(image['id'], [
             dict(replace='/name', value=updated_image_name)])
 
@@ -151,7 +152,9 @@
         image = self._create_image()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.add_image_tag(image['id'], data_utils.rand_name('tag'))
+        self.client.add_image_tag(
+            image['id'],
+            data_utils.rand_name(self.__class__.__name__ + '-tag'))
 
     @decorators.idempotent_id('c4a0bf9c-b78b-48c6-a31f-72c95f943c6e')
     @rbac_rule_validation.action(service="glance",
@@ -163,7 +166,7 @@
         RBAC test for the glance delete_image_tag endpoint
         """
         image = self._create_image()
-        tag_name = data_utils.rand_name('tag')
+        tag_name = data_utils.rand_name(self.__class__.__name__ + '-tag')
         self.client.add_image_tag(image['id'], tag_name)
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
diff --git a/patrole_tempest_plugin/tests/api/network/rbac_base.py b/patrole_tempest_plugin/tests/api/network/rbac_base.py
index 629f0ca..3ee31b7 100644
--- a/patrole_tempest_plugin/tests/api/network/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/network/rbac_base.py
@@ -16,7 +16,7 @@
 from tempest.api.network import base as network_base
 from tempest import config
 
-from patrole_tempest_plugin.rbac_utils import rbac_utils
+from patrole_tempest_plugin import rbac_utils
 
 CONF = config.CONF
 
@@ -30,11 +30,10 @@
         super(BaseNetworkRbacTest, cls).skip_checks()
         if not CONF.rbac.enable_rbac:
             raise cls.skipException(
-                "%s skipped as RBAC Flag not enabled" % cls.__name__)
+                "%s skipped as RBAC testing not enabled" % cls.__name__)
 
     @classmethod
     def setup_clients(cls):
         super(BaseNetworkRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
-        cls.rbac_utils = rbac_utils()
-        cls.rbac_utils.switch_role(cls, toggle_rbac_role=False)
+        cls.rbac_utils = rbac_utils.RbacUtils(cls)
diff --git a/patrole_tempest_plugin/tests/api/network/test_networks_rbac.py b/patrole_tempest_plugin/tests/api/network/test_networks_rbac.py
index 133ea74..8208fde 100644
--- a/patrole_tempest_plugin/tests/api/network/test_networks_rbac.py
+++ b/patrole_tempest_plugin/tests/api/network/test_networks_rbac.py
@@ -33,7 +33,8 @@
     def resource_setup(cls):
         super(RbacNetworksTest, cls).resource_setup()
 
-        network_name = data_utils.rand_name('rbac-admin-network-')
+        network_name = data_utils.rand_name(
+            cls.__name__ + '-rbac-admin-network-')
 
         post_body = {'name': network_name}
         body = cls.networks_client.create_network(**post_body)
@@ -65,7 +66,8 @@
                         provider_physical_network=None,
                         provider_segmentation_id=None):
 
-        network_name = data_utils.rand_name('test-network-')
+        network_name = data_utils.rand_name(
+            self.__class__.__name__ + '-test-network-')
         post_body = {'name': network_name}
 
         if shared is not None:
diff --git a/patrole_tempest_plugin/tests/api/network/test_routers_rbac.py b/patrole_tempest_plugin/tests/api/network/test_routers_rbac.py
index 5ea1180..1be46ab 100644
--- a/patrole_tempest_plugin/tests/api/network/test_routers_rbac.py
+++ b/patrole_tempest_plugin/tests/api/network/test_routers_rbac.py
@@ -74,7 +74,7 @@
         RBAC test for the neutron
         create_router:external_gateway_info:enable_snat policy
         """
-        name = data_utils.rand_name('snat-router')
+        name = data_utils.rand_name(self.__class__.__name__ + '-snat-router')
         external_gateway_info = {'network_id': self.network['id'],
                                  'enable_snat': True}
 
@@ -94,7 +94,7 @@
         RBAC test for the neutron
         create_router:external_gateway_info:external_fixed_ips policy
         """
-        name = data_utils.rand_name('snat-router')
+        name = data_utils.rand_name(self.__class__.__name__ + '-snat-router')
 
         # Pick an unused IP address.
         ip_list = net_utils.get_unused_ip_addresses(self.ports_client,
@@ -134,7 +134,8 @@
 
         RBAC test for the neutron update_router policy
         """
-        new_name = data_utils.rand_name('new-router-name')
+        new_name = data_utils.rand_name(self.__class__.__name__ +
+                                        '-new-router-name')
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.routers_client.update_router(self.router['id'],
                                           name=new_name)
diff --git a/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py b/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py
index e04600e..20f4bea 100644
--- a/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py
+++ b/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py
@@ -30,7 +30,7 @@
     @classmethod
     def resource_setup(cls):
         super(SecGroupRbacTest, cls).resource_setup()
-        secgroup_name = data_utils.rand_name('secgroup')
+        secgroup_name = data_utils.rand_name(cls.__name__ + '-secgroup')
         cls.secgroup = cls.security_groups_client.create_security_group(
             name=secgroup_name)['security_group']
 
@@ -44,7 +44,7 @@
 
     def _create_security_group(self):
         # Create a security group
-        name = data_utils.rand_name('secgroup')
+        name = data_utils.rand_name(self.__class__.__name__ + '-secgroup')
         security_group =\
             self.security_groups_client.create_security_group(
                 name=name)['security_group']
diff --git a/patrole_tempest_plugin/tests/api/volume/rbac_base.py b/patrole_tempest_plugin/tests/api/volume/rbac_base.py
index ccadad1..1d390b7 100644
--- a/patrole_tempest_plugin/tests/api/volume/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/volume/rbac_base.py
@@ -16,7 +16,7 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib.common.utils import test_utils
 
-from patrole_tempest_plugin.rbac_utils import rbac_utils
+from patrole_tempest_plugin import rbac_utils
 
 CONF = config.CONF
 
@@ -37,12 +37,9 @@
         super(BaseVolumeRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
 
-        cls.rbac_utils = rbac_utils()
-        cls.rbac_utils.switch_role(cls, toggle_rbac_role=False)
+        cls.rbac_utils = rbac_utils.RbacUtils(cls)
 
         version_checker = {
-            1: [cls.os_primary.volume_hosts_client,
-                cls.os_primary.volume_types_client],
             2: [cls.os_primary.volume_hosts_v2_client,
                 cls.os_primary.volume_types_v2_client],
             3: [cls.os_primary.volume_hosts_v2_client,
diff --git a/patrole_tempest_plugin/tests/api/volume/test_capabilities_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_capabilities_rbac.py
index 9d76ef3..45b1660 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_capabilities_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_capabilities_rbac.py
@@ -32,7 +32,7 @@
     @classmethod
     def setup_clients(cls):
         super(CapabilitiesRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.volume_capabilities_v2_client
+        cls.capabilities_client = cls.os_primary.volume_capabilities_v2_client
         cls.hosts_client = cls.os_primary.volume_hosts_v2_client
 
     @rbac_rule_validation.action(service="cinder",
@@ -41,7 +41,7 @@
     def test_show_back_end_capabilities(self):
         host = self.hosts_client.list_hosts()['hosts'][0]['host_name']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_backend_capabilities(host)
+        self.capabilities_client.show_backend_capabilities(host)
 
 
 class CapabilitiesV3RbacTest(CapabilitiesRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_encryption_types_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_encryption_types_rbac.py
index d829591..f11ef03 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_encryption_types_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_encryption_types_rbac.py
@@ -31,11 +31,11 @@
     @classmethod
     def setup_clients(cls):
         super(EncryptionTypesRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.encryption_types_v2_client
+        cls.encryption_types_client = cls.os_primary.encryption_types_v2_client
 
     def _create_volume_type_encryption(self):
         vol_type_id = self.create_volume_type()['id']
-        self.client.create_encryption_type(
+        self.encryption_types_client.create_encryption_type(
             vol_type_id,
             provider="nova.volume.encryptors.luks.LuksEncryptor",
             control_location="front-end")['encryption']
@@ -48,7 +48,7 @@
     def test_create_volume_type_encryption(self):
         vol_type_id = self.create_volume_type()['id']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.create_encryption_type(
+        self.encryption_types_client.create_encryption_type(
             vol_type_id,
             provider="nova.volume.encryptors.luks.LuksEncryptor",
             control_location="front-end")['encryption']
@@ -60,7 +60,7 @@
     def test_delete_volume_type_encryption(self):
         vol_type_id = self._create_volume_type_encryption()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_encryption_type(vol_type_id)
+        self.encryption_types_client.delete_encryption_type(vol_type_id)
 
     @decorators.idempotent_id('42da9fec-32fd-4dca-9242-8a53b2fed25a')
     @rbac_rule_validation.action(
@@ -69,8 +69,9 @@
     def test_update_volume_type_encryption(self):
         vol_type_id = self._create_volume_type_encryption()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_encryption_type(vol_type_id,
-                                           control_location="front-end")
+        self.encryption_types_client.update_encryption_type(
+            vol_type_id,
+            control_location="front-end")
 
     @decorators.idempotent_id('1381a3dc-248f-4282-b231-c9399018c804')
     @rbac_rule_validation.action(
@@ -79,7 +80,7 @@
     def test_show_volume_type_encryption(self):
         vol_type_id = self._create_volume_type_encryption()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_encryption_type(vol_type_id)
+        self.encryption_types_client.show_encryption_type(vol_type_id)
 
 
 class EncryptionTypesV3RbacTest(EncryptionTypesRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_qos_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_qos_rbac.py
index 4638e78..cc24fd4 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_qos_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_qos_rbac.py
@@ -27,16 +27,16 @@
     def setup_clients(cls):
         super(VolumeQOSRbacTest, cls).setup_clients()
         cls.auth_provider = cls.os_primary.auth_provider
-        cls.client = cls.os_primary.volume_qos_v2_client
+        cls.qos_client = cls.os_primary.volume_qos_v2_client
 
     def _create_test_qos_specs(self, name=None, consumer=None, **kwargs):
         """Create a test Qos-Specs."""
         name = name or data_utils.rand_name(self.__class__.__name__ + '-QoS')
         consumer = consumer or 'front-end'
-        qos_specs = self.client.create_qos(
+        qos_specs = self.qos_client.create_qos(
             name=name, consumer=consumer, **kwargs)['qos_specs']
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.delete_qos, qos_specs['id'])
+                        self.qos_client.delete_qos, qos_specs['id'])
         return qos_specs
 
     @rbac_rule_validation.action(
@@ -55,7 +55,7 @@
         qos = self._create_test_qos_specs()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # Delete a qos
-        self.client.delete_qos(qos['id'])
+        self.qos_client.delete_qos(qos['id'])
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume_extension:qos_specs_manage:read")
@@ -65,7 +65,7 @@
         qos = self._create_test_qos_specs()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # Get a qos
-        self.client.show_qos(qos['id'])['qos_specs']
+        self.qos_client.show_qos(qos['id'])['qos_specs']
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume_extension:qos_specs_manage:read")
@@ -73,7 +73,7 @@
     def test_list_qos(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # list all qos
-        self.client.list_qos()['qos_specs']
+        self.qos_client.list_qos()['qos_specs']
 
     @rbac_rule_validation.action(
         service="cinder", rule="volume_extension:qos_specs_manage:update")
@@ -83,7 +83,7 @@
         qos = self._create_test_qos_specs()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # set key
-        self.client.set_qos_key(qos['id'], iops_bytes='500')['qos_specs']
+        self.qos_client.set_qos_key(qos['id'], iops_bytes='500')['qos_specs']
 
     @rbac_rule_validation.action(
         service="cinder", rule="volume_extension:qos_specs_manage:update")
@@ -92,13 +92,13 @@
         # Create a qos
         qos = self._create_test_qos_specs()
         # Set key
-        self.client.set_qos_key(qos['id'], iops_bytes='500')['qos_specs']
+        self.qos_client.set_qos_key(qos['id'], iops_bytes='500')['qos_specs']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # Unset key
         keys = ['iops_bytes']
-        self.client.unset_qos_key(qos['id'], keys)
+        self.qos_client.unset_qos_key(qos['id'], keys)
         operation = 'qos-key-unset'
-        waiters.wait_for_qos_operations(self.client, qos['id'],
+        waiters.wait_for_qos_operations(self.qos_client, qos['id'],
                                         operation, args=keys)
 
     @rbac_rule_validation.action(
@@ -111,8 +111,8 @@
         vol_type = self.create_volume_type()['id']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # associate the qos-specs with volume-types
-        self.client.associate_qos(qos['id'], vol_type)
-        self.addCleanup(self.client.disassociate_qos, qos['id'], vol_type)
+        self.qos_client.associate_qos(qos['id'], vol_type)
+        self.addCleanup(self.qos_client.disassociate_qos, qos['id'], vol_type)
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume_extension:qos_specs_manage:read")
@@ -122,11 +122,11 @@
         qos = self._create_test_qos_specs()
         vol_type = self.create_volume_type()['id']
         # associate the qos-specs with volume-types
-        self.client.associate_qos(qos['id'], vol_type)
-        self.addCleanup(self.client.disassociate_qos, qos['id'], vol_type)
+        self.qos_client.associate_qos(qos['id'], vol_type)
+        self.addCleanup(self.qos_client.disassociate_qos, qos['id'], vol_type)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # get the association of the qos-specs
-        self.client.show_association_qos(qos['id'])
+        self.qos_client.show_association_qos(qos['id'])
 
     @rbac_rule_validation.action(
         service="cinder", rule="volume_extension:qos_specs_manage:update")
@@ -136,14 +136,14 @@
         qos = self._create_test_qos_specs()
         vol_type = self.create_volume_type()['id']
         # associate the qos-specs with volume-types
-        self.client.associate_qos(qos['id'], vol_type)
+        self.qos_client.associate_qos(qos['id'], vol_type)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.disassociate_qos, qos['id'], vol_type)
+                        self.qos_client.disassociate_qos, qos['id'], vol_type)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # disassociate a volume-type with qos-specs
-        self.client.disassociate_qos(qos['id'], vol_type)
+        self.qos_client.disassociate_qos(qos['id'], vol_type)
         operation = 'disassociate'
-        waiters.wait_for_qos_operations(self.client, qos['id'],
+        waiters.wait_for_qos_operations(self.qos_client, qos['id'],
                                         operation, args=vol_type)
 
     @rbac_rule_validation.action(
@@ -154,12 +154,12 @@
         # create a test volume-type
         vol_type = self.create_volume_type()['id']
         # associate the qos-specs with volume-types
-        self.client.associate_qos(qos['id'], vol_type)
+        self.qos_client.associate_qos(qos['id'], vol_type)
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.disassociate_qos, qos['id'], vol_type)
+                        self.qos_client.disassociate_qos, qos['id'], vol_type)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # disassociate all volume-types from qos-specs
-        self.client.disassociate_all_qos(qos['id'])
+        self.qos_client.disassociate_all_qos(qos['id'])
         operation = 'disassociate-all'
-        waiters.wait_for_qos_operations(self.client, qos['id'],
+        waiters.wait_for_qos_operations(self.qos_client, qos['id'],
                                         operation)
diff --git a/patrole_tempest_plugin/tests/api/volume/test_quota_classes_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_quota_classes_rbac.py
index 44c0d3e..1518ef4 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_quota_classes_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_quota_classes_rbac.py
@@ -34,7 +34,7 @@
     @classmethod
     def setup_clients(cls):
         super(QuotaClassesRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.quota_classes_client
+        cls.quota_classes_client = cls.os_primary.quota_classes_client
         cls.quota_name = data_utils.rand_name(cls.__name__ + '-QuotaClass')
 
     @decorators.idempotent_id('1a060def-2b43-4534-97f5-5eadbbe8c726')
@@ -42,18 +42,20 @@
                                  rule="volume_extension:quota_classes")
     def test_show_quota_class_set(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_quota_class_set(self.quota_name)['quota_class_set']
+        self.quota_classes_client.show_quota_class_set(
+            self.quota_name)['quota_class_set']
 
     @decorators.idempotent_id('72159478-23a7-4c75-989f-6bac609eca62')
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume_extension:quota_classes")
     def test_update_quota_class_set(self):
-        quota_class_set = self.client.show_quota_class_set(self.quota_name)[
-            'quota_class_set']
+        quota_class_set = self.quota_classes_client.show_quota_class_set(
+            self.quota_name)['quota_class_set']
         quota_class_set.pop('id')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_quota_class_set(self.quota_name, **quota_class_set)
+        self.quota_classes_client.update_quota_class_set(self.quota_name,
+                                                         **quota_class_set)
 
 
 class QuotaClassesV3RbacTest(QuotaClassesRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_scheduler_stats_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_scheduler_stats_rbac.py
index 5a36709..dd423d1 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_scheduler_stats_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_scheduler_stats_rbac.py
@@ -32,7 +32,8 @@
     @classmethod
     def setup_clients(cls):
         super(SchedulerStatsRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.volume_scheduler_stats_v2_client
+        cls.scheduler_stats_client =\
+            cls.os_primary.volume_scheduler_stats_v2_client
 
     @rbac_rule_validation.action(
         service="cinder",
@@ -40,7 +41,7 @@
     @decorators.idempotent_id('5f800441-4d30-48ec-9e5b-0d55bc86acbb')
     def test_list_back_end_storage_pools(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_pools()
+        self.scheduler_stats_client.list_pools()
 
 
 class SchedulerStatsV3RbacTest(SchedulerStatsRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_snapshots_actions_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_snapshots_actions_rbac.py
index 5a4e246..fc39f4a 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_snapshots_actions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_snapshots_actions_rbac.py
@@ -31,11 +31,6 @@
             raise cls.skipException("Cinder snapshot feature disabled")
 
     @classmethod
-    def setup_clients(cls):
-        super(SnapshotsActionsRbacTest, cls).setup_clients()
-        cls.client = cls.snapshots_client
-
-    @classmethod
     def resource_setup(cls):
         super(SnapshotsActionsRbacTest, cls).resource_setup()
         cls.volume = cls.create_volume()
@@ -49,7 +44,8 @@
     def test_reset_snapshot_status(self):
         status = 'error'
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.reset_snapshot_status(self.snapshot['id'], status)
+        self.snapshots_client.reset_snapshot_status(self.snapshot['id'],
+                                                    status)
 
     @rbac_rule_validation.action(
         service="cinder",
@@ -59,8 +55,8 @@
         temp_snapshot = self.create_snapshot(self.volume['id'])
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.force_delete_snapshot(temp_snapshot['id'])
-        self.client.wait_for_resource_deletion(temp_snapshot['id'])
+        self.snapshots_client.force_delete_snapshot(temp_snapshot['id'])
+        self.snapshots_client.wait_for_resource_deletion(temp_snapshot['id'])
 
 
 class SnapshotsActionsV3RbacTest(SnapshotsActionsRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_user_messages_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_user_messages_rbac.py
index 60484f1..813d978 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_user_messages_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_user_messages_rbac.py
@@ -32,12 +32,14 @@
     @classmethod
     def setup_clients(cls):
         super(MessagesV3RbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.volume_v3_messages_client
+        cls.messages_client = cls.os_primary.volume_v3_messages_client
 
     def _create_user_message(self):
         """Trigger a 'no valid host' situation to generate a message."""
-        bad_protocol = data_utils.rand_name('storage_protocol')
-        bad_vendor = data_utils.rand_name('vendor_name')
+        bad_protocol = data_utils.rand_name(
+            self.__class__.__name__ + '-storage_protocol')
+        bad_vendor = data_utils.rand_name(
+            self.__class__.__name__ + '-vendor_name')
         extra_specs = {'storage_protocol': bad_protocol,
                        'vendor_name': bad_vendor}
         vol_type_name = data_utils.rand_name(
@@ -57,7 +59,7 @@
                                          'volume %s' % volume['id'])
 
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.client.delete_message, message_id)
+                        self.messages_client.delete_message, message_id)
 
         return message_id
 
@@ -67,7 +69,7 @@
         rule="message:get_all")
     def test_list_messages(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_messages()['messages']
+        self.messages_client.list_messages()['messages']
 
     @decorators.idempotent_id('9cc1ad1e-68a2-4407-8b60-ea77909bce08')
     @rbac_rule_validation.action(
@@ -77,7 +79,7 @@
         message_id = self._create_user_message()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_message(message_id)['message']
+        self.messages_client.show_message(message_id)['message']
 
     @decorators.idempotent_id('65ca7fb7-7f2c-443e-b144-ac86973a97be')
     @rbac_rule_validation.action(
@@ -87,5 +89,5 @@
         message_id = self._create_user_message()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_message(message_id)
-        self.client.wait_for_resource_deletion(message_id)
+        self.messages_client.delete_message(message_id)
+        self.messages_client.wait_for_resource_deletion(message_id)
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py
index 16e77ed..b490ebe 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volume_actions_rbac.py
@@ -35,7 +35,6 @@
     @classmethod
     def setup_clients(cls):
         super(VolumesActionsRbacTest, cls).setup_clients()
-        cls.client = cls.volumes_client
         if CONF.image_feature_enabled.api_v1:
             cls.image_client = cls.os_primary.image_client
         elif CONF.image_feature_enabled.api_v2:
@@ -58,13 +57,13 @@
             server['id'], volumeId=self.volume['id'],
             device='/dev/%s' % CONF.compute.volume_device_name)
         waiters.wait_for_volume_resource_status(
-            self.client, self.volume['id'], 'in-use')
+            self.volumes_client, self.volume['id'], 'in-use')
         self.addCleanup(self._detach_volume)
 
     def _detach_volume(self):
-        self.client.detach_volume(self.volume['id'])
+        self.volumes_client.detach_volume(self.volume['id'])
         waiters.wait_for_volume_resource_status(
-            self.client, self.volume['id'], 'available')
+            self.volumes_client, self.volume['id'], 'available')
 
     @test.services('compute')
     @rbac_rule_validation.action(service="cinder", rule="volume:attach")
@@ -97,7 +96,7 @@
         image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        body = self.client.upload_volume(
+        body = self.volumes_client.upload_volume(
             self.volume['id'], image_name=image_name, visibility="private",
             disk_format=CONF.volume.disk_format)['os-volume_upload_image']
         image_id = body["image_id"]
@@ -113,9 +112,9 @@
     @decorators.idempotent_id('2750717a-f250-4e41-9e09-02624aad6ff8')
     def test_volume_readonly_update(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-
-        self.client.update_volume_readonly(self.volume['id'], readonly=True)
-        self.addCleanup(self.client.update_volume_readonly,
+        self.volumes_client.update_volume_readonly(self.volume['id'],
+                                                   readonly=True)
+        self.addCleanup(self.volumes_client.update_volume_readonly,
                         self.volume['id'], readonly=False)
 
     @decorators.idempotent_id('72bab13c-dfaf-4b6d-a132-c83a85fb1776')
@@ -126,28 +125,29 @@
         volume = self.create_volume()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.unmanage_volume(volume['id'])
+        self.volumes_client.unmanage_volume(volume['id'])
 
     @decorators.idempotent_id('59b783c0-f4ef-430c-8a90-1bad97d4ec5c')
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:update")
     def test_volume_set_bootable(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.set_bootable_volume(self.volume['id'], bootable=True)
+        self.volumes_client.set_bootable_volume(self.volume['id'],
+                                                bootable=True)
 
     @decorators.idempotent_id('41566922-75a1-4484-99c7-9c8782ee99ac')
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:reserve_volume")
     def test_volume_reserve(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.reserve_volume(self.volume['id'])
+        self.volumes_client.reserve_volume(self.volume['id'])
 
     @decorators.idempotent_id('e5fa9564-77d9-4e57-b0c0-3e0ae4d08535')
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:unreserve_volume")
     def test_volume_unreserve(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.unreserve_volume(self.volume['id'])
+        self.volumes_client.unreserve_volume(self.volume['id'])
 
     @decorators.idempotent_id('c015c82f-7010-48cc-bd71-4ef542046f20')
     @rbac_rule_validation.action(service="cinder",
@@ -156,7 +156,7 @@
         volume = self.create_volume()
         vol_type = self.create_volume_type()['name']
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.retype_volume(volume['id'], new_type=vol_type)
+        self.volumes_client.retype_volume(volume['id'], new_type=vol_type)
 
     @rbac_rule_validation.action(
         service="cinder",
@@ -166,7 +166,7 @@
         volume = self.create_volume()
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.reset_volume_status(volume['id'], status='error')
+        self.volumes_client.reset_volume_status(volume['id'], status='error')
 
     @rbac_rule_validation.action(
         service="cinder",
@@ -174,11 +174,11 @@
     @decorators.idempotent_id('a312a937-6abf-4b91-a950-747086cbce48')
     def test_volume_force_delete(self):
         volume = self.create_volume()
-        self.client.reset_volume_status(volume['id'], status='error')
+        self.volumes_client.reset_volume_status(volume['id'], status='error')
 
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.force_delete_volume(volume['id'])
-        self.client.wait_for_resource_deletion(volume['id'])
+        self.volumes_client.force_delete_volume(volume['id'])
+        self.volumes_client.wait_for_resource_deletion(volume['id'])
 
     @decorators.idempotent_id('48bd302b-950a-4830-840c-3158246ecdcc')
     @test.services('compute')
@@ -203,3 +203,15 @@
 
 class VolumesActionsV3RbacTest(VolumesActionsRbacTest):
     _api_version = 3
+
+
+class VolumesActionsV312RbacTest(rbac_base.BaseVolumeRbacTest):
+    _api_version = 3
+    min_microversion = '3.12'
+    max_microversion = 'latest'
+
+    @decorators.idempotent_id('a654833d-4811-4acd-93ef-5ac4a34c75bc')
+    @rbac_rule_validation.action(service="cinder", rule="volume:get_all")
+    def test_show_volume_summary(self):
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.volumes_client.show_volume_summary()['volume-summary']
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_basic_crud_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_basic_crud_rbac.py
index b98c39a..d780de7 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volume_basic_crud_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volume_basic_crud_rbac.py
@@ -13,18 +13,20 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-from tempest import config
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 
 from patrole_tempest_plugin import rbac_rule_validation
 from patrole_tempest_plugin.tests.api.volume import rbac_base
 
-CONF = config.CONF
-
 
 class VolumesV2BasicCrudRbacTest(rbac_base.BaseVolumeRbacTest):
 
+    @classmethod
+    def resource_setup(cls):
+        super(VolumesV2BasicCrudRbacTest, cls).resource_setup()
+        cls.volume = cls.create_volume()
+
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:create")
     @decorators.idempotent_id('426b08ef-6394-4d06-9128-965d5a6c38ef')
@@ -43,36 +45,32 @@
     @rbac_rule_validation.action(service="cinder", rule="volume:get")
     @decorators.idempotent_id('c4c3fdd5-b1b1-49c3-b977-a9f40ee9257a')
     def test_get_volume(self):
-        volume = self.create_volume()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.volumes_client.show_volume(volume['id'])
+        self.volumes_client.show_volume(self.volume['id'])
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:get_all")
     @decorators.idempotent_id('e3ab7906-b04b-4c45-aa11-1104d302f940')
     def test_volume_list(self):
-        # Get a list of Volumes
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.volumes_client.list_volumes()
 
+    @rbac_rule_validation.action(service="cinder", rule="volume:update")
+    @decorators.idempotent_id('b751b889-9a9b-40d8-ae7d-4b0f65e71ac7')
+    def test_update_volume(self):
+        update_name = data_utils.rand_name(self.__class__.__name__ + 'volume')
+        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
+        self.volumes_client.update_volume(self.volume['id'],
+                                          name=update_name)
+
     @rbac_rule_validation.action(
         service="cinder",
         rule="volume_extension:volume_image_metadata")
     @decorators.idempotent_id('3d48ca91-f02b-4616-a69d-4a8b296c8529')
     def test_volume_list_image_metadata(self):
-        # Get a list of Volumes
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self.volumes_client.list_volumes(detail=True)
 
-    @rbac_rule_validation.action(service="cinder", rule="volume:update")
-    @decorators.idempotent_id('b751b889-9a9b-40d8-ae7d-4b0f65e71ac7')
-    def test_update_volume(self):
-        volume = self.create_volume()
-        new_name = data_utils.rand_name('volume')
-        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.volumes_client.update_volume(volume['id'],
-                                          name=new_name)
-
 
 class VolumesV3BasicCrudRbacTest(VolumesV2BasicCrudRbacTest):
     _api_version = 3
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_metadata_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_metadata_rbac.py
index d07e5c6..9e93658 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volume_metadata_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volume_metadata_rbac.py
@@ -23,83 +23,85 @@
 
 
 class VolumeMetadataRbacTest(rbac_base.BaseVolumeRbacTest):
+
     @classmethod
     def setup_clients(cls):
         super(VolumeMetadataRbacTest, cls).setup_clients()
-        cls.client = cls.volumes_client
         if CONF.image_feature_enabled.api_v1:
             cls.image_client = cls.os_primary.image_client
         elif CONF.image_feature_enabled.api_v2:
             cls.image_client = cls.os_primary.image_client_v2
-        cls.image_id = CONF.compute.image_ref
 
     @classmethod
     def resource_setup(cls):
         super(VolumeMetadataRbacTest, cls).resource_setup()
         cls.volume = cls.create_volume()
-        cls._add_metadata(cls.volume)
         cls.image_id = CONF.compute.image_ref
 
-    @classmethod
-    def _add_metadata(cls, volume):
+    def setUp(self):
+        super(VolumeMetadataRbacTest, self).setUp()
+        self._add_metadata(self.volume)
+
+    def tearDown(self):
+        self.volumes_client.update_volume_metadata(self.volume['id'], {})
+        super(VolumeMetadataRbacTest, self).tearDown()
+
+    def _add_metadata(self, volume):
         # Create metadata for the volume
-        metadata = {"key1": "value1",
-                    "key2": "value2",
-                    "key3": "value3",
-                    "key4": "<value&special_chars>"}
-        cls.client.create_volume_metadata(cls.volume['id'],
-                                          metadata)['metadata']
+        metadata = {"key1": "value1"}
+        self.volumes_client.create_volume_metadata(
+            self.volume['id'], metadata)['metadata']
 
     @rbac_rule_validation.action(service="cinder",
-                                 rule="volume:update_volume_metadata")
+                                 rule="volume:create_volume_metadata")
     @decorators.idempotent_id('232bbb8b-4c29-44dc-9077-b1398c20b738')
     def test_create_volume_metadata(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         self._add_metadata(self.volume)
 
     @rbac_rule_validation.action(service="cinder",
-                                 rule="volume:get")
+                                 rule="volume:get_volume_metadata")
     @decorators.idempotent_id('87ea37d9-23ab-47b2-a59c-16fc4d2c6dfa')
-    def test_get_volume_metadata(self):
+    def test_show_volume_metadata(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_volume_metadata(self.volume['id'])['metadata']
+        self.volumes_client.show_volume_metadata(self.volume['id'])['metadata']
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:delete_volume_metadata")
     @decorators.idempotent_id('7498dfc1-9db2-4423-ad20-e6dcb25d1beb')
     def test_delete_volume_metadata_item(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_volume_metadata_item(self.volume['id'], "key1")
+        self.volumes_client.delete_volume_metadata_item(self.volume['id'],
+                                                        "key1")
 
     @decorators.idempotent_id('a41c8eed-2051-4a25-b401-df036faacbdc')
     @rbac_rule_validation.action(
         service="cinder",
         rule="volume:delete_volume_metadata")
     def test_delete_volume_image_metadata(self):
-        self.client.update_volume_image_metadata(self.volume['id'],
-                                                 image_id=self.image_id)
+        self.volumes_client.update_volume_image_metadata(
+            self.volume['id'], image_id=self.image_id)
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_volume_image_metadata(self.volume['id'], 'image_id')
+        self.volumes_client.delete_volume_image_metadata(self.volume['id'],
+                                                         'image_id')
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:update_volume_metadata")
     @decorators.idempotent_id('8ce2ff80-99ba-49ae-9bb1-7e96729ee5af')
     def test_update_volume_metadata_item(self):
-        # Metadata to update
-        update_item = {"key3": "value3_update"}
+        updated_metadata_item = {"key1": "value1_update"}
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_volume_metadata_item(self.volume['id'], "key3",
-                                                update_item)['meta']
+        self.volumes_client.update_volume_metadata_item(
+            self.volume['id'], "key1", updated_metadata_item)['meta']
 
     @decorators.idempotent_id('a231b445-97a5-4657-b05f-245895e88da9')
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:update_volume_metadata")
     def test_update_volume_metadata(self):
-        # Metadata to update
-        update = {"key1": "value1",
-                  "key3": "value3"}
+        updated_metadata = {"key1": "value1"}
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_volume_metadata(self.volume['id'], update)
+        self.volumes_client.update_volume_metadata(self.volume['id'],
+                                                   updated_metadata)
 
     @decorators.idempotent_id('a9d9e825-5ea3-42e6-96f3-7ac4e97b2ed0')
     @rbac_rule_validation.action(
@@ -107,9 +109,5 @@
         rule="volume:update_volume_metadata")
     def test_update_volume_image_metadata(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_volume_image_metadata(self.volume['id'],
-                                                 image_id=self.image_id)
-
-
-class VolumeMetadataV3RbacTest(VolumeMetadataRbacTest):
-    _api_version = 3
+        self.volumes_client.update_volume_image_metadata(
+            self.volume['id'], image_id=self.image_id)
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_quotas_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_quotas_rbac.py
index 0321e13..a56ca5a 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volume_quotas_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volume_quotas_rbac.py
@@ -37,14 +37,14 @@
     @classmethod
     def setup_clients(cls):
         super(VolumeQuotasRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.volume_quotas_client
+        cls.quotas_client = cls.os_primary.volume_quotas_client
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume_extension:quotas:show")
     @decorators.idempotent_id('b3c7177e-b6b1-4d0f-810a-fc95606964dd')
     def test_list_default_quotas(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_default_quota_set(
+        self.quotas_client.show_default_quota_set(
             self.demo_tenant_id)['quota_set']
 
     @rbac_rule_validation.action(service="cinder",
@@ -56,7 +56,7 @@
                          'snapshots': 11}
         # Update limits for all quota resources
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_quota_set(
+        self.quotas_client.update_quota_set(
             self.demo_tenant_id,
             **new_quota_set)['quota_set']
 
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_services_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_services_rbac.py
index c1d8a65..ac6d2ce 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volume_services_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volume_services_rbac.py
@@ -36,7 +36,7 @@
     @classmethod
     def setup_clients(cls):
         super(VolumeServicesRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.volume_services_v2_client
+        cls.services_client = cls.os_primary.volume_services_v2_client
 
     @decorators.idempotent_id('b9134f01-97c0-4abd-9455-fe2f03e3f966')
     @rbac_rule_validation.action(
@@ -44,7 +44,7 @@
         rule="volume_extension:services:index")
     def test_list_services(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_services()['services']
+        self.services_client.list_services()['services']
 
 
 class VolumeServicesV3RbacTest(VolumeServicesRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volume_transfers_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volume_transfers_rbac.py
index 057379b..212482c 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volume_transfers_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volume_transfers_rbac.py
@@ -28,7 +28,7 @@
     @classmethod
     def setup_clients(cls):
         super(VolumesTransfersRbacTest, cls).setup_clients()
-        cls.client = cls.os_primary.volume_transfers_v2_client
+        cls.transfers_client = cls.os_primary.volume_transfers_v2_client
         cls.adm_volumes_client = cls.os_admin.volumes_v2_client
 
     @classmethod
@@ -41,12 +41,12 @@
         # 'awaiting-transfer' state, preventing cleanup and causing
         # the test to fail.
         test_utils.call_and_ignore_notfound_exc(
-            self.client.delete_volume_transfer, transfer['id'])
+            self.transfers_client.delete_volume_transfer, transfer['id'])
         waiters.wait_for_volume_resource_status(
             self.adm_volumes_client, self.volume['id'], 'available')
 
     def _create_transfer(self):
-        transfer = self.client.create_volume_transfer(
+        transfer = self.transfers_client.create_volume_transfer(
             volume_id=self.volume['id'])['transfer']
         self.addCleanup(self._delete_transfer, transfer)
         return transfer
@@ -64,14 +64,14 @@
     def test_get_volume_transfer(self):
         transfer = self._create_transfer()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_volume_transfer(transfer['id'])
+        self.transfers_client.show_volume_transfer(transfer['id'])
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:get_all_transfers")
     @decorators.idempotent_id('02a06f2b-5040-49e2-b2b7-619a7db59603')
     def test_list_volume_transfers(self):
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.list_volume_transfers()
+        self.transfers_client.list_volume_transfers()
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:accept_transfer")
@@ -79,8 +79,8 @@
     def test_accept_volume_transfer(self):
         transfer = self._create_transfer()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.accept_volume_transfer(transfer['id'],
-                                           auth_key=transfer['auth_key'])
+        self.transfers_client.accept_volume_transfer(
+            transfer['id'], auth_key=transfer['auth_key'])
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:delete_transfer")
@@ -88,7 +88,7 @@
     def test_delete_volume_transfer(self):
         transfer = self._create_transfer()
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.delete_volume_transfer(transfer['id'])
+        self.transfers_client.delete_volume_transfer(transfer['id'])
 
 
 class VolumesTransfersV3RbacTest(VolumesTransfersRbacTest):
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volumes_backup_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volumes_backup_rbac.py
index 8c04a8d..c39a376 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volumes_backup_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volumes_backup_rbac.py
@@ -43,7 +43,7 @@
         cls.volume = cls.create_volume()
 
     def _create_backup(self, volume_id):
-        backup_name = data_utils.rand_name('backup')
+        backup_name = data_utils.rand_name(self.__class__.__name__ + 'backup')
         backup = self.backups_client.create_backup(
             volume_id=volume_id, name=backup_name)['backup']
         self.addCleanup(
diff --git a/patrole_tempest_plugin/tests/api/volume/test_volumes_snapshots_rbac.py b/patrole_tempest_plugin/tests/api/volume/test_volumes_snapshots_rbac.py
index ce443e2..34889cd 100644
--- a/patrole_tempest_plugin/tests/api/volume/test_volumes_snapshots_rbac.py
+++ b/patrole_tempest_plugin/tests/api/volume/test_volumes_snapshots_rbac.py
@@ -25,11 +25,6 @@
 class VolumesSnapshotRbacTest(rbac_base.BaseVolumeRbacTest):
 
     @classmethod
-    def setup_clients(cls):
-        super(VolumesSnapshotRbacTest, cls).setup_clients()
-        cls.client = cls.snapshots_client
-
-    @classmethod
     def skip_checks(cls):
         super(VolumesSnapshotRbacTest, cls).skip_checks()
         if not CONF.volume_feature_enabled.snapshot:
@@ -67,8 +62,8 @@
     def test_snapshot_get(self):
         # Get the snapshot
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.show_snapshot(self.snapshot
-                                  ['id'])['snapshot']
+        self.snapshots_client.show_snapshot(self.snapshot
+                                            ['id'])['snapshot']
 
     @rbac_rule_validation.action(service="cinder",
                                  rule="volume:update_snapshot")
@@ -78,7 +73,7 @@
         params = {'description': new_desc}
         # Updates snapshot with new values
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
-        self.client.update_snapshot(
+        self.snapshots_client.update_snapshot(
             self.snapshot['id'], **params)['snapshot']
 
     @rbac_rule_validation.action(service="cinder",
@@ -99,7 +94,7 @@
         temp_snapshot = self.create_snapshot(self.volume['id'])
         self.rbac_utils.switch_role(self, toggle_rbac_role=True)
         # Delete the snapshot
-        self.client.delete_snapshot(temp_snapshot['id'])
+        self.snapshots_client.delete_snapshot(temp_snapshot['id'])
 
 
 class VolumesSnapshotV3RbacTest(VolumesSnapshotRbacTest):
diff --git a/patrole_tempest_plugin/tests/unit/test_rbac_rule_validation.py b/patrole_tempest_plugin/tests/unit/test_rbac_rule_validation.py
index 41af3b2..a90ec2a 100644
--- a/patrole_tempest_plugin/tests/unit/test_rbac_rule_validation.py
+++ b/patrole_tempest_plugin/tests/unit/test_rbac_rule_validation.py
@@ -37,8 +37,7 @@
         self.mock_args.auth_provider.credentials.user_id = \
             mock.sentinel.user_id
 
-        CONF.set_override('rbac_test_role', 'Member', group='rbac',
-                          enforce_type=True)
+        CONF.set_override('rbac_test_role', 'Member', group='rbac')
         self.addCleanup(CONF.clear_override, 'rbac_test_role', group='rbac')
 
     @mock.patch.object(rbac_rv, 'LOG', autospec=True)
@@ -253,16 +252,15 @@
                               self.mock_args)
         self.assertIn(("OverPermission: Role Member was allowed to perform "
                       "sentinel.action"), e.__str__())
-
         mock_log.error.assert_called_once_with(
-            "Role Member was allowed to perform sentinel.action")
+            'Role %s was allowed to perform %s', 'Member',
+            mock.sentinel.action)
 
     @mock.patch.object(rbac_rv, 'rbac_policy_parser', autospec=True)
     def test_invalid_policy_rule_throws_parsing_exception(
             self, mock_rbac_policy_parser):
         """Test that invalid policy action causes test to be skipped."""
-        CONF.set_override('strict_policy_check', True, group='rbac',
-                          enforce_type=True)
+        CONF.set_override('strict_policy_check', True, group='rbac')
         self.addCleanup(CONF.clear_override, 'strict_policy_check',
                         group='rbac')
 
diff --git a/patrole_tempest_plugin/tests/unit/test_rbac_utils.py b/patrole_tempest_plugin/tests/unit/test_rbac_utils.py
index a2917cf..0f38b1e 100644
--- a/patrole_tempest_plugin/tests/unit/test_rbac_utils.py
+++ b/patrole_tempest_plugin/tests/unit/test_rbac_utils.py
@@ -17,6 +17,7 @@
 import testtools
 
 from tempest import config
+from tempest.lib import base as lib_base
 from tempest.lib import exceptions as lib_exc
 from tempest.tests import base
 
@@ -28,35 +29,42 @@
 
 class RBACUtilsTest(base.TestCase):
 
-    def setUp(self):
+    available_roles = {
+        'roles': [
+            {'name': 'admin', 'id': 'admin_id'},
+            {'name': 'Member', 'id': 'member_id'}
+        ]
+    }
+
+    @mock.patch.object(rbac_utils, 'credentials', autospec=True,
+                       **{'is_admin_available.return_value': True})
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
+                       autospec=True, return_value=False)
+    def setUp(self, *args):
         super(RBACUtilsTest, self).setUp()
-        available_roles = {
-            'roles': [
-                {'name': 'admin', 'id': 'admin_id'},
-                {'name': 'Member', 'id': 'member_id'}
-            ]
-        }
 
-        # Because rbac_utils is a singleton, reset all of its role-related
-        # parameters to the correct values for each test run.
-        self.rbac_utils = rbac_utils.rbac_utils()
-        self.rbac_utils.switch_role_history = {}
-        self.rbac_utils.admin_role_id = 'admin_id'
-        self.rbac_utils.rbac_role_id = 'member_id'
-
-        self.mock_test_obj = mock.Mock()
+        self.mock_test_obj = mock.Mock(spec=lib_base.BaseTestCase)
         self.mock_test_obj.auth_provider = mock.Mock(
             **{'credentials.user_id': mock.sentinel.user_id,
                'credentials.tenant_id': mock.sentinel.project_id})
         self.mock_test_obj.os_admin = mock.Mock(
-            **{'roles_v3_client.list_roles.return_value': available_roles})
+            **{'roles_v3_client.list_roles.return_value': self.available_roles}
+        )
+        self.mock_test_obj.get_identity_version = mock.Mock(return_value=3)
 
-        CONF.set_override('admin_role', 'admin', group='identity',
-                          enforce_type=True)
-        CONF.set_override('auth_version', 'v3', group='identity',
-                          enforce_type=True)
-        CONF.set_override('rbac_test_role', 'Member', group='rbac',
-                          enforce_type=True)
+        with mock.patch.object(rbac_utils.RbacUtils, '_validate_switch_role'):
+            self.rbac_utils = rbac_utils.RbacUtils(self.mock_test_obj)
+        self.rbac_utils.switch_role_history = {}
+        self.rbac_utils.admin_role_id = 'admin_id'
+        self.rbac_utils.rbac_role_id = 'member_id'
+
+        CONF.set_override('admin_role', 'admin', group='identity')
+        CONF.set_override('auth_version', 'v3', group='identity')
+        CONF.set_override('rbac_test_role', 'Member', group='rbac')
+
+        roles_client = self.mock_test_obj.os_admin.roles_v3_client
+        roles_client.create_user_role_on_project.reset_mock()
+        self.mock_test_obj.auth_provider.reset_mock()
 
         self.addCleanup(CONF.clear_override, 'rbac_test_role', group='rbac')
         self.addCleanup(CONF.clear_override, 'admin_role', group='identity')
@@ -68,7 +76,7 @@
             **{'roles_client.list_user_roles_on_project.'
                'return_value': {'roles': [{'id': return_value}]}})
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     def test_initialization_with_missing_admin_role(self, _):
         self.mock_test_obj.os_admin = mock.Mock(
@@ -82,7 +90,7 @@
         self.assertIn("Role with name 'admin' does not exist in the system.",
                       e.__str__())
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     def test_initialization_with_missing_rbac_role(self, _):
         self.mock_test_obj.os_admin = mock.Mock(
@@ -119,43 +127,33 @@
                           'member_id'),
             ])
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     @mock.patch.object(rbac_utils, 'time', autospec=True)
-    def test_rbac_utils_switch_role_to_admin_role(self, mock_time,
-                                                  mock_clear_user_roles):
+    def test_rbac_utils_switch_role_to_admin_role(self, mock_time, _):
         self.rbac_utils.prev_switch_role = True
         self._mock_list_user_roles_on_project('admin_id')
         roles_client = self.mock_test_obj.os_admin.roles_v3_client
 
         self.rbac_utils.switch_role(self.mock_test_obj, False)
 
-        roles_client.create_user_role_on_project.\
-            assert_called_once_with(mock.sentinel.project_id,
-                                    mock.sentinel.user_id,
-                                    'admin_id')
-        mock_clear_user_roles.assert_called_once_with(
-            self.rbac_utils, 'admin_id')
+        roles_client.create_user_role_on_project.assert_called_once_with(
+            mock.sentinel.project_id, mock.sentinel.user_id, 'admin_id')
         self.mock_test_obj.auth_provider.clear_auth.assert_called_once_with()
         self.mock_test_obj.auth_provider.set_auth.assert_called_once_with()
         mock_time.sleep.assert_called_once_with(1)
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     @mock.patch.object(rbac_utils, 'time', autospec=True)
-    def test_rbac_utils_switch_role_to_rbac_role(self, mock_time,
-                                                 mock_clear_user_roles):
+    def test_rbac_utils_switch_role_to_rbac_role(self, mock_time, _):
         self._mock_list_user_roles_on_project('member_id')
         roles_client = self.mock_test_obj.os_admin.roles_v3_client
 
         self.rbac_utils.switch_role(self.mock_test_obj, True)
 
-        roles_client.create_user_role_on_project.\
-            assert_called_once_with(mock.sentinel.project_id,
-                                    mock.sentinel.user_id,
-                                    'member_id')
-        mock_clear_user_roles.assert_called_once_with(
-            self.rbac_utils, 'member_id')
+        roles_client.create_user_role_on_project.assert_called_once_with(
+            mock.sentinel.project_id, mock.sentinel.user_id, 'member_id')
         self.mock_test_obj.auth_provider.clear_auth.assert_called_once_with()
         self.mock_test_obj.auth_provider.set_auth.assert_called_once_with()
         mock_time.sleep.assert_called_once_with(1)
@@ -168,7 +166,7 @@
                           self.rbac_utils.switch_role, self.mock_test_obj,
                           None)
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     def test_rbac_utils_switch_roles_with_false_value_twice(self, _):
         self._mock_list_user_roles_on_project('admin_id')
@@ -181,7 +179,7 @@
             'twice. Make sure that you included a rbac_utils.switch_role '
             'method call inside the test.', str(e))
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     def test_rbac_utils_switch_roles_with_true_value_twice(self, _):
         self._mock_list_user_roles_on_project('admin_id')
@@ -194,7 +192,7 @@
             'twice. Make sure that you included a rbac_utils.switch_role '
             'method call inside the test.', str(e))
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     @mock.patch.object(rbac_utils, 'LOG', autospec=True)
     @mock.patch.object(rbac_utils, 'sys', autospec=True)
@@ -231,7 +229,7 @@
             self.rbac_utils.switch_role(self.mock_test_obj, True)
             mock_log.error.assert_not_called()
 
-    @mock.patch.object(rbac_utils.rbac_utils, '_clear_user_roles',
+    @mock.patch.object(rbac_utils.RbacUtils, '_clear_user_roles',
                        autospec=True, return_value=False)
     def test_rbac_utils_switch_role_except_exception(self,
                                                      mock_clear_user_roles):
diff --git a/releasenotes/notes/add-extra-hypervisor-tests-9374e5fcdb0266e2.yaml b/releasenotes/notes/add-extra-hypervisor-tests-9374e5fcdb0266e2.yaml
new file mode 100644
index 0000000..0c46435
--- /dev/null
+++ b/releasenotes/notes/add-extra-hypervisor-tests-9374e5fcdb0266e2.yaml
@@ -0,0 +1,11 @@
+---
+features:
+  - |
+    Add additional compute hypervisor RBAC tests, so that the previously
+    missing hypervisor endpoints are covered. Tests for the following
+    endpoints were written:
+    * show_hypervisor
+    * list_servers_on_hypervisor
+    * show_hypervisor_statistics
+    * show_hypervisor_uptime
+    * search_hypervisor
diff --git a/releasenotes/notes/domain-config-rbac-tests-8806ca7c159ddf94.yaml b/releasenotes/notes/domain-config-rbac-tests-8806ca7c159ddf94.yaml
new file mode 100644
index 0000000..8108cf4
--- /dev/null
+++ b/releasenotes/notes/domain-config-rbac-tests-8806ca7c159ddf94.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adds RBAC tests for the domain configuration Keystone v3 extension
+    API.
diff --git a/releasenotes/notes/hypervisor-list-with-details-test-655e873cd881c2bb.yaml b/releasenotes/notes/hypervisor-list-with-details-test-655e873cd881c2bb.yaml
new file mode 100644
index 0000000..30ccb45
--- /dev/null
+++ b/releasenotes/notes/hypervisor-list-with-details-test-655e873cd881c2bb.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Add RBAC test for listing hypervisors with details.
diff --git a/releasenotes/notes/nova_volume_client-75e153a1c84e4ff8.yaml b/releasenotes/notes/nova_volume_client-75e153a1c84e4ff8.yaml
new file mode 100644
index 0000000..0562137
--- /dev/null
+++ b/releasenotes/notes/nova_volume_client-75e153a1c84e4ff8.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adds RBAC tests for the Nova os-volumes API which is deprecated
+    from microversion 2.36 onward.
diff --git a/releasenotes/notes/volume-summary-a3c3b010c1880bcb.yaml b/releasenotes/notes/volume-summary-a3c3b010c1880bcb.yaml
new file mode 100644
index 0000000..5074840
--- /dev/null
+++ b/releasenotes/notes/volume-summary-a3c3b010c1880bcb.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Added test for volume summary API.
diff --git a/requirements.txt b/requirements.txt
index 6d2c7f1..6871057 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,5 +6,6 @@
 urllib3>=1.15.1 # MIT
 oslo.log>=3.11.0 # Apache-2.0
 oslo.config>=3.22.0  # Apache-2.0
+oslo.policy>=1.17.0  # Apache-2.0
 tempest>=14.0.0  # Apache-2.0
 stevedore>=1.20.0  # Apache-2.0
diff --git a/setup.cfg b/setup.cfg
index 09b71eb..d8c9505 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -22,7 +22,7 @@
 
 [files]
 packages =
-    patrole
+    patrole_tempest_plugin
 
 [build_sphinx]
 source-dir = doc/source
@@ -53,4 +53,4 @@
 
 [entry_points]
 tempest.test_plugins =
-    patrole-tempest-plugin = patrole_tempest_plugin.plugin:PatroleTempestPlugin
+    patrole_tempest_plugin = patrole_tempest_plugin.plugin:PatroleTempestPlugin
diff --git a/tox.ini b/tox.ini
index be35509..d2e83e9 100644
--- a/tox.ini
+++ b/tox.ini
@@ -53,9 +53,9 @@
 commands = oslo_debug_helper -t patrole_tempest_plugin/tests {posargs}
 
 [flake8]
-# E123, E125 skipped as they are invalid PEP-8.
-
+enable-extensions = H106,H203,H904
 show-source = True
+# E123, E125 skipped as they are invalid PEP-8.
 ignore = E123,E125
 builtins = _
 exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
