Initial class creds creation in test base class

Each test class may now define at class level which credentials
are needed, and they will be allocated automatically by the base
class. To start using this a test class that requires network
resources must implement the setup_credentials method and
define the required resources before super is invoked.

In this patch this only affects the creation of credentials
as defined in the various base classes. Other tests will be
migrated as part of the resource-cleanup bp. Note that this
changes baremetal, identity and orchestration tests to
honour the tenant isolation settings.

Partially-implements: bp resource-cleanup

Change-Id: Id36a6ebddb618a78cee7025c9537cd1e2746190e
diff --git a/tempest/api/baremetal/admin/base.py b/tempest/api/baremetal/admin/base.py
index 9aeea0a..0b5d7d9 100644
--- a/tempest/api/baremetal/admin/base.py
+++ b/tempest/api/baremetal/admin/base.py
@@ -15,8 +15,6 @@
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest import clients
-from tempest.common import credentials
 from tempest import config
 from tempest import test
 
@@ -54,6 +52,8 @@
 class BaseBaremetalTest(test.BaseTestCase):
     """Base class for Baremetal API tests."""
 
+    credentials = ['admin']
+
     @classmethod
     def skip_checks(cls):
         super(BaseBaremetalTest, cls).skip_checks()
@@ -68,18 +68,9 @@
             raise cls.skipException(skip_msg)
 
     @classmethod
-    def setup_credentials(cls):
-        super(BaseBaremetalTest, cls).setup_credentials()
-        if (not hasattr(cls, 'isolated_creds') or
-            not cls.isolated_creds.name == cls.__name__):
-            cls.isolated_creds = credentials.get_isolated_credentials(
-                name=cls.__name__, network_resources=cls.network_resources)
-        cls.mgr = clients.Manager(cls.isolated_creds.get_admin_creds())
-
-    @classmethod
     def setup_clients(cls):
         super(BaseBaremetalTest, cls).setup_clients()
-        cls.client = cls.mgr.baremetal_client
+        cls.client = cls.os_admin.baremetal_client
 
     @classmethod
     def resource_setup(cls):
diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py
index 9f1a548..eca634d 100644
--- a/tempest/api/compute/base.py
+++ b/tempest/api/compute/base.py
@@ -20,8 +20,6 @@
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest import clients
-from tempest.common import credentials
 from tempest.common import fixed_network
 from tempest import config
 from tempest import exceptions
@@ -38,6 +36,10 @@
     _api_version = 2
     force_tenant_isolation = False
 
+    # TODO(andreaf) We should care also for the alt_manager here
+    # but only once client lazy load in the manager is done
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseComputeTest, cls).skip_checks()
@@ -50,12 +52,6 @@
     def setup_credentials(cls):
         cls.set_network_resources()
         super(BaseComputeTest, cls).setup_credentials()
-        # TODO(andreaf) WE should care also for the alt_manager here
-        # but only once client lazy load in the manager is done
-        cls.os = cls.get_client_manager()
-        # Note that we put this here and not in skip_checks because in
-        # the case of preprovisioned users we won't know if we can get
-        # two distinct users until we go and lock them
         cls.multi_user = cls.check_multi_user()
 
     @classmethod
@@ -350,18 +346,7 @@
 class BaseComputeAdminTest(BaseComputeTest):
     """Base test case class for Compute Admin API tests."""
 
-    @classmethod
-    def skip_checks(cls):
-        super(BaseComputeAdminTest, cls).skip_checks()
-        if not credentials.is_admin_available():
-            msg = ("Missing Identity Admin API credentials in configuration.")
-            raise cls.skipException(msg)
-
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseComputeAdminTest, cls).setup_credentials()
-        creds = cls.isolated_creds.get_admin_creds()
-        cls.os_adm = clients.Manager(credentials=creds)
+    credentials = ['primary', 'admin']
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/compute/servers/test_servers_negative.py b/tempest/api/compute/servers/test_servers_negative.py
index 853e262..46b1886 100644
--- a/tempest/api/compute/servers/test_servers_negative.py
+++ b/tempest/api/compute/servers/test_servers_negative.py
@@ -20,7 +20,6 @@
 import testtools
 
 from tempest.api.compute import base
-from tempest import clients
 from tempest import config
 from tempest import test
 
