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_role = self.client.assign_user_role(tenant['id'],
|
||||||
user['id'],
|
user['id'],
|
||||||
role['id'])['role']
|
role['id'])['role']
|
||||||
self.client.remove_user_role(tenant['id'], user['id'],
|
self.client.delete_user_role(tenant['id'], user['id'],
|
||||||
user_role['id'])
|
user_role['id'])
|
||||||
|
|
||||||
@test.idempotent_id('262e1e3e-ed71-4edd-a0e5-d64e83d66d05')
|
@test.idempotent_id('262e1e3e-ed71-4edd-a0e5-d64e83d66d05')
|
||||||
|
|
|
@ -177,7 +177,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
||||||
user['id'],
|
user['id'],
|
||||||
role['id'])
|
role['id'])
|
||||||
self.assertRaises(lib_exc.Forbidden,
|
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'])
|
tenant['id'], user['id'], role['id'])
|
||||||
|
|
||||||
@test.attr(type=['negative'])
|
@test.attr(type=['negative'])
|
||||||
|
@ -191,7 +191,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
||||||
token = self.client.auth_provider.get_token()
|
token = self.client.auth_provider.get_token()
|
||||||
self.client.delete_token(token)
|
self.client.delete_token(token)
|
||||||
self.assertRaises(lib_exc.Unauthorized,
|
self.assertRaises(lib_exc.Unauthorized,
|
||||||
self.client.remove_user_role, tenant['id'],
|
self.client.delete_user_role, tenant['id'],
|
||||||
user['id'], role['id'])
|
user['id'], role['id'])
|
||||||
self.client.auth_provider.clear_auth()
|
self.client.auth_provider.clear_auth()
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
||||||
user['id'],
|
user['id'],
|
||||||
role['id'])
|
role['id'])
|
||||||
non_existent_role = str(uuid.uuid4().hex)
|
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)
|
tenant['id'], user['id'], non_existent_role)
|
||||||
|
|
||||||
@test.attr(type=['negative'])
|
@test.attr(type=['negative'])
|
||||||
|
@ -216,7 +216,7 @@ class RolesNegativeTestJSON(base.BaseIdentityV2AdminTest):
|
||||||
user['id'],
|
user['id'],
|
||||||
role['id'])
|
role['id'])
|
||||||
non_existent_tenant = str(uuid.uuid4().hex)
|
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'])
|
non_existent_tenant, user['id'], role['id'])
|
||||||
|
|
||||||
@test.attr(type=['negative'])
|
@test.attr(type=['negative'])
|
||||||
|
|
|
@ -102,7 +102,7 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
|
||||||
self._list_assertions(roles, self.fetched_role_ids,
|
self._list_assertions(roles, self.fetched_role_ids,
|
||||||
self.role['id'])
|
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'])
|
self.project['id'], self.user_body['id'], self.role['id'])
|
||||||
|
|
||||||
@test.idempotent_id('6c9a2940-3625-43a3-ac02-5dcec62ef3bd')
|
@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._list_assertions(roles, self.fetched_role_ids,
|
||||||
self.role['id'])
|
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'])
|
self.domain['id'], self.user_body['id'], self.role['id'])
|
||||||
|
|
||||||
@test.idempotent_id('cbf11737-1904-4690-9613-97bcbb3df1c4')
|
@test.idempotent_id('cbf11737-1904-4690-9613-97bcbb3df1c4')
|
||||||
|
@ -149,7 +149,7 @@ class RolesV3TestJSON(base.BaseIdentityV3AdminTest):
|
||||||
self.assertEqual(len(roles), 1)
|
self.assertEqual(len(roles), 1)
|
||||||
self.assertEqual(roles[0]['id'], self.role['id'])
|
self.assertEqual(roles[0]['id'], self.role['id'])
|
||||||
# Revoke role to group on project
|
# 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'])
|
self.project['id'], self.group_body['id'], self.role['id'])
|
||||||
|
|
||||||
@test.idempotent_id('4bf8a70b-e785-413a-ad53-9f91ce02faa7')
|
@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._list_assertions(roles, self.fetched_role_ids,
|
||||||
self.role['id'])
|
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'])
|
self.domain['id'], self.group_body['id'], self.role['id'])
|
||||||
|
|
||||||
@test.idempotent_id('f5654bcc-08c4-4f71-88fe-05d64e06de94')
|
@test.idempotent_id('f5654bcc-08c4-4f71-88fe-05d64e06de94')
|
||||||
|
|
|
@ -77,7 +77,7 @@ class ImagesMemberTest(base.BaseV2MemberImageTest):
|
||||||
{'status': 'accepted'})
|
{'status': 'accepted'})
|
||||||
|
|
||||||
self.assertIn(image_id, self._list_image_ids_as_alt())
|
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())
|
self.assertNotIn(image_id, self._list_image_ids_as_alt())
|
||||||
|
|
||||||
@test.idempotent_id('634dcc3f-f6e2-4409-b8fd-354a0bb25d83')
|
@test.idempotent_id('634dcc3f-f6e2-4409-b8fd-354a0bb25d83')
|
||||||
|
@ -103,5 +103,5 @@ class ImagesMemberTest(base.BaseV2MemberImageTest):
|
||||||
self.alt_tenant_id,
|
self.alt_tenant_id,
|
||||||
{'status': 'accepted'})
|
{'status': 'accepted'})
|
||||||
self.assertIn(image_id, self._list_image_ids_as_alt())
|
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())
|
self.assertNotIn(image_id, self._list_image_ids_as_alt())
|
||||||
|
|
|
@ -146,7 +146,7 @@ class BaseMessagingTest(test.BaseTestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def release_claim(cls, claim_uri):
|
def release_claim(cls, claim_uri):
|
||||||
"""Wrapper utility that deletes a claim."""
|
"""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
|
return resp, body
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ class TestClaims(base.BaseMessagingTest):
|
||||||
claim_uri = resp['location']
|
claim_uri = resp['location']
|
||||||
|
|
||||||
# Release Claim
|
# Release Claim
|
||||||
self.client.release_claim(claim_uri)
|
self.client.delete_claim(claim_uri)
|
||||||
|
|
||||||
# Delete Claimed message
|
# Delete Claimed message
|
||||||
# This will implicitly verify that the claim is deleted.
|
# This will implicitly verify that the claim is deleted.
|
||||||
|
|
|
@ -238,7 +238,7 @@ class TempestCleanup(command.Command):
|
||||||
id_cl = credentials.AdminManager().identity_client
|
id_cl = credentials.AdminManager().identity_client
|
||||||
if (self._tenant_exists(tenant_id)):
|
if (self._tenant_exists(tenant_id)):
|
||||||
try:
|
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)
|
self.admin_role_id)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception("Failed removing role from tenant which still"
|
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\((.*)\)')
|
TESTTOOLS_SKIP_DECORATOR = re.compile(r'\s*@testtools\.skip\((.*)\)')
|
||||||
METHOD = re.compile(r"^ def .+")
|
METHOD = re.compile(r"^ def .+")
|
||||||
METHOD_GET_RESOURCE = re.compile(r"^\s*def (list|show)\_.+")
|
METHOD_GET_RESOURCE = re.compile(r"^\s*def (list|show)\_.+")
|
||||||
|
METHOD_DELETE_RESOURCE = re.compile(r"^\s*def delete_.+")
|
||||||
CLASS = re.compile(r"^class .+")
|
CLASS = re.compile(r"^class .+")
|
||||||
|
|
||||||
|
|
||||||
|
@ -195,6 +196,32 @@ def get_resources_on_service_clients(logical_line, physical_line, filename,
|
||||||
yield (0, msg)
|
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):
|
def factory(register):
|
||||||
register(import_no_clients_in_api_and_scenario_tests)
|
register(import_no_clients_in_api_and_scenario_tests)
|
||||||
register(scenario_tests_need_service_tags)
|
register(scenario_tests_need_service_tags)
|
||||||
|
@ -205,3 +232,4 @@ def factory(register):
|
||||||
register(no_mutable_default_args)
|
register(no_mutable_default_args)
|
||||||
register(no_testtools_skip_decorator)
|
register(no_testtools_skip_decorator)
|
||||||
register(get_resources_on_service_clients)
|
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)
|
self.validate_response(schema.attach_volume, resp, body)
|
||||||
return service_client.ResponseBody(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."""
|
"""Detaches a volume from a server instance."""
|
||||||
resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
|
resp, body = self.delete('servers/%s/os-volume_attachments/%s' %
|
||||||
(server_id, volume_id))
|
(server_id, volume_id))
|
||||||
|
|
|
@ -85,7 +85,7 @@ class IdentityClient(service_client.ServiceClient):
|
||||||
body = json.loads(body)
|
body = json.loads(body)
|
||||||
return service_client.ResponseBody(resp, 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."""
|
"""Removes a role assignment for a user on a tenant."""
|
||||||
resp, body = self.delete('/tenants/%s/users/%s/roles/OS-KSADM/%s' %
|
resp, body = self.delete('/tenants/%s/users/%s/roles/OS-KSADM/%s' %
|
||||||
(tenant_id, user_id, role_id))
|
(tenant_id, user_id, role_id))
|
||||||
|
|
|
@ -408,14 +408,14 @@ class IdentityV3Client(service_client.ServiceClient):
|
||||||
body = json.loads(body)
|
body = json.loads(body)
|
||||||
return service_client.ResponseBody(resp, 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."""
|
"""Delete role of a user on a project."""
|
||||||
resp, body = self.delete('projects/%s/users/%s/roles/%s' %
|
resp, body = self.delete('projects/%s/users/%s/roles/%s' %
|
||||||
(project_id, user_id, role_id))
|
(project_id, user_id, role_id))
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
return service_client.ResponseBody(resp, body)
|
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."""
|
"""Delete role of a user on a domain."""
|
||||||
resp, body = self.delete('domains/%s/users/%s/roles/%s' %
|
resp, body = self.delete('domains/%s/users/%s/roles/%s' %
|
||||||
(domain_id, user_id, role_id))
|
(domain_id, user_id, role_id))
|
||||||
|
@ -452,14 +452,14 @@ class IdentityV3Client(service_client.ServiceClient):
|
||||||
body = json.loads(body)
|
body = json.loads(body)
|
||||||
return service_client.ResponseBody(resp, 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."""
|
"""Delete role of a user on a project."""
|
||||||
resp, body = self.delete('projects/%s/groups/%s/roles/%s' %
|
resp, body = self.delete('projects/%s/groups/%s/roles/%s' %
|
||||||
(project_id, group_id, role_id))
|
(project_id, group_id, role_id))
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
return service_client.ResponseBody(resp, body)
|
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."""
|
"""Delete role of a user on a domain."""
|
||||||
resp, body = self.delete('domains/%s/groups/%s/roles/%s' %
|
resp, body = self.delete('domains/%s/groups/%s/roles/%s' %
|
||||||
(domain_id, group_id, role_id))
|
(domain_id, group_id, role_id))
|
||||||
|
|
|
@ -200,7 +200,7 @@ class ImageClientV2(service_client.ServiceClient):
|
||||||
self.expected_success(200, resp.status)
|
self.expected_success(200, resp.status)
|
||||||
return service_client.ResponseBody(resp, json.loads(body))
|
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)
|
url = 'v2/images/%s/members/%s' % (image_id, member_id)
|
||||||
resp, _ = self.delete(url)
|
resp, _ = self.delete(url)
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
|
|
|
@ -170,7 +170,7 @@ class MessagingClient(service_client.ServiceClient):
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
return resp, body
|
return resp, body
|
||||||
|
|
||||||
def release_claim(self, claim_uri):
|
def delete_claim(self, claim_uri):
|
||||||
resp, body = self.delete(claim_uri)
|
resp, body = self.delete(claim_uri)
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
return resp, body
|
return resp, body
|
||||||
|
|
Loading…
Reference in New Issue