diff --git a/tempest/api/identity/admin/v2/test_services.py b/tempest/api/identity/admin/v2/test_services.py index 03543ac727..182b24cc72 100644 --- a/tempest/api/identity/admin/v2/test_services.py +++ b/tempest/api/identity/admin/v2/test_services.py @@ -20,6 +20,7 @@ from tempest.lib import exceptions as lib_exc class ServicesTestJSON(base.BaseIdentityV2AdminTest): + """Test identity services via v2 API""" def _del_service(self, service_id): # Deleting the service created in this method @@ -30,6 +31,7 @@ class ServicesTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('84521085-c6e6-491c-9a08-ec9f70f90110') def test_create_get_delete_service(self): + """Test verifies the identity service create/get/delete via v2 API""" # GET Service # Creating a Service name = data_utils.rand_name('service') @@ -64,7 +66,10 @@ class ServicesTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('5d3252c8-e555-494b-a6c8-e11d7335da42') def test_create_service_without_description(self): - # Create a service only with name and type + """Test creating identity service without description via v2 API + + Create a service only with name and type. + """ name = data_utils.rand_name('service') s_type = data_utils.rand_name('type') service = self.services_client.create_service( @@ -79,7 +84,7 @@ class ServicesTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type='smoke') @decorators.idempotent_id('34ea6489-012d-4a86-9038-1287cadd5eca') def test_list_services(self): - # Create, List, Verify and Delete Services + """Test Create/List/Verify/Delete of identity service via v2 API""" services = [] for _ in range(3): name = data_utils.rand_name('service') diff --git a/tempest/api/identity/admin/v2/test_tenants.py b/tempest/api/identity/admin/v2/test_tenants.py index f68754e5b9..5f73e1cd23 100644 --- a/tempest/api/identity/admin/v2/test_tenants.py +++ b/tempest/api/identity/admin/v2/test_tenants.py @@ -19,10 +19,14 @@ from tempest.lib import decorators class TenantsTestJSON(base.BaseIdentityV2AdminTest): + """Test identity tenants via v2 API""" @decorators.idempotent_id('16c6e05c-6112-4b0e-b83f-5e43f221b6b0') def test_tenant_list_delete(self): - # Create several tenants and delete them + """Test listing and deleting tenants via v2 API + + Create several tenants and delete them + """ tenants = [] for _ in range(3): tenant = self.setup_test_tenant() @@ -41,7 +45,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('d25e9f24-1310-4d29-b61b-d91299c21d6d') def test_tenant_create_with_description(self): - # Create tenant with a description + """Test creating tenant with a description via v2 API""" tenant_desc = data_utils.rand_name(name='desc') tenant = self.setup_test_tenant(description=tenant_desc) tenant_id = tenant['id'] @@ -56,7 +60,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('670bdddc-1cd7-41c7-b8e2-751cfb67df50') def test_tenant_create_enabled(self): - # Create a tenant that is enabled + """Test creating a tenant that is enabled via v2 API""" tenant = self.setup_test_tenant(enabled=True) tenant_id = tenant['id'] self.assertTrue(tenant['enabled'], 'Enable should be True in response') @@ -66,7 +70,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('3be22093-b30f-499d-b772-38340e5e16fb') def test_tenant_create_not_enabled(self): - # Create a tenant that is not enabled + """Test creating a tenant that is not enabled via v2 API""" tenant = self.setup_test_tenant(enabled=False) tenant_id = tenant['id'] self.assertFalse(tenant['enabled'], @@ -78,7 +82,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('781f2266-d128-47f3-8bdb-f70970add238') def test_tenant_update_name(self): - # Update name attribute of a tenant + """Test updating name attribute of a tenant via v2 API""" t_name1 = data_utils.rand_name(name='tenant') tenant = self.setup_test_tenant(name=t_name1) t_id = tenant['id'] @@ -100,7 +104,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('859fcfe1-3a03-41ef-86f9-b19a47d1cd87') def test_tenant_update_desc(self): - # Update description attribute of a tenant + """Test updating description attribute of a tenant via v2 API""" t_desc = data_utils.rand_name(name='desc') tenant = self.setup_test_tenant(description=t_desc) t_id = tenant['id'] @@ -123,7 +127,7 @@ class TenantsTestJSON(base.BaseIdentityV2AdminTest): @decorators.idempotent_id('8fc8981f-f12d-4c66-9972-2bdcf2bc2e1a') def test_tenant_update_enable(self): - # Update the enabled attribute of a tenant + """Test updating the enabled attribute of a tenant via v2 API""" t_en = False tenant = self.setup_test_tenant(enabled=t_en) t_id = tenant['id'] diff --git a/tempest/api/identity/admin/v2/test_users_negative.py b/tempest/api/identity/admin/v2/test_users_negative.py index 4f47e41d8c..eda1fdd4f1 100644 --- a/tempest/api/identity/admin/v2/test_users_negative.py +++ b/tempest/api/identity/admin/v2/test_users_negative.py @@ -20,6 +20,7 @@ from tempest.lib import exceptions as lib_exc class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): + """Negative tests of identity users via v2 API""" @classmethod def resource_setup(cls): @@ -31,7 +32,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('60a1f5fa-5744-4cdf-82bf-60b7de2d29a4') def test_create_user_by_unauthorized_user(self): - # Non-administrator should not be authorized to create a user + """Non-admin should not be authorized to create a user via v2 API""" tenant = self.setup_test_tenant() self.assertRaises(lib_exc.Forbidden, self.non_admin_users_client.create_user, @@ -42,7 +43,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('d80d0c2f-4514-4d1e-806d-0930dfc5a187') def test_create_user_with_empty_name(self): - # User with an empty name should not be created + """User with an empty name should not be created via v2 API""" tenant = self.setup_test_tenant() self.assertRaises(lib_exc.BadRequest, self.users_client.create_user, name='', password=self.alt_password, @@ -52,7 +53,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('7704b4f3-3b75-4b82-87cc-931d41c8f780') def test_create_user_with_name_length_over_255(self): - # Length of user name filed should be restricted to 255 characters + """Length of user name should not exceed 255 via v2 API""" tenant = self.setup_test_tenant() self.assertRaises(lib_exc.BadRequest, self.users_client.create_user, name='a' * 256, password=self.alt_password, @@ -62,7 +63,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('57ae8558-120c-4723-9308-3751474e7ecf') def test_create_user_with_duplicate_name(self): - # Duplicate user should not be created + """Duplicate user should not be created via v2 API""" password = data_utils.rand_password() user = self.setup_test_user(password) tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant'] @@ -75,7 +76,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('0132cc22-7c4f-42e1-9e50-ac6aad31d59a') def test_create_user_for_non_existent_tenant(self): - # Attempt to create a user in a non-existent tenant should fail + """Creating a user in a non-existent tenant via v2 API should fail""" self.assertRaises(lib_exc.NotFound, self.users_client.create_user, name=self.alt_user, password=self.alt_password, @@ -85,7 +86,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('55bbb103-d1ae-437b-989b-bcdf8175c1f4') def test_create_user_request_without_a_token(self): - # Request to create a user without a valid token should fail + """Creating a user without a valid token via v2 API should fail""" tenant = self.setup_test_tenant() # Get the token of the current client token = self.client.auth_provider.get_token() @@ -103,7 +104,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('23a2f3da-4a1a-41da-abdd-632328a861ad') def test_create_user_with_enabled_non_bool(self): - # Attempt to create a user with valid enabled para should fail + """Creating a user with invalid enabled para via v2 API should fail""" tenant = self.setup_test_tenant() name = data_utils.rand_name('test_user') self.assertRaises(lib_exc.BadRequest, self.users_client.create_user, @@ -114,7 +115,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('3d07e294-27a0-4144-b780-a2a1bf6fee19') def test_update_user_for_non_existent_user(self): - # Attempt to update a user non-existent user should fail + """Updating a non-existent user via v2 API should fail""" user_name = data_utils.rand_name('user') non_existent_id = data_utils.rand_uuid() self.assertRaises(lib_exc.NotFound, self.users_client.update_user, @@ -123,7 +124,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('3cc2a64b-83aa-4b02-88f0-d6ab737c4466') def test_update_user_request_without_a_token(self): - # Request to update a user without a valid token should fail + """Updating a user without a valid token via v2 API should fail""" # Get the token of the current client token = self.client.auth_provider.get_token() @@ -139,7 +140,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('424868d5-18a7-43e1-8903-a64f95ee3aac') def test_update_user_by_unauthorized_user(self): - # Non-administrator should not be authorized to update user + """Non-admin should not be authorized to update user via v2 API""" self.assertRaises(lib_exc.Forbidden, self.non_admin_users_client.update_user, self.alt_user) @@ -147,7 +148,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('d45195d5-33ed-41b9-a452-7d0d6a00f6e9') def test_delete_users_by_unauthorized_user(self): - # Non-administrator user should not be authorized to delete a user + """Non-admin should not be authorized to delete a user via v2 API""" user = self.setup_test_user() self.assertRaises(lib_exc.Forbidden, self.non_admin_users_client.delete_user, @@ -156,14 +157,14 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('7cc82f7e-9998-4f89-abae-23df36495867') def test_delete_non_existent_user(self): - # Attempt to delete a non-existent user should fail + """Attempt to delete a non-existent user via v2 API should fail""" self.assertRaises(lib_exc.NotFound, self.users_client.delete_user, 'junk12345123') @decorators.attr(type=['negative']) @decorators.idempotent_id('57fe1df8-0aa7-46c0-ae9f-c2e785c7504a') def test_delete_user_request_without_a_token(self): - # Request to delete a user without a valid token should fail + """Deleting a user without a valid token via v2 API should fail""" # Get the token of the current client token = self.client.auth_provider.get_token() @@ -179,7 +180,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('593a4981-f6d4-460a-99a1-57a78bf20829') def test_authentication_for_disabled_user(self): - # Disabled user's token should not get authenticated + """Disabled user's token should not get authenticated via v2 API""" password = data_utils.rand_password() user = self.setup_test_user(password) tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant'] @@ -192,7 +193,11 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('440a7a8d-9328-4b7b-83e0-d717010495e4') def test_authentication_when_tenant_is_disabled(self): - # User's token for a disabled tenant should not be authenticated + """Test User's token for a disabled tenant via v2 API + + User's token for a disabled tenant should not be authenticated via + v2 API. + """ password = data_utils.rand_password() user = self.setup_test_user(password) tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant'] @@ -205,7 +210,11 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('921f1ad6-7907-40b8-853f-637e7ee52178') def test_authentication_with_invalid_tenant(self): - # User's token for an invalid tenant should not be authenticated + """Test User's token for an invalid tenant via v2 API + + User's token for an invalid tenant should not be authenticated via V2 + API. + """ password = data_utils.rand_password() user = self.setup_test_user(password) self.assertRaises(lib_exc.Unauthorized, self.token_client.auth, @@ -216,7 +225,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('bde9aecd-3b1c-4079-858f-beb5deaa5b5e') def test_authentication_with_invalid_username(self): - # Non-existent user's token should not get authenticated + """Non-existent user's token should not get authorized via v2 API""" password = data_utils.rand_password() user = self.setup_test_user(password) tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant'] @@ -226,7 +235,11 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('d5308b33-3574-43c3-8d87-1c090c5e1eca') def test_authentication_with_invalid_password(self): - # User's token with invalid password should not be authenticated + """Test User's token with invalid password via v2 API + + User's token with invalid password should not be authenticated via V2 + API. + """ user = self.setup_test_user() tenant = self.tenants_client.show_tenant(user['tenantId'])['tenant'] self.assertRaises(lib_exc.Unauthorized, self.token_client.auth, @@ -235,14 +248,14 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('284192ce-fb7c-4909-a63b-9a502e0ddd11') def test_get_users_by_unauthorized_user(self): - # Non-administrator user should not be authorized to get user list + """Non-admin should not be authorized to get user list via v2 API""" self.assertRaises(lib_exc.Forbidden, self.non_admin_users_client.list_users) @decorators.attr(type=['negative']) @decorators.idempotent_id('a73591ec-1903-4ffe-be42-282b39fefc9d') def test_get_users_request_without_token(self): - # Request to get list of users without a valid token should fail + """Listing users without a valid token via v2 API should fail""" token = self.client.auth_provider.get_token() self.client.delete_token(token) @@ -254,8 +267,7 @@ class UsersNegativeTestJSON(base.BaseIdentityV2AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('f5d39046-fc5f-425c-b29e-bac2632da28e') def test_list_users_with_invalid_tenant(self): - # Should not be able to return a list of all - # users for a non-existent tenant + """Listing users for a non-existent tenant via v2 API should fail""" # Assign invalid tenant ids invalid_id = list() invalid_id.append(data_utils.rand_name('999')) diff --git a/tempest/api/identity/admin/v3/test_domains.py b/tempest/api/identity/admin/v3/test_domains.py index 07175f4cf4..32ccb9ef11 100644 --- a/tempest/api/identity/admin/v3/test_domains.py +++ b/tempest/api/identity/admin/v3/test_domains.py @@ -24,6 +24,7 @@ CONF = config.CONF class DomainsTestJSON(base.BaseIdentityV3AdminTest): + """Test identity domains""" @classmethod def resource_setup(cls): @@ -37,7 +38,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('8cf516ef-2114-48f1-907b-d32726c734d4') def test_list_domains(self): - # Test to list domains + """Test listing domains""" fetched_ids = list() # List and Verify Domains body = self.domains_client.list_domains()['domains'] @@ -49,7 +50,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('c6aee07b-4981-440c-bb0b-eb598f58ffe9') def test_list_domains_filter_by_name(self): - # List domains filtering by name + """Test listing domains filtering by name""" params = {'name': self.setup_domains[0]['name']} fetched_domains = self.domains_client.list_domains( **params)['domains'] @@ -61,7 +62,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('3fd19840-65c1-43f8-b48c-51bdd066dff9') def test_list_domains_filter_by_enabled(self): - # List domains filtering by enabled domains + """Test listing domains filtering by enabled domains""" params = {'enabled': True} fetched_domains = self.domains_client.list_domains( **params)['domains'] @@ -74,6 +75,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type='smoke') @decorators.idempotent_id('f2f5b44a-82e8-4dad-8084-0661ea3b18cf') def test_create_update_delete_domain(self): + """Test creating, updating and deleting domain""" # Create domain d_name = data_utils.rand_name('domain') d_desc = data_utils.rand_name('domain-desc') @@ -118,6 +120,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('d8d318b7-d1b3-4c37-94c5-3c5ba0b121ea') def test_domain_delete_cascades_content(self): + """Test deleting domain will delete its associated contents""" # Create a domain with a user and a group in it domain = self.setup_test_domain() user = self.create_test_user(domain_id=domain['id']) @@ -134,6 +137,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('036df86e-bb5d-42c0-a7c2-66b9db3a6046') def test_create_domain_with_disabled_status(self): + """Test creating domain with disabled status""" # Create domain with enabled status as false d_name = data_utils.rand_name('domain') d_desc = data_utils.rand_name('domain-desc') @@ -146,6 +150,7 @@ class DomainsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('2abf8764-309a-4fa9-bc58-201b799817ad') def test_create_domain_without_description(self): + """Test creating domain without description""" # Create domain only with name d_name = data_utils.rand_name('domain') domain = self.domains_client.create_domain(name=d_name)['domain'] diff --git a/tempest/api/identity/admin/v3/test_domains_negative.py b/tempest/api/identity/admin/v3/test_domains_negative.py index b3c68fbc11..c90206d8fc 100644 --- a/tempest/api/identity/admin/v3/test_domains_negative.py +++ b/tempest/api/identity/admin/v3/test_domains_negative.py @@ -20,6 +20,8 @@ from tempest.lib import exceptions as lib_exc class DomainsNegativeTestJSON(base.BaseIdentityV3AdminTest): + """Negative tests of identity domains""" + # NOTE: force_tenant_isolation is true in the base class by default but # overridden to false here to allow test execution for clouds using the # pre-provisioned credentials provider. @@ -28,6 +30,7 @@ class DomainsNegativeTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative', 'gate']) @decorators.idempotent_id('1f3fbff5-4e44-400d-9ca1-d953f05f609b') def test_delete_active_domain(self): + """Test deleting active domain should fail""" domain = self.create_domain() domain_id = domain['id'] @@ -40,14 +43,20 @@ class DomainsNegativeTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('9018461d-7d24-408d-b3fe-ae37e8cd5c9e') def test_create_domain_with_empty_name(self): - # Domain name should not be empty + """Test creating domain with empty name should fail + + Domain name should not be empty + """ self.assertRaises(lib_exc.BadRequest, self.domains_client.create_domain, name='') @decorators.attr(type=['negative']) @decorators.idempotent_id('37b1bbf2-d664-4785-9a11-333438586eae') def test_create_domain_with_name_length_over_64(self): - # Domain name length should not ne greater than 64 characters + """Test creating domain with name over length + + Domain name length should not ne greater than 64 characters + """ d_name = 'a' * 65 self.assertRaises(lib_exc.BadRequest, self.domains_client.create_domain, @@ -56,13 +65,14 @@ class DomainsNegativeTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('43781c07-764f-4cf2-a405-953c1916f605') def test_delete_non_existent_domain(self): - # Attempt to delete a non existent domain should fail + """Test attempting to delete a non existent domain should fail""" self.assertRaises(lib_exc.NotFound, self.domains_client.delete_domain, data_utils.rand_uuid_hex()) @decorators.attr(type=['negative']) @decorators.idempotent_id('e6f9e4a2-4f36-4be8-bdbc-4e199ae29427') def test_domain_create_duplicate(self): + """Test creating domain with duplicate name should fail""" domain_name = data_utils.rand_name('domain-dup') domain = self.domains_client.create_domain(name=domain_name)['domain'] domain_id = domain['id'] diff --git a/tempest/api/identity/admin/v3/test_endpoints.py b/tempest/api/identity/admin/v3/test_endpoints.py index 366d6a0c85..0199d737c8 100644 --- a/tempest/api/identity/admin/v3/test_endpoints.py +++ b/tempest/api/identity/admin/v3/test_endpoints.py @@ -20,6 +20,8 @@ from tempest.lib import decorators class EndPointsTestJSON(base.BaseIdentityV3AdminTest): + """Test keystone endpoints""" + # NOTE: force_tenant_isolation is true in the base class by default but # overridden to false here to allow test execution for clouds using the # pre-provisioned credentials provider. @@ -71,6 +73,7 @@ class EndPointsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('c19ecf90-240e-4e23-9966-21cee3f6a618') def test_list_endpoints(self): + """Test listing keystone endpoints by filters""" # Get the list of all the endpoints. fetched_endpoints = self.client.list_endpoints()['endpoints'] fetched_endpoint_ids = [e['id'] for e in fetched_endpoints] @@ -111,6 +114,7 @@ class EndPointsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('0e2446d2-c1fd-461b-a729-b9e73e3e3b37') def test_create_list_show_delete_endpoint(self): + """Test creating, listing, showing and deleting keystone endpoint""" region_name = data_utils.rand_name('region') url = data_utils.rand_url() interface = 'public' @@ -152,6 +156,7 @@ class EndPointsTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type='smoke') @decorators.idempotent_id('37e8f15e-ee7c-4657-a1e7-f6b61e375eff') def test_update_endpoint(self): + """Test updating keystone endpoint""" # NOTE(zhufl) Service2 should be created before endpoint_for_update # is created, because Service2 must be deleted after # endpoint_for_update is deleted, otherwise we will get a 404 error diff --git a/tempest/api/identity/admin/v3/test_list_projects.py b/tempest/api/identity/admin/v3/test_list_projects.py index cb8ea11764..b33d8bdb86 100644 --- a/tempest/api/identity/admin/v3/test_list_projects.py +++ b/tempest/api/identity/admin/v3/test_list_projects.py @@ -40,6 +40,7 @@ class BaseListProjectsTestJSON(base.BaseIdentityV3AdminTest): class ListProjectsTestJSON(BaseListProjectsTestJSON): + """Test listing projects""" @classmethod def resource_setup(cls): @@ -65,13 +66,13 @@ class ListProjectsTestJSON(BaseListProjectsTestJSON): @decorators.idempotent_id('0fe7a334-675a-4509-b00e-1c4b95d5dae8') def test_list_projects_with_enabled(self): - # List the projects with enabled + """Test listing the projects with enabled""" self._list_projects_with_params( [self.p1], [self.p2, self.p3], {'enabled': False}, 'enabled') @decorators.idempotent_id('6edc66f5-2941-4a17-9526-4073311c1fac') def test_list_projects_with_parent(self): - # List projects with parent + """Test listing projects with parent""" params = {'parent_id': self.p3['parent_id']} fetched_projects = self.projects_client.list_projects( params)['projects'] @@ -81,6 +82,11 @@ class ListProjectsTestJSON(BaseListProjectsTestJSON): class ListProjectsStaticTestJSON(BaseListProjectsTestJSON): + """Test listing projects + + These tests can be executed in clouds using the pre-provisioned users + """ + # NOTE: force_tenant_isolation is true in the base class by default but # overridden to false here to allow test execution for clouds using the # pre-provisioned credentials provider. @@ -102,7 +108,7 @@ class ListProjectsStaticTestJSON(BaseListProjectsTestJSON): @decorators.idempotent_id('1d830662-22ad-427c-8c3e-4ec854b0af44') def test_list_projects(self): - # List projects + """Test listing projects""" list_projects = self.projects_client.list_projects()['projects'] for p in [self.p1, self.p2]: @@ -112,13 +118,13 @@ class ListProjectsStaticTestJSON(BaseListProjectsTestJSON): @decorators.idempotent_id('fa178524-4e6d-4925-907c-7ab9f42c7e26') def test_list_projects_with_name(self): - # List projects with name + """Test listing projects filtered by name""" self._list_projects_with_params( [self.p1], [self.p2], {'name': self.p1['name']}, 'name') @decorators.idempotent_id('fab13f3c-f6a6-4b9f-829b-d32fd44fdf10') def test_list_projects_with_domains(self): - # Verify project list filtered by domain + """Test listing projects filtered by domain""" key = 'domain_id' for p in [self.p1, self.p2]: params = {key: p[key]} diff --git a/tempest/api/identity/admin/v3/test_projects.py b/tempest/api/identity/admin/v3/test_projects.py index e46145d967..be1216ab36 100644 --- a/tempest/api/identity/admin/v3/test_projects.py +++ b/tempest/api/identity/admin/v3/test_projects.py @@ -23,6 +23,8 @@ CONF = config.CONF class ProjectsTestJSON(base.BaseIdentityV3AdminTest): + """Test identity projects""" + # NOTE: force_tenant_isolation is true in the base class by default but # overridden to false here to allow test execution for clouds using the # pre-provisioned credentials provider. @@ -30,7 +32,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('0ecf465c-0dc4-4532-ab53-91ffeb74d12d') def test_project_create_with_description(self): - # Create project with a description + """Test creating project with a description""" project_desc = data_utils.rand_name('desc') project = self.setup_test_project(description=project_desc) project_id = project['id'] @@ -44,7 +46,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('5f50fe07-8166-430b-a882-3b2ee0abe26f') def test_project_create_with_domain(self): - # Create project with a domain + """Test creating project with a domain""" domain = self.setup_test_domain() project_name = data_utils.rand_name('project') project = self.setup_test_project( @@ -58,7 +60,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('1854f9c0-70bc-4d11-a08a-1c789d339e3d') def test_project_create_with_parent(self): - # Create root project without providing a parent_id + """Test creating root project without providing a parent_id""" domain = self.setup_test_domain() domain_id = domain['id'] @@ -83,6 +85,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('a7eb9416-6f9b-4dbb-b71b-7f73aaef59d5') def test_create_is_domain_project(self): + """Test creating is_domain project""" project = self.setup_test_project(domain_id=None, is_domain=True) # To delete a domain, we need to disable it first self.addCleanup(self.projects_client.update_project, project['id'], @@ -103,7 +106,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('1f66dc76-50cc-4741-a200-af984509e480') def test_project_create_enabled(self): - # Create a project that is enabled + """Test creating a project that is enabled""" project = self.setup_test_project(enabled=True) project_id = project['id'] self.assertTrue(project['enabled'], @@ -113,7 +116,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('78f96a9c-e0e0-4ee6-a3ba-fbf6dfd03207') def test_project_create_not_enabled(self): - # Create a project that is not enabled + """Test creating a project that is not enabled""" project = self.setup_test_project(enabled=False) self.assertFalse(project['enabled'], 'Enable should be False in response') @@ -123,7 +126,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('f608f368-048c-496b-ad63-d286c26dab6b') def test_project_update_name(self): - # Update name attribute of a project + """Test updating name attribute of a project""" p_name1 = data_utils.rand_name('project') project = self.setup_test_project(name=p_name1) @@ -144,7 +147,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('f138b715-255e-4a7d-871d-351e1ef2e153') def test_project_update_desc(self): - # Update description attribute of a project + """Test updating description attribute of a project""" p_desc = data_utils.rand_name('desc') project = self.setup_test_project(description=p_desc) resp1_desc = project['description'] @@ -164,7 +167,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('b6b25683-c97f-474d-a595-55d410b68100') def test_project_update_enable(self): - # Update the enabled attribute of a project + """Test updating the enabled attribute of a project""" p_en = False project = self.setup_test_project(enabled=p_en) @@ -189,7 +192,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): 'immutable user source and solely ' 'provides read-only access to users.') def test_associate_user_to_project(self): - # Associate a user to a project + """Test associating a user to a project""" # Create a Project project = self.setup_test_project() @@ -215,6 +218,7 @@ class ProjectsTestJSON(base.BaseIdentityV3AdminTest): @decorators.idempotent_id('d1db68b6-aebe-4fa0-b79d-d724d2e21162') def test_project_get_equals_list(self): + """Test the result of getting project equals that of listing""" fields = ['parent_id', 'is_domain', 'description', 'links', 'name', 'enabled', 'domain_id', 'id', 'tags'] diff --git a/tempest/api/identity/admin/v3/test_projects_negative.py b/tempest/api/identity/admin/v3/test_projects_negative.py index 12f1d4a31b..79e3d29cae 100644 --- a/tempest/api/identity/admin/v3/test_projects_negative.py +++ b/tempest/api/identity/admin/v3/test_projects_negative.py @@ -20,11 +20,12 @@ from tempest.lib import exceptions as lib_exc class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest): + """Negative tests of projects""" @decorators.attr(type=['negative']) @decorators.idempotent_id('8d68c012-89e0-4394-8d6b-ccd7196def97') def test_project_delete_by_unauthorized_user(self): - # Non-admin user should not be able to delete a project + """Non-admin user should not be able to delete a project""" project = self.setup_test_project() self.assertRaises( lib_exc.Forbidden, self.non_admin_projects_client.delete_project, @@ -32,6 +33,11 @@ class ProjectsNegativeTestJSON(base.BaseIdentityV3AdminTest): class ProjectsNegativeStaticTestJSON(base.BaseIdentityV3AdminTest): + """Negative tests of projects + + These tests can be executed in clouds using the pre-provisioned users + """ + # NOTE: force_tenant_isolation is true in the base class by default but # overridden to false here to allow test execution for clouds using the # pre-provisioned credentials provider. @@ -40,14 +46,14 @@ class ProjectsNegativeStaticTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('24c49279-45dd-4155-887a-cb738c2385aa') def test_list_projects_by_unauthorized_user(self): - # Non-admin user should not be able to list projects + """Non-admin user should not be able to list projects""" self.assertRaises(lib_exc.Forbidden, self.non_admin_projects_client.list_projects) @decorators.attr(type=['negative']) @decorators.idempotent_id('874c3e84-d174-4348-a16b-8c01f599561b') def test_project_create_duplicate(self): - # Project names should be unique + """Project names should be unique""" project_name = data_utils.rand_name('project-dup') self.setup_test_project(name=project_name) @@ -57,7 +63,7 @@ class ProjectsNegativeStaticTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('8fba9de2-3e1f-4e77-812a-60cb68f8df13') def test_create_project_by_unauthorized_user(self): - # Non-admin user should not be authorized to create a project + """Non-admin user should not be authorized to create a project""" project_name = data_utils.rand_name('project') self.assertRaises( lib_exc.Forbidden, self.non_admin_projects_client.create_project, @@ -66,14 +72,14 @@ class ProjectsNegativeStaticTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('7828db17-95e5-475b-9432-9a51b4aa79a9') def test_create_project_with_empty_name(self): - # Project name should not be empty + """Project name should not be empty""" self.assertRaises(lib_exc.BadRequest, self.projects_client.create_project, name='') @decorators.attr(type=['negative']) @decorators.idempotent_id('502b6ceb-b0c8-4422-bf53-f08fdb21e2f0') def test_create_projects_name_length_over_64(self): - # Project name length should not be greater than 64 characters + """Project name length should not be greater than 64 characters""" project_name = 'a' * 65 self.assertRaises(lib_exc.BadRequest, self.projects_client.create_project, project_name) @@ -81,7 +87,7 @@ class ProjectsNegativeStaticTestJSON(base.BaseIdentityV3AdminTest): @decorators.attr(type=['negative']) @decorators.idempotent_id('7965b581-60c1-43b7-8169-95d4ab7fc6fb') def test_delete_non_existent_project(self): - # Attempt to delete a non existent project should fail + """Attempt to delete a non existent project should fail""" self.assertRaises(lib_exc.NotFound, self.projects_client.delete_project, data_utils.rand_uuid_hex())