From 422fbdf0a0a0eb567349fc9429ea303bde47b4e2 Mon Sep 17 00:00:00 2001 From: Andrea Frittoli Date: Thu, 20 Mar 2014 10:05:18 +0000 Subject: [PATCH] Enforces the use of Credentials (part2) Multiversion auth part5 Refactor mangers, utils and test base classes to use Credentials instead of username, password and tenant_name. Makes changes to tests where needed - some of the tests create their own managers. Partially implements: bp multi-keystone-api-version-tests Change-Id: If05f5704d90390362cebf45e2664f2bfbc72268d --- tempest/api/compute/base.py | 42 ++-- tempest/api/compute/test_authorization.py | 5 +- tempest/api/identity/admin/v3/test_trusts.py | 12 +- tempest/api/identity/base.py | 9 + tempest/api/image/base.py | 20 +- .../admin/test_load_balancer_admin_actions.py | 4 +- tempest/api/network/base.py | 6 +- tempest/api/object_storage/base.py | 29 +-- .../api/object_storage/test_account_quotas.py | 5 +- .../test_account_quotas_negative.py | 5 +- .../object_storage/test_account_services.py | 4 +- .../test_account_services_negative.py | 4 +- .../api/object_storage/test_container_acl.py | 4 +- .../test_container_acl_negative.py | 4 +- .../api/object_storage/test_crossdomain.py | 5 +- tempest/api/volume/base.py | 6 +- tempest/api/volume/test_volume_transfers.py | 14 +- tempest/clients.py | 189 +++++++----------- tempest/common/isolated_creds.py | 35 +--- tempest/manager.py | 32 +-- tempest/scenario/manager.py | 39 ++-- .../test_security_groups_basic_ops.py | 32 ++- tempest/scenario/utils.py | 11 +- tempest/stress/driver.py | 8 +- tempest/test.py | 16 +- tempest/tests/test_tenant_isolation.py | 19 +- 26 files changed, 209 insertions(+), 350 deletions(-) diff --git a/tempest/api/compute/base.py b/tempest/api/compute/base.py index edeb2fc756..8734624eef 100644 --- a/tempest/api/compute/base.py +++ b/tempest/api/compute/base.py @@ -38,6 +38,8 @@ class BaseComputeTest(tempest.test.BaseTestCase): cls.set_network_resources() super(BaseComputeTest, cls).setUpClass() + # TODO(andreaf) WE should care also for the alt_manager here + # but only once client lazy load in the manager is done os = cls.get_client_manager() cls.os = os @@ -348,23 +350,19 @@ class BaseV2ComputeAdminTest(BaseV2ComputeTest): @classmethod def setUpClass(cls): super(BaseV2ComputeAdminTest, cls).setUpClass() - admin_username = CONF.compute_admin.username - admin_password = CONF.compute_admin.password - admin_tenant = CONF.compute_admin.tenant_name - if not (admin_username and admin_password and admin_tenant): - msg = ("Missing Compute Admin API credentials " - "in configuration.") - raise cls.skipException(msg) if (CONF.compute.allow_tenant_isolation or cls.force_tenant_isolation is True): creds = cls.isolated_creds.get_admin_creds() - admin_username, admin_tenant_name, admin_password = creds - cls.os_adm = clients.Manager(username=admin_username, - password=admin_password, - tenant_name=admin_tenant_name, + cls.os_adm = clients.Manager(credentials=creds, interface=cls._interface) else: - cls.os_adm = clients.ComputeAdminManager(interface=cls._interface) + try: + cls.os_adm = clients.ComputeAdminManager( + interface=cls._interface) + except exceptions.InvalidCredentials: + msg = ("Missing Compute Admin API credentials " + "in configuration.") + raise cls.skipException(msg) class BaseV3ComputeTest(BaseComputeTest): @@ -378,22 +376,18 @@ class BaseV3ComputeAdminTest(BaseV3ComputeTest): @classmethod def setUpClass(cls): super(BaseV3ComputeAdminTest, cls).setUpClass() - admin_username = CONF.compute_admin.username - admin_password = CONF.compute_admin.password - admin_tenant = CONF.compute_admin.tenant_name - if not (admin_username and admin_password and admin_tenant): - msg = ("Missing Compute Admin API credentials " - "in configuration.") - raise cls.skipException(msg) if CONF.compute.allow_tenant_isolation: creds = cls.isolated_creds.get_admin_creds() - admin_username, admin_tenant_name, admin_password = creds - os_adm = clients.Manager(username=admin_username, - password=admin_password, - tenant_name=admin_tenant_name, + os_adm = clients.Manager(credentials=creds, interface=cls._interface) else: - os_adm = clients.ComputeAdminManager(interface=cls._interface) + try: + cls.os_adm = clients.ComputeAdminManager( + interface=cls._interface) + except exceptions.InvalidCredentials: + msg = ("Missing Compute Admin API credentials " + "in configuration.") + raise cls.skipException(msg) cls.os_adm = os_adm cls.servers_admin_client = cls.os_adm.servers_v3_client diff --git a/tempest/api/compute/test_authorization.py b/tempest/api/compute/test_authorization.py index c87f24e31d..375ddf8fd0 100644 --- a/tempest/api/compute/test_authorization.py +++ b/tempest/api/compute/test_authorization.py @@ -43,10 +43,7 @@ class AuthorizationTestJSON(base.BaseV2ComputeTest): if CONF.compute.allow_tenant_isolation: creds = cls.isolated_creds.get_alt_creds() - username, tenant_name, password = creds - cls.alt_manager = clients.Manager(username=username, - password=password, - tenant_name=tenant_name) + cls.alt_manager = clients.Manager(credentials=creds) else: # Use the alt_XXX credentials in the config file cls.alt_manager = clients.AltManager() diff --git a/tempest/api/identity/admin/v3/test_trusts.py b/tempest/api/identity/admin/v3/test_trusts.py index cae20addb9..8e3a7d166c 100644 --- a/tempest/api/identity/admin/v3/test_trusts.py +++ b/tempest/api/identity/admin/v3/test_trusts.py @@ -13,6 +13,7 @@ import datetime import re from tempest.api.identity import base +from tempest import auth from tempest import clients from tempest.common.utils import data_utils from tempest import config @@ -88,10 +89,13 @@ class BaseTrustsV3Test(base.BaseIdentityV3AdminTest): self.assertIsNotNone(self.trustee_user_id) # Initialize a new client with the trustor credentials - os = clients.Manager(username=self.trustor_username, - password=self.trustor_password, - tenant_name=self.trustor_project_name, - interface=self._interface) + creds = auth.get_credentials( + username=self.trustor_username, + password=self.trustor_password, + tenant_name=self.trustor_project_name) + os = clients.Manager( + credentials=creds, + interface=self._interface) self.trustor_client = os.identity_v3_client def cleanup_user_and_roles(self): diff --git a/tempest/api/identity/base.py b/tempest/api/identity/base.py index a5bf248caf..e4e74c128b 100644 --- a/tempest/api/identity/base.py +++ b/tempest/api/identity/base.py @@ -14,6 +14,7 @@ # under the License. +from tempest import auth from tempest import clients from tempest.common.utils import data_utils from tempest import config @@ -120,6 +121,14 @@ class DataGenerator(object): self.projects = [] self.v3_roles = [] + @property + def test_credentials(self): + return auth.get_credentials(username=self.test_user, + user_id=self.user['id'], + password=self.test_password, + tenant_name=self.test_tenant, + tenant_id=self.tenant['id']) + def setup_test_user(self): """Set up a test user.""" self.setup_test_tenant() diff --git a/tempest/api/image/base.py b/tempest/api/image/base.py index e439238d16..31ffd1434a 100644 --- a/tempest/api/image/base.py +++ b/tempest/api/image/base.py @@ -42,11 +42,7 @@ class BaseImageTest(tempest.test.BaseTestCase): skip_msg = ("%s skipped as glance is not available" % cls.__name__) raise cls.skipException(skip_msg) if CONF.compute.allow_tenant_isolation: - creds = cls.isolated_creds.get_primary_creds() - username, tenant_name, password = creds - cls.os = clients.Manager(username=username, - password=password, - tenant_name=tenant_name) + cls.os = clients.Manager(cls.isolated_creds.get_primary_creds()) else: cls.os = clients.Manager() @@ -96,11 +92,7 @@ class BaseV1ImageMembersTest(BaseV1ImageTest): def setUpClass(cls): super(BaseV1ImageMembersTest, cls).setUpClass() if CONF.compute.allow_tenant_isolation: - creds = cls.isolated_creds.get_alt_creds() - username, tenant_name, password = creds - cls.os_alt = clients.Manager(username=username, - password=password, - tenant_name=tenant_name) + cls.os_alt = clients.Manager(cls.isolated_creds.get_alt_creds()) cls.alt_tenant_id = cls.isolated_creds.get_alt_tenant()['id'] else: cls.os_alt = clients.AltManager() @@ -139,12 +131,8 @@ class BaseV2MemberImageTest(BaseV2ImageTest): super(BaseV2MemberImageTest, cls).setUpClass() if CONF.compute.allow_tenant_isolation: creds = cls.isolated_creds.get_alt_creds() - username, tenant_name, password = creds - cls.os_alt = clients.Manager(username=username, - password=password, - tenant_name=tenant_name, - interface=cls._interface) - cls.alt_tenant_id = cls.isolated_creds.get_alt_tenant()['id'] + cls.os_alt = clients.Manager(creds) + cls.alt_tenant_id = cls.isolated_creds.get_alt_creds().tenant_id else: cls.os_alt = clients.AltManager() alt_tenant_name = cls.os_alt.credentials['tenant_name'] 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 bc7f1d6027..16238ced51 100644 --- a/tempest/api/network/admin/test_load_balancer_admin_actions.py +++ b/tempest/api/network/admin/test_load_balancer_admin_actions.py @@ -38,9 +38,9 @@ class LoadBalancerAdminTestJSON(base.BaseAdminNetworkTest): cls.force_tenant_isolation = True manager = cls.get_client_manager() cls.client = manager.network_client - username, tenant_name, passwd = cls.isolated_creds.get_primary_creds() + primary_creds = cls.isolated_creds.get_primary_creds() cls.tenant_id = cls.os_adm.identity_client.get_tenant_by_name( - tenant_name)['id'] + primary_creds.tenant_name)['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 425d3f26c4..5ab581b414 100644 --- a/tempest/api/network/base.py +++ b/tempest/api/network/base.py @@ -352,11 +352,7 @@ class BaseAdminNetworkTest(BaseNetworkTest): raise cls.skipException(msg) if (CONF.compute.allow_tenant_isolation or cls.force_tenant_isolation is True): - creds = cls.isolated_creds.get_admin_creds() - admin_username, admin_tenant_name, admin_password = creds - cls.os_adm = clients.Manager(username=admin_username, - password=admin_password, - tenant_name=admin_tenant_name, + cls.os_adm = clients.Manager(cls.isolated_creds.get_admin_creds(), interface=cls._interface) else: cls.os_adm = clients.ComputeAdminManager(interface=cls._interface) diff --git a/tempest/api/object_storage/base.py b/tempest/api/object_storage/base.py index 45c895bab3..6b18182db2 100644 --- a/tempest/api/object_storage/base.py +++ b/tempest/api/object_storage/base.py @@ -38,23 +38,12 @@ class BaseObjectTest(tempest.test.BaseTestCase): cls.__name__, network_resources=cls.network_resources) if CONF.compute.allow_tenant_isolation: # Get isolated creds for normal user - creds = cls.isolated_creds.get_primary_creds() - username, tenant_name, password = creds - cls.os = clients.Manager(username=username, - password=password, - tenant_name=tenant_name) + cls.os = clients.Manager(cls.isolated_creds.get_primary_creds()) # Get isolated creds for admin user - admin_creds = cls.isolated_creds.get_admin_creds() - admin_username, admin_tenant_name, admin_password = admin_creds - cls.os_admin = clients.Manager(username=admin_username, - password=admin_password, - tenant_name=admin_tenant_name) + cls.os_admin = clients.Manager( + cls.isolated_creds.get_admin_creds()) # Get isolated creds for alt user - alt_creds = cls.isolated_creds.get_alt_creds() - alt_username, alt_tenant, alt_password = alt_creds - cls.os_alt = clients.Manager(username=alt_username, - password=alt_password, - tenant_name=alt_tenant) + cls.os_alt = clients.Manager(cls.isolated_creds.get_alt_creds()) # Add isolated users to operator role so that they can create a # container in swift. cls._assign_member_role() @@ -92,8 +81,8 @@ class BaseObjectTest(tempest.test.BaseTestCase): @classmethod def _assign_member_role(cls): - primary_user = cls.isolated_creds.get_primary_user() - alt_user = cls.isolated_creds.get_alt_user() + primary_creds = cls.isolated_creds.get_primary_creds() + alt_creds = cls.isolated_creds.get_alt_creds() swift_role = CONF.object_storage.operator_role try: resp, roles = cls.os_admin.identity_client.list_roles() @@ -101,9 +90,9 @@ class BaseObjectTest(tempest.test.BaseTestCase): except StopIteration: msg = "No role named %s found" % swift_role raise exceptions.NotFound(msg) - for user in [primary_user, alt_user]: - cls.os_admin.identity_client.assign_user_role(user['tenantId'], - user['id'], + for creds in [primary_creds, alt_creds]: + cls.os_admin.identity_client.assign_user_role(creds.tenant_id, + creds.user_id, role['id']) @classmethod diff --git a/tempest/api/object_storage/test_account_quotas.py b/tempest/api/object_storage/test_account_quotas.py index c1f468b04d..021555c017 100644 --- a/tempest/api/object_storage/test_account_quotas.py +++ b/tempest/api/object_storage/test_account_quotas.py @@ -35,10 +35,7 @@ class AccountQuotasTest(base.BaseObjectTest): cls.data.setup_test_user() - cls.os_reselleradmin = clients.Manager( - cls.data.test_user, - cls.data.test_password, - cls.data.test_tenant) + cls.os_reselleradmin = clients.Manager(cls.data.test_credentials) # Retrieve the ResellerAdmin role id reseller_role_id = None diff --git a/tempest/api/object_storage/test_account_quotas_negative.py b/tempest/api/object_storage/test_account_quotas_negative.py index 4677f97ad6..f1355db49b 100644 --- a/tempest/api/object_storage/test_account_quotas_negative.py +++ b/tempest/api/object_storage/test_account_quotas_negative.py @@ -35,10 +35,7 @@ class AccountQuotasNegativeTest(base.BaseObjectTest): cls.data.setup_test_user() - cls.os_reselleradmin = clients.Manager( - cls.data.test_user, - cls.data.test_password, - cls.data.test_tenant) + cls.os_reselleradmin = clients.Manager(cls.data.test_credentials) # Retrieve the ResellerAdmin role id reseller_role_id = None diff --git a/tempest/api/object_storage/test_account_services.py b/tempest/api/object_storage/test_account_services.py index 7fb0604991..d615374acb 100644 --- a/tempest/api/object_storage/test_account_services.py +++ b/tempest/api/object_storage/test_account_services.py @@ -67,9 +67,7 @@ class AccountTest(base.BaseObjectTest): self.data.setup_test_user() os_test_user = clients.Manager( - self.data.test_user, - self.data.test_password, - self.data.test_tenant) + self.data.test_credentials) # Retrieve the id of an operator role of object storage test_role_id = None diff --git a/tempest/api/object_storage/test_account_services_negative.py b/tempest/api/object_storage/test_account_services_negative.py index 71eaab5839..d5f8649244 100644 --- a/tempest/api/object_storage/test_account_services_negative.py +++ b/tempest/api/object_storage/test_account_services_negative.py @@ -28,9 +28,7 @@ class AccountNegativeTest(base.BaseObjectTest): # create user self.data.setup_test_user() - test_os = clients.Manager(self.data.test_user, - self.data.test_password, - self.data.test_tenant) + test_os = clients.Manager(self.data.test_credentials) test_auth_provider = test_os.auth_provider # Get auth for the test user test_auth_provider.auth_data diff --git a/tempest/api/object_storage/test_container_acl.py b/tempest/api/object_storage/test_container_acl.py index c865ee1ab3..fc515040c4 100644 --- a/tempest/api/object_storage/test_container_acl.py +++ b/tempest/api/object_storage/test_container_acl.py @@ -24,9 +24,7 @@ class ObjectTestACLs(base.BaseObjectTest): def setUpClass(cls): super(ObjectTestACLs, cls).setUpClass() cls.data.setup_test_user() - test_os = clients.Manager(cls.data.test_user, - cls.data.test_password, - cls.data.test_tenant) + test_os = clients.Manager(cls.data.test_credentials) cls.test_auth_data = test_os.auth_provider.auth_data @classmethod diff --git a/tempest/api/object_storage/test_container_acl_negative.py b/tempest/api/object_storage/test_container_acl_negative.py index 547bf87bb7..ca538767b9 100644 --- a/tempest/api/object_storage/test_container_acl_negative.py +++ b/tempest/api/object_storage/test_container_acl_negative.py @@ -26,9 +26,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest): def setUpClass(cls): super(ObjectACLsNegativeTest, cls).setUpClass() cls.data.setup_test_user() - test_os = clients.Manager(cls.data.test_user, - cls.data.test_password, - cls.data.test_tenant) + test_os = clients.Manager(cls.data.test_credentials) cls.test_auth_data = test_os.auth_provider.auth_data @classmethod diff --git a/tempest/api/object_storage/test_crossdomain.py b/tempest/api/object_storage/test_crossdomain.py index 4f399b42ec..d1541b9d9c 100644 --- a/tempest/api/object_storage/test_crossdomain.py +++ b/tempest/api/object_storage/test_crossdomain.py @@ -29,10 +29,7 @@ class CrossdomainTest(base.BaseObjectTest): # endpoint and test the healthcheck feature. cls.data.setup_test_user() - cls.os_test_user = clients.Manager( - cls.data.test_user, - cls.data.test_password, - cls.data.test_tenant) + cls.os_test_user = clients.Manager(cls.data.test_credentials) cls.xml_start = '\n' \ '