@@ -29,6 +28,8 @@
 
 class ServersNegativeTestJSON(base.BaseV2ComputeTest):
 
+    credentials = ['primary', 'alt']
+
     def setUp(self):
         super(ServersNegativeTestJSON, self).setUp()
         try:
@@ -41,15 +42,10 @@
         super(ServersNegativeTestJSON, self).tearDown()
 
     @classmethod
-    def setup_credentials(cls):
-        super(ServersNegativeTestJSON, cls).setup_credentials()
-        cls.alt_os = clients.Manager(cls.isolated_creds.get_alt_creds())
-
-    @classmethod
     def setup_clients(cls):
         super(ServersNegativeTestJSON, cls).setup_clients()
         cls.client = cls.servers_client
-        cls.alt_client = cls.alt_os.servers_client
+        cls.alt_client = cls.os_alt.servers_client
 
     @classmethod
     def resource_setup(cls):
diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py
index 2baf608..435c113 100644
--- a/tempest/api/compute/test_authorization.py
+++ b/tempest/api/compute/test_authorization.py
@@ -20,7 +20,6 @@
 from tempest_lib import exceptions as lib_exc
 
 from tempest.api.compute import base
-from tempest import clients
 from tempest import config
 from tempest import test
 
@@ -31,6 +30,8 @@
 
 class AuthorizationTestJSON(base.BaseV2ComputeTest):
 
+    credentials = ['primary', 'alt']
+
     @classmethod
     def skip_checks(cls):
         super(AuthorizationTestJSON, cls).skip_checks()
@@ -42,12 +43,6 @@
         # No network resources required for this test
         cls.set_network_resources()
         super(AuthorizationTestJSON, cls).setup_credentials()
-        if not cls.multi_user:
-            msg = "Need >1 user"
-            raise cls.skipException(msg)
-
-        creds = cls.isolated_creds.get_alt_creds()
-        cls.alt_manager = clients.Manager(credentials=creds)
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/data_processing/base.py b/tempest/api/data_processing/base.py
index 5a903b7..904cbb6 100644
--- a/tempest/api/data_processing/base.py
+++ b/tempest/api/data_processing/base.py
@@ -225,6 +225,8 @@
 
 class BaseDataProcessingTest(tempest.test.BaseTestCase):
 
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseDataProcessingTest, cls).skip_checks()
@@ -233,11 +235,6 @@
         cls.default_plugin = cls._get_default_plugin()
 
     @classmethod
-    def setup_credentials(cls):
-        super(BaseDataProcessingTest, cls).setup_credentials()
-        cls.os = cls.get_client_manager()
-
-    @classmethod
     def setup_clients(cls):
         super(BaseDataProcessingTest, cls).setup_clients()
         cls.client = cls.os.data_processing_client
diff --git a/tempest/api/database/base.py b/tempest/api/database/base.py
index 1868f23..f4c1881 100644
--- a/tempest/api/database/base.py
+++ b/tempest/api/database/base.py
@@ -25,6 +25,8 @@
 class BaseDatabaseTest(tempest.test.BaseTestCase):
     """Base test case class for all Database API tests."""
 
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseDatabaseTest, cls).skip_checks()
@@ -33,11 +35,6 @@
             raise cls.skipException(skip_msg)
 
     @classmethod
-    def setup_credentials(cls):
-        super(BaseDatabaseTest, cls).setup_credentials()
-        cls.os = cls.get_client_manager()
-
-    @classmethod
     def setup_clients(cls):
         super(BaseDatabaseTest, cls).setup_clients()
         cls.database_flavors_client = cls.os.database_flavors_client
diff --git a/tempest/api/identity/base.py b/tempest/api/identity/base.py
index b83da3e..5d66b9c 100644
--- a/tempest/api/identity/base.py
+++ b/tempest/api/identity/base.py
@@ -17,9 +17,7 @@
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest import clients
 from tempest.common import cred_provider
-from tempest.common import credentials
 from tempest import config
 import tempest.test
 
@@ -66,6 +64,8 @@
 
 class BaseIdentityV2Test(BaseIdentityTest):
 
+    credentials = ['primary']
+
     @classmethod
     def setup_credentials(cls):
         super(BaseIdentityV2Test, cls).setup_credentials()
