diff --git a/tempest/api/compute/admin/test_quotas.py b/tempest/api/compute/admin/test_quotas.py index 5894e802b6..c2bdf7eb09 100644 --- a/tempest/api/compute/admin/test_quotas.py +++ b/tempest/api/compute/admin/test_quotas.py @@ -17,6 +17,7 @@ from oslo_log import log as logging from testtools import matchers from tempest.api.compute import base +from tempest.common import identity from tempest.common import tempest_fixtures as fixtures from tempest.lib.common.utils import data_utils from tempest.lib import decorators @@ -93,10 +94,11 @@ class QuotasAdminTestJSON(base.BaseV2ComputeAdminTest): # Verify that GET shows the updated quota set of project project_name = data_utils.rand_name('cpu_quota_project') project_desc = project_name + '-desc' - project = self.identity_utils.create_project(name=project_name, - description=project_desc) + project = identity.identity_utils(self.os_admin).create_project( + name=project_name, description=project_desc) project_id = project['id'] - self.addCleanup(self.identity_utils.delete_project, project_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_project, + project_id) self.adm_client.update_quota_set(project_id, ram='5120') quota_set = self.adm_client.show_quota_set(project_id)['quota_set'] @@ -106,12 +108,12 @@ class QuotasAdminTestJSON(base.BaseV2ComputeAdminTest): user_name = data_utils.rand_name('cpu_quota_user') password = data_utils.rand_password() email = user_name + '@testmail.tm' - user = self.identity_utils.create_user(username=user_name, - password=password, - project=project, - email=email) + user = identity.identity_utils(self.os_admin).create_user( + username=user_name, password=password, project=project, + email=email) user_id = user['id'] - self.addCleanup(self.identity_utils.delete_user, user_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_user, + user_id) self.adm_client.update_quota_set(project_id, user_id=user_id, @@ -125,10 +127,11 @@ class QuotasAdminTestJSON(base.BaseV2ComputeAdminTest): # Admin can delete the resource quota set for a project project_name = data_utils.rand_name('ram_quota_project') project_desc = project_name + '-desc' - project = self.identity_utils.create_project(name=project_name, - description=project_desc) + project = identity.identity_utils(self.os_admin).create_project( + name=project_name, description=project_desc) project_id = project['id'] - self.addCleanup(self.identity_utils.delete_project, project_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_project, + project_id) quota_set_default = (self.adm_client.show_quota_set(project_id) ['quota_set']) ram_default = quota_set_default['ram'] diff --git a/tempest/api/network/admin/test_quotas.py b/tempest/api/network/admin/test_quotas.py index f69d7c5ad1..cf4236d1b1 100644 --- a/tempest/api/network/admin/test_quotas.py +++ b/tempest/api/network/admin/test_quotas.py @@ -14,6 +14,7 @@ # under the License. from tempest.api.network import base +from tempest.common import identity from tempest.common import utils from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import test_utils @@ -46,10 +47,11 @@ class QuotasTest(base.BaseAdminNetworkTest): # Add a project to conduct the test project = data_utils.rand_name('test_project_') description = data_utils.rand_name('desc_') - project = self.identity_utils.create_project(name=project, - description=description) + project = identity.identity_utils(self.os_admin).create_project( + name=project, description=description) project_id = project['id'] - self.addCleanup(self.identity_utils.delete_project, project_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_project, + project_id) # Change quotas for project quota_set = self.admin_quotas_client.update_quotas( diff --git a/tempest/api/network/admin/test_routers.py b/tempest/api/network/admin/test_routers.py index f745f9c694..8cdb41e06d 100644 --- a/tempest/api/network/admin/test_routers.py +++ b/tempest/api/network/admin/test_routers.py @@ -16,6 +16,7 @@ import testtools from tempest.api.network import base +from tempest.common import identity from tempest.common import utils from tempest import config from tempest.lib.common.utils import data_utils @@ -53,10 +54,11 @@ class RoutersAdminTest(base.BaseAdminNetworkTest): # Test creating router from admin user setting project_id. project = data_utils.rand_name('test_tenant_') description = data_utils.rand_name('desc_') - project = self.identity_utils.create_project(name=project, - description=description) + project = identity.identity_utils(self.os_admin).create_project( + name=project, description=description) project_id = project['id'] - self.addCleanup(self.identity_utils.delete_project, project_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_project, + project_id) name = data_utils.rand_name('router-') create_body = self.admin_routers_client.create_router( diff --git a/tempest/api/volume/admin/test_volume_quota_classes.py b/tempest/api/volume/admin/test_volume_quota_classes.py index f551575c0f..75dca41e8a 100644 --- a/tempest/api/volume/admin/test_volume_quota_classes.py +++ b/tempest/api/volume/admin/test_volume_quota_classes.py @@ -19,6 +19,7 @@ from oslo_log import log as logging from testtools import matchers from tempest.api.volume import base +from tempest.common import identity from tempest.common import tempest_fixtures as fixtures from tempest.lib.common.utils import data_utils from tempest.lib import decorators @@ -92,9 +93,10 @@ class VolumeQuotaClassesTest(base.BaseVolumeAdminTest): # Verify a new project's default quotas. project_name = data_utils.rand_name('quota_class_tenant') description = data_utils.rand_name('desc_') - project_id = self.identity_utils.create_project( + project_id = identity.identity_utils(self.os_admin).create_project( name=project_name, description=description)['id'] - self.addCleanup(self.identity_utils.delete_project, project_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_project, + project_id) default_quotas = self.admin_quotas_client.show_default_quota_set( project_id)['quota_set'] self.assertThat(default_quotas.items(), diff --git a/tempest/api/volume/admin/test_volume_quotas.py b/tempest/api/volume/admin/test_volume_quotas.py index 754104e04d..c4d3a408a3 100644 --- a/tempest/api/volume/admin/test_volume_quotas.py +++ b/tempest/api/volume/admin/test_volume_quotas.py @@ -13,6 +13,7 @@ # under the License. from tempest.api.volume import base +from tempest.common import identity from tempest.common import tempest_fixtures as fixtures from tempest.common import waiters from tempest.lib.common.utils import data_utils @@ -117,10 +118,11 @@ class BaseVolumeQuotasAdminTestJSON(base.BaseVolumeAdminTest): # Admin can delete the resource quota set for a project project_name = data_utils.rand_name('quota_tenant') description = data_utils.rand_name('desc_') - project = self.identity_utils.create_project(project_name, - description=description) + project = identity.identity_utils(self.os_admin).create_project( + project_name, description=description) project_id = project['id'] - self.addCleanup(self.identity_utils.delete_project, project_id) + self.addCleanup(identity.identity_utils(self.os_admin).delete_project, + project_id) quota_set_default = self.admin_quotas_client.show_default_quota_set( project_id)['quota_set'] volume_default = quota_set_default['volumes'] diff --git a/tempest/common/identity.py b/tempest/common/identity.py index 469defed35..6e496d3973 100644 --- a/tempest/common/identity.py +++ b/tempest/common/identity.py @@ -13,8 +13,12 @@ # License for the specific language governing permissions and limitations # under the License. +from tempest import config +from tempest.lib.common import cred_client from tempest.lib import exceptions as lib_exc +CONF = config.CONF + def get_tenant_by_name(client, tenant_name): tenants = client.list_tenants()['tenants'] @@ -30,3 +34,37 @@ def get_user_by_username(client, tenant_id, username): if user['name'] == username: return user raise lib_exc.NotFound('No such user(%s) in %s' % (username, users)) + + +def identity_utils(clients): + """A client that abstracts v2 and v3 identity operations. + + This can be used for creating and tearing down projects in tests. It + should not be used for testing identity features. + + :param clients: a client manager. + :return + """ + if CONF.identity.auth_version == 'v2': + client = clients.identity_client + users_client = clients.users_client + project_client = clients.tenants_client + roles_client = clients.roles_client + domains_client = None + else: + client = clients.identity_v3_client + users_client = clients.users_v3_client + project_client = clients.projects_client + roles_client = clients.roles_v3_client + domains_client = clients.domains_client + + try: + domain = client.auth_provider.credentials.project_domain_name + except AttributeError: + domain = CONF.auth.default_credentials_domain_name + + return cred_client.get_creds_client(client, project_client, + users_client, + roles_client, + domains_client, + project_domain_name=domain) diff --git a/tempest/test.py b/tempest/test.py index 25366bc143..9da85d5fc4 100644 --- a/tempest/test.py +++ b/tempest/test.py @@ -27,7 +27,6 @@ from tempest import clients from tempest.common import credentials_factory as credentials from tempest.common import utils from tempest import config -from tempest.lib.common import cred_client from tempest.lib.common import fixed_network from tempest.lib.common import validation_resources as vr from tempest.lib import decorators @@ -612,37 +611,6 @@ class BaseTestCase(testtools.testcase.WithAttributes, def credentials_provider(self): return self._get_credentials_provider() - @property - def identity_utils(self): - """A client that abstracts v2 and v3 identity operations. - - This can be used for creating and tearing down projects in tests. It - should not be used for testing identity features. - """ - if CONF.identity.auth_version == 'v2': - client = self.os_admin.identity_client - users_client = self.os_admin.users_client - project_client = self.os_admin.tenants_client - roles_client = self.os_admin.roles_client - domains_client = None - else: - client = self.os_admin.identity_v3_client - users_client = self.os_admin.users_v3_client - project_client = self.os_admin.projects_client - roles_client = self.os_admin.roles_v3_client - domains_client = self.os_admin.domains_client - - try: - domain = client.auth_provider.credentials.project_domain_name - except AttributeError: - domain = 'Default' - - return cred_client.get_creds_client(client, project_client, - users_client, - roles_client, - domains_client, - project_domain_name=domain) - @classmethod def get_identity_version(cls): """Returns the identity version used by the test class"""