Add T111 hacking rule for consistent DELETE method
As the consistent-service-method-names bp, "DELETE /resources/<id>" methods' names should be "delete_<resource name>". So this patch adds it as the hacking rule. Partially implements blueprint consistent-service-method-names Change-Id: I36592a91001361d816e302745fe8417aee5e7565
This commit is contained in:
parent
5334660423
commit
b8461cb21f
|
@ -95,7 +95,7 @@ class RolesTestJSON(base.BaseIdentityV2AdminTest):
|
|||
user_role = self.client.assign_user_role(tenant['id'],
|
||||
user['id'],
|
||||
role['id'])['role']
|
||||
self.client.remove_user_role(tenant['id'], user['id'],
|
||||
self.client.delete_user_role(tenant['id'], user['id'],
|
||||
user_role['id'])
|
||||
|
||||
@test.idempotent_id('262e1e3e-ed71-4edd-a0e5-d64e83d66d05')
|
||||
|
|
|
@ -177,7 +177,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
|||
user['id'],
|
||||
role['id'])
|
||||
self.assertRaises(lib_exc.Forbidden,
|
||||
self.non_admin_client.remove_user_role,
|
||||
self.non_admin_client.delete_user_role,
|
||||
tenant['id'], user['id'], role['id'])
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
|
@ -191,7 +191,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
|||
token = self.client.auth_provider.get_token()
|
||||
self.client.delete_token(token)
|
||||
self.assertRaises(lib_exc.Unauthorized,
|
||||
self.client.remove_user_role, tenant['id'],
|
||||
self.client.delete_user_role, tenant['id'],
|
||||
user['id'], role['id'])
|
||||
self.client.auth_provider.clear_auth()
|
||||
|
||||
|
@ -204,7 +204,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
|||
user['id'],
|
||||
role['id'])
|
||||
non_existent_role = str(uuid.uuid4().hex)
|
||||
self.assertRaises(lib_exc.NotFound, self.client.remove_user_role,
|
||||
self.assertRaises(lib_exc.NotFound, self.client.delete_user_role,
|
||||
tenant['id'], user['id'], non_existent_role)
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
|
@ -216,7 +216,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
|||
user['id'],
|
||||
role['id'])
|
||||
non_existent_tenant = str(uuid.uuid4().hex)
|
||||
self.assertRaises(lib_exc.NotFound, self.client.remove_user_role,
|
||||
self.assertRaises(lib_exc.NotFound, self.client.delete_user_role,
|
||||
non_existent_tenant, user['id'], role['id'])
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
|
|
|
@ -102,7 +102,7 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
|
|||
self._list_assertions(roles, self.fetched_role_ids,
|
||||
self.role['id'])
|
||||
|
||||
self.client.revoke_role_from_user_on_project(
|
||||
self.client.delete_role_from_user_on_project(
|
||||
self.project['id'], self.user_body['id'], self.role['id'])
|
||||
|
||||
@test.idempotent_id('6c9a2940-3625-43a3-ac02-5dcec62ef3bd')
|
||||
|
@ -119,7 +119,7 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
|
|||
self._list_assertions(roles, self.fetched_role_ids,
|
||||
self.role['id'])
|
||||
|
||||
self.client.revoke_role_from_user_on_domain(
|
||||
self.client.delete_role_from_user_on_domain(
|
||||
self.domain['id'], self.user_body['id'], self.role['id'])
|
||||
|
||||
@test.idempotent_id('cbf11737-1904-4690-9613-97bcbb3df1c4')
|
||||
|
@ -149,7 +149,7 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
|
|||
self.assertEqual(len(roles), 1)
|
||||
self.assertEqual(roles[0]['id'], self.role['id'])
|
||||
# Revoke role to group on project
|
||||
self.client.revoke_role_from_group_on_project(
|
||||
self.client.delete_role_from_group_on_project(
|
||||
self.project['id'], self.group_body['id'], self.role['id'])
|
||||
|
||||
@test.idempotent_id('4bf8a70b-e785-413a-ad53-9f91ce02faa7')
|
||||
|
@ -166,7 +166,7 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
|
|||
self._list_assertions(roles, self.fetched_role_ids,
|
||||
self.role['id'])
|
||||
|
||||
self.client.revoke_role_from_group_on_domain(
|
||||
self.client.delete_role_from_group_on_domain(
|
||||
self.domain['id'], self.group_body['id'], self.role['id'])
|
||||
|
||||
@test.idempotent_id('f5654bcc-08c4-4f71-88fe-05d64e06de94')
|
||||
|
|
|
@ -77,7 +77,7 @@ class ImagesMemberTest(base.BaseV2MemberImageTest):
|
|||
{'status': 'accepted'})
|
||||
|
||||
self.assertIn(image_id, self._list_image_ids_as_alt())
|
||||
self.os_img_client.remove_image_member(image_id, self.alt_tenant_id)
|
||||
self.os_img_client.delete_image_member(image_id, self.alt_tenant_id)
|
||||
self.assertNotIn(image_id, self._list_image_ids_as_alt())
|
||||
|
||||
@test.idempotent_id('634dcc3f-f6e2-4409-b8fd-354a0bb25d83')
|
||||
|
@ -103,5 +103,5 @@ class ImagesMemberTest(base.BaseV2MemberImageTest):
|
|||
self.alt_tenant_id,
|
||||
{'status': 'accepted'})
|
||||
self.assertIn(image_id, self._list_image_ids_as_alt())
|
||||
self.os_img_client.remove_image_member(image_id, self.alt_tenant_id)
|
||||
self.os_img_client.delete_image_member(image_id, self.alt_tenant_id)
|
||||
self.assertNotIn(image_id, self._list_image_ids_as_alt())
|
||||
|
|
|
@ -146,7 +146,7 @@ class BaseMessagingTest(test.BaseTestCase):
|
|||
@classmethod
|
||||
def release_claim(cls, claim_uri):
|
||||
"""Wrapper utility that deletes a claim."""
|
||||
resp, body = cls.client.release_claim(claim_uri)
|
||||
resp, body = cls.client.delete_claim(claim_uri)
|
||||
|
||||
return resp, body
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ class TestClaims(base.BaseMessagingTest):
|
|||
claim_uri = resp['location']
|
||||
|
||||
# Release Claim
|
||||
self.client.release_claim(claim_uri)
|
||||
self.client.delete_claim(claim_uri)
|
||||
|
||||
# Delete Claimed message
|
||||
# This will implicitly verify that the claim is deleted.
|
||||
|
|
|
@ -238,7 +238,7 @@ class TempestCleanup(command.Command):
|
|||
id_cl = credentials.AdminManager().identity_client
|
||||
if (self._tenant_exists(tenant_id)):
|
||||
try:
|
||||
id_cl.remove_user_role(tenant_id, self.admin_id,
|
||||
id_cl.delete_user_role(tenant_id, self.admin_id,
|
||||
self.admin_role_id)
|
||||
except Exception as ex:
|
||||
LOG.exception("Failed removing role from tenant which still"
|
||||
|
|
|
@ -32,6 +32,7 @@ mutable_default_args = re.compile(r"^\s*def .+\((.+=\{\}|.+=\[\])")
|
|||
TESTTOOLS_SKIP_DECORATOR = re.compile(r'\s*@testtools\.skip\((.*)\)')
|
||||
METHOD = re.compile(r"^ def .+")
|
||||
METHOD_GET_RESOURCE = re.compile(r"^\s*def (list|show)\_.+")
|
||||
METHOD_DELETE_RESOURCE = re.compile(r"^\s*def delete_.+")
|
||||
CLASS = re.compile(r"^class .+")
|
||||
|
||||
|
||||
|
@ -195,6 +196,32 @@ def get_resources_on_service_clients(logical_line, physical_line, filename,
|
|||
yield (0, msg)
|
||||
|
||||
|
||||
def delete_resources_on_service_clients(logical_line, physical_line, filename,
|
||||
line_number, lines):
|
||||
"""Check that service client names of DELETE should be consistent
|
||||
|
||||
T111
|
||||
"""
|
||||
if not _common_service_clients_check(logical_line, physical_line,
|
||||
filename, 'ignored_list_T111.txt'):
|
||||
return
|
||||
|
||||
for line in lines[line_number:]:
|
||||
if METHOD.match(line) or CLASS.match(line):
|
||||
# the end of a method
|
||||
return
|
||||
|
||||
if 'self.delete(' not in line:
|
||||
continue
|
||||
|
||||
if METHOD_DELETE_RESOURCE.match(logical_line):
|
||||
return
|
||||
|
||||
msg = ("T111: [DELETE /resources/<id>] methods should be "
|
||||
"delete_<resource name>")
|
||||
yield (0, msg)
|
||||
|
||||
|
||||
def factory(register):
|
||||
register(import_no_clients_in_api_and_scenario_tests)
|
||||
register(scenario_tests_need_service_tags)
|
||||
|
@ -205,3 +232,4 @@ def factory(register):
|
|||
register(no_mutable_default_args)
|
||||
register(no_testtools_skip_decorator)
|
||||
register(get_resources_on_service_clients)
|
||||
register(delete_resources_on_service_clients)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
./tempest/services/baremetal/base.py
|
|
@ -278,7 +278,7 @@ class ServersClient(service_client.ServiceClient):
|
|||
self.validate_response(schema.attach_volume, resp, body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def detach_volume(self, server_id, volume_id):
|
||||
def detach_volume(self, server_id, volume_id): # noqa
|
||||
"""Detaches a volume from a server instance."""
|
||||
resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
|
||||
(server_id, volume_id))
|
||||
|
|
|
@ -85,7 +85,7 @@ class IdentityClient(service_client.ServiceClient):
|
|||
body = json.loads(body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def remove_user_role(self, tenant_id, user_id, role_id):
|
||||
def delete_user_role(self, tenant_id, user_id, role_id):
|
||||
"""Removes a role assignment for a user on a tenant."""
|
||||
resp, body = self.delete('/tenants/%s/users/%s/roles/OS-KSADM/%s' %
|
||||
(tenant_id, user_id, role_id))
|
||||
|
|
|
@ -408,14 +408,14 @@ class IdentityV3Client(service_client.ServiceClient):
|
|||
body = json.loads(body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def revoke_role_from_user_on_project(self, project_id, user_id, role_id):
|
||||
def delete_role_from_user_on_project(self, project_id, user_id, role_id):
|
||||
"""Delete role of a user on a project."""
|
||||
resp, body = self.delete('projects/%s/users/%s/roles/%s' %
|
||||
(project_id, user_id, role_id))
|
||||
self.expected_success(204, resp.status)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def revoke_role_from_user_on_domain(self, domain_id, user_id, role_id):
|
||||
def delete_role_from_user_on_domain(self, domain_id, user_id, role_id):
|
||||
"""Delete role of a user on a domain."""
|
||||
resp, body = self.delete('domains/%s/users/%s/roles/%s' %
|
||||
(domain_id, user_id, role_id))
|
||||
|
@ -452,14 +452,14 @@ class IdentityV3Client(service_client.ServiceClient):
|
|||
body = json.loads(body)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def revoke_role_from_group_on_project(self, project_id, group_id, role_id):
|
||||
def delete_role_from_group_on_project(self, project_id, group_id, role_id):
|
||||
"""Delete role of a user on a project."""
|
||||
resp, body = self.delete('projects/%s/groups/%s/roles/%s' %
|
||||
(project_id, group_id, role_id))
|
||||
self.expected_success(204, resp.status)
|
||||
return service_client.ResponseBody(resp, body)
|
||||
|
||||
def revoke_role_from_group_on_domain(self, domain_id, group_id, role_id):
|
||||
def delete_role_from_group_on_domain(self, domain_id, group_id, role_id):
|
||||
"""Delete role of a user on a domain."""
|
||||
resp, body = self.delete('domains/%s/groups/%s/roles/%s' %
|
||||
(domain_id, group_id, role_id))
|
||||
|
|
|
@ -200,7 +200,7 @@ class ImageClientV2(service_client.ServiceClient):
|
|||
self.expected_success(200, resp.status)
|
||||
return service_client.ResponseBody(resp, json.loads(body))
|
||||
|
||||
def remove_image_member(self, image_id, member_id):
|
||||
def delete_image_member(self, image_id, member_id):
|
||||
url = 'v2/images/%s/members/%s' % (image_id, member_id)
|
||||
resp, _ = self.delete(url)
|
||||
self.expected_success(204, resp.status)
|
||||
|
|
|
@ -170,7 +170,7 @@ class MessagingClient(service_client.ServiceClient):
|
|||
self.expected_success(204, resp.status)
|
||||
return resp, body
|
||||
|
||||
def release_claim(self, claim_uri):
|
||||
def delete_claim(self, claim_uri):
|
||||
resp, body = self.delete(claim_uri)
|
||||
self.expected_success(204, resp.status)
|
||||
return resp, body
|
||||
|
|
Loading…
Reference in New Issue