@@ -94,24 +94,13 @@
 
 class BaseIdentityV2AdminTest(BaseIdentityV2Test):
 
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseIdentityV2AdminTest, cls).setup_credentials()
-        cls.os_adm = clients.Manager(cls.isolated_creds.get_admin_creds())
-
-    @classmethod
-    def skip_checks(cls):
-        if not credentials.is_admin_available():
-            raise cls.skipException('v2 Admin auth disabled')
-        super(BaseIdentityV2AdminTest, cls).skip_checks()
+    credentials = ['admin']
 
     @classmethod
     def setup_clients(cls):
         super(BaseIdentityV2AdminTest, cls).setup_clients()
         cls.client = cls.os_adm.identity_client
         cls.token_client = cls.os_adm.token_client
-        if not cls.client.has_admin_extensions():
-            raise cls.skipException("Admin extensions disabled")
 
     @classmethod
     def resource_setup(cls):
@@ -126,6 +115,8 @@
 
 class BaseIdentityV3Test(BaseIdentityTest):
 
+    credentials = ['primary']
+
     @classmethod
     def setup_credentials(cls):
         super(BaseIdentityV3Test, cls).setup_credentials()
@@ -155,16 +146,7 @@
 
 class BaseIdentityV3AdminTest(BaseIdentityV3Test):
 
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseIdentityV3AdminTest, cls).setup_credentials()
-        cls.os_adm = clients.Manager(cls.isolated_creds.get_admin_creds())
-
-    @classmethod
-    def skip_checks(cls):
-        if not credentials.is_admin_available():
-            raise cls.skipException('v3 Admin auth disabled')
-        super(BaseIdentityV3AdminTest, cls).skip_checks()
+    credentials = ['admin']
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py
index 74044dc..acf8272 100644
--- a/tempest/api/image/base.py
+++ b/tempest/api/image/base.py
@@ -17,8 +17,6 @@
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest import clients
-from tempest.common import credentials
 from tempest import config
 import tempest.test
 
@@ -30,6 +28,8 @@
 class BaseImageTest(tempest.test.BaseTestCase):
     """Base test class for Image API tests."""
 
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseImageTest, cls).skip_checks()
@@ -39,14 +39,11 @@
 
     @classmethod
     def setup_credentials(cls):
+        cls.set_network_resources()
         super(BaseImageTest, cls).setup_credentials()
-        cls.isolated_creds = credentials.get_isolated_credentials(
-            cls.__name__, network_resources=cls.network_resources)
-        cls.os = clients.Manager(cls.isolated_creds.get_primary_creds())
 
     @classmethod
     def resource_setup(cls):
-        cls.set_network_resources()
         super(BaseImageTest, cls).resource_setup()
         cls.created_images = []
 
@@ -96,10 +93,7 @@
 
 class BaseV1ImageMembersTest(BaseV1ImageTest):
 
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseV1ImageMembersTest, cls).setup_credentials()
-        cls.os_alt = clients.Manager(cls.isolated_creds.get_alt_creds())
+    credentials = ['primary', 'alt']
 
     @classmethod
     def setup_clients(cls):
@@ -138,11 +132,7 @@
 
 class BaseV2MemberImageTest(BaseV2ImageTest):
 
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseV2MemberImageTest, cls).setup_credentials()
-        creds = cls.isolated_creds.get_alt_creds()
-        cls.os_alt = clients.Manager(creds)
+    credentials = ['primary', 'alt']
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/messaging/base.py b/tempest/api/messaging/base.py
index c4214f2..2ddc3fc 100644
--- a/tempest/api/messaging/base.py
+++ b/tempest/api/messaging/base.py
@@ -35,6 +35,8 @@
         messaging as True
     """
 
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseMessagingTest, cls).skip_checks()
@@ -42,11 +44,6 @@
             raise cls.skipException("Zaqar support is required")
 
     @classmethod
-    def setup_credentials(cls):
-        super(BaseMessagingTest, cls).setup_credentials()
-        cls.os = cls.get_client_manager()
-
-    @classmethod
     def setup_clients(cls):
         super(BaseMessagingTest, cls).setup_clients()
         cls.client = cls.os.messaging_client
diff --git a/tempest/api/network/admin/test_floating_ips_admin_actions.py b/tempest/api/network/admin/test_floating_ips_admin_actions.py
index ce3e319..afc32da 100644
--- a/tempest/api/network/admin/test_floating_ips_admin_actions.py
+++ b/tempest/api/network/admin/test_floating_ips_admin_actions.py
@@ -16,7 +16,6 @@
 from tempest_lib.common.utils import data_utils
 
 from tempest.api.network import base
-from tempest import clients
 from tempest import config
 from tempest import test
 
@@ -25,11 +24,7 @@
 
 class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
     force_tenant_isolation = True
-
-    @classmethod
-    def setup_credentials(cls):
-        super(FloatingIPAdminTestJSON, cls).setup_credentials()
-        cls.alt_manager = clients.Manager(cls.isolated_creds.get_alt_creds())
+    credentials = ['primary', 'alt', 'admin']
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/network/admin/test_load_balancer_admin_actions.py b/tempest/api/network/admin/test_load_balancer_admin_actions.py
index 5a32119..41f5caa 100644
--- a/tempest/api/network/admin/test_load_balancer_admin_actions.py
+++ b/tempest/api/network/admin/test_load_balancer_admin_actions.py
@@ -27,6 +27,8 @@
     Create health monitor for another tenant
     """
 
+    force_tenant_isolation = True
+
     @classmethod
     def skip_checks(cls):
         super(LoadBalancerAdminTestJSON, cls).skip_checks()
@@ -35,12 +37,6 @@
             raise cls.skipException(msg)
 
     @classmethod
-    def setup_credentials(cls):
-        super(LoadBalancerAdminTestJSON, cls).setup_credentials()
-        cls.manager = cls.get_client_manager()
-        cls.primary_creds = cls.isolated_creds.get_primary_creds()
-
-    @classmethod
     def setup_clients(cls):
         super(LoadBalancerAdminTestJSON, cls).setup_clients()
         cls.client = cls.manager.network_client
@@ -48,8 +44,7 @@
     @classmethod
     def resource_setup(cls):
         super(LoadBalancerAdminTestJSON, cls).resource_setup()
-        cls.force_tenant_isolation = True
-        cls.tenant_id = cls.primary_creds.tenant_id
+        cls.tenant_id = cls.os.credentials.tenant_id
         cls.network = cls.create_network()
         cls.subnet = cls.create_subnet(cls.network)
         cls.pool = cls.create_pool(data_utils.rand_name('pool-'),
diff --git a/tempest/api/network/base.py b/tempest/api/network/base.py
index 26a31cb..1cd1386 100644
--- a/tempest/api/network/base.py
+++ b/tempest/api/network/base.py
@@ -18,8 +18,6 @@
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest import clients
-from tempest.common import credentials
 from tempest import config
 from tempest import exceptions
 import tempest.test
@@ -52,6 +50,7 @@
     """
 
     force_tenant_isolation = False
+    credentials = ['primary']
 
     # Default to ipv4.
     _ip_version = 4
@@ -69,7 +68,6 @@
         # Create no network resources for these test.
         cls.set_network_resources()
         super(BaseNetworkTest, cls).setup_credentials()
-        cls.os = cls.get_client_manager()
 
     @classmethod
     def setup_clients(cls):
@@ -79,7 +77,6 @@
     @classmethod
     def resource_setup(cls):
         super(BaseNetworkTest, cls).resource_setup()
-
         cls.network_cfg = CONF.network
         cls.networks = []
         cls.subnets = []
@@ -426,19 +423,7 @@
 
 class BaseAdminNetworkTest(BaseNetworkTest):
 
-    @classmethod
-    def skip_checks(cls):
-        super(BaseAdminNetworkTest, cls).skip_checks()
-        if not credentials.is_admin_available():
-            msg = ("Missing Administrative Network API credentials "
-                   "in configuration.")
-            raise cls.skipException(msg)
-
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseAdminNetworkTest, cls).setup_credentials()
-        creds = cls.isolated_creds.get_admin_creds()
-        cls.os_adm = clients.Manager(credentials=creds)
+    credentials = ['primary', 'admin']
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/object_storage/base.py b/tempest/api/object_storage/base.py
index c8697e1..8bc9b12 100644
--- a/tempest/api/object_storage/base.py
+++ b/tempest/api/object_storage/base.py
@@ -37,9 +37,11 @@
     def setup_credentials(cls):
         cls.set_network_resources()
         super(BaseObjectTest, cls).setup_credentials()
+        operator_role = CONF.object_storage.operator_role
+        # There are no credentials by type used by object storage tests so
+        # isolated_creds must still be initialized
         cls.isolated_creds = credentials.get_isolated_credentials(
             cls.__name__, network_resources=cls.network_resources)
-        operator_role = CONF.object_storage.operator_role
         if not cls.isolated_creds.is_role_available(operator_role):
             skip_msg = ("%s skipped because the configured credential provider"
                         " is not able to provide credentials with the %s role "
diff --git a/tempest/api/orchestration/base.py b/tempest/api/orchestration/base.py
index d4b107e..beb4ac8 100644
--- a/tempest/api/orchestration/base.py
+++ b/tempest/api/orchestration/base.py
@@ -18,7 +18,6 @@
 import yaml
 
 from tempest import clients
-from tempest.common import credentials
 from tempest import config
 import tempest.test
 
@@ -30,6 +29,8 @@
 class BaseOrchestrationTest(tempest.test.BaseTestCase):
     """Base test case class for all Orchestration API tests."""
 
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseOrchestrationTest, cls).skip_checks()
@@ -39,10 +40,6 @@
     @classmethod
     def setup_credentials(cls):
         super(BaseOrchestrationTest, cls).setup_credentials()
-        if (not hasattr(cls, 'isolated_creds') or
-            not cls.isolated_creds.name == cls.__name__):
-            cls.isolated_creds = credentials.get_isolated_credentials(
-                name=cls.__name__, network_resources=cls.network_resources)
         stack_owner_role = CONF.orchestration.stack_owner_role
         if not cls.isolated_creds.is_role_available(stack_owner_role):
             skip_msg = ("%s skipped because the configured credential provider"
diff --git a/tempest/api/orchestration/stacks/test_swift_resources.py b/tempest/api/orchestration/stacks/test_swift_resources.py
index 6884c6b..d4fd3f9 100644
--- a/tempest/api/orchestration/stacks/test_swift_resources.py
+++ b/tempest/api/orchestration/stacks/test_swift_resources.py
@@ -16,7 +16,6 @@
 from tempest_lib.common.utils import data_utils
 
 from tempest.api.orchestration import base
-from tempest import clients
 from tempest import config
 from tempest import test
 
@@ -32,11 +31,6 @@
             raise cls.skipException("Swift support is required")
 
     @classmethod
-    def setup_credentials(cls):
-        super(SwiftResourcesTestJSON, cls).setup_credentials()
-        cls.os = clients.Manager()
-
-    @classmethod
     def setup_clients(cls):
         super(SwiftResourcesTestJSON, cls).setup_clients()
         cls.account_client = cls.os.account_client
diff --git a/tempest/api/telemetry/base.py b/tempest/api/telemetry/base.py
index ed719c2..43180e5 100644
--- a/tempest/api/telemetry/base.py
+++ b/tempest/api/telemetry/base.py
@@ -27,6 +27,8 @@
 
     """Base test case class for all Telemetry API tests."""
 
+    credentials = ['primary']
+
     @classmethod
     def skip_checks(cls):
         super(BaseTelemetryTest, cls).skip_checks()
@@ -37,7 +39,6 @@
     def setup_credentials(cls):
         cls.set_network_resources()
         super(BaseTelemetryTest, cls).setup_credentials()
-        cls.os = cls.get_client_manager()
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/volume/admin/test_volume_quotas.py b/tempest/api/volume/admin/test_volume_quotas.py
index 3ec3219..f69f0e3 100644
--- a/tempest/api/volume/admin/test_volume_quotas.py
+++ b/tempest/api/volume/admin/test_volume_quotas.py
@@ -27,7 +27,7 @@
     @classmethod
     def setup_credentials(cls):
         super(BaseVolumeQuotasAdminV2TestJSON, cls).setup_credentials()
-        cls.demo_tenant_id = cls.isolated_creds.get_primary_creds().tenant_id
+        cls.demo_tenant_id = cls.os.credentials.tenant_id
 
     @test.attr(type='gate')
     @test.idempotent_id('59eada70-403c-4cef-a2a3-a8ce2f1b07a0')
diff --git a/tempest/api/volume/admin/test_volume_quotas_negative.py b/tempest/api/volume/admin/test_volume_quotas_negative.py
index d7287f0..d1a6db0 100644
--- a/tempest/api/volume/admin/test_volume_quotas_negative.py
+++ b/tempest/api/volume/admin/test_volume_quotas_negative.py
@@ -25,8 +25,7 @@
     @classmethod
     def setup_credentials(cls):
         super(BaseVolumeQuotasNegativeV2TestJSON, cls).setup_credentials()
-        cls.demo_user = cls.isolated_creds.get_primary_creds()
-        cls.demo_tenant_id = cls.demo_user.tenant_id
+        cls.demo_tenant_id = cls.os.credentials.tenant_id
 
     @classmethod
     def resource_setup(cls):
diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py
index 28676b0..7f56b18 100644
--- a/tempest/api/volume/base.py
+++ b/tempest/api/volume/base.py
@@ -17,8 +17,6 @@
 from tempest_lib.common.utils import data_utils
 from tempest_lib import exceptions as lib_exc
 
-from tempest import clients
-from tempest.common import credentials
 from tempest.common import fixed_network
 from tempest import config
 from tempest import exceptions
@@ -33,6 +31,7 @@
     """Base test case class for all Cinder API tests."""
 
     _api_version = 2
+    credentials = ['primary']
 
     @classmethod
     def skip_checks(cls):
@@ -57,12 +56,10 @@
     def setup_credentials(cls):
         cls.set_network_resources()
         super(BaseVolumeTest, cls).setup_credentials()
-        cls.os = cls.get_client_manager()
 
     @classmethod
     def setup_clients(cls):
         super(BaseVolumeTest, cls).setup_clients()
-
         cls.servers_client = cls.os.servers_client
         cls.networks_client = cls.os.networks_client
 
@@ -175,18 +172,7 @@
 class BaseVolumeAdminTest(BaseVolumeTest):
     """Base test case class for all Volume Admin API tests."""
 
-    @classmethod
-    def skip_checks(cls):
-        super(BaseVolumeAdminTest, cls).skip_checks()
-        if not credentials.is_admin_available():
-            msg = ("Missing Identity Admin API credentials in configuration.")
-            raise cls.skipException(msg)
-
-    @classmethod
-    def setup_credentials(cls):
-        super(BaseVolumeAdminTest, cls).setup_credentials()
-        cls.adm_creds = cls.isolated_creds.get_admin_creds()
-        cls.os_adm = clients.Manager(credentials=cls.adm_creds)
+    credentials = ['primary', 'admin']
 
     @classmethod
     def setup_clients(cls):
diff --git a/tempest/api/volume/test_volume_transfers.py b/tempest/api/volume/test_volume_transfers.py
index 4acab39..bcd3fa9 100644
--- a/tempest/api/volume/test_volume_transfers.py
+++ b/tempest/api/volume/test_volume_transfers.py
@@ -16,8 +16,6 @@
 from testtools import matchers
 
 from tempest.api.volume import base
-from tempest import clients
-from tempest.common import credentials
 from tempest import config
 from tempest import test
 
@@ -26,21 +24,7 @@
 
 class VolumesV2TransfersTest(base.BaseVolumeTest):
 
-    @classmethod
-    def skip_checks(cls):
-        super(VolumesV2TransfersTest, cls).skip_checks()
-        if not credentials.is_admin_available():
-            msg = "Missing Volume Admin API credentials in configuration."
-            raise cls.skipException(msg)
-
-    @classmethod
-    def setup_credentials(cls):
-        super(VolumesV2TransfersTest, cls).setup_credentials()
-        # Add another tenant to test volume-transfer
-        cls.os_alt = clients.Manager(cls.isolated_creds.get_alt_creds())
-        # Add admin tenant to cleanup resources
-        creds = cls.isolated_creds.get_admin_creds()
-        cls.os_adm = clients.Manager(credentials=creds)
+    credentials = ['primary', 'alt', 'admin']
 
     @classmethod
     def setup_clients(cls):