Add hacking check for assertEqual HTTP code
Add a hacking check for wrong usage, like: assertEqual(observed.code, webob.exc.HTTP**.code) the correct usage should be: assertEqual(webob.exc.HTTP**.code, observed.code) Change-Id: I8c038bae61c528d30af43e904a9bb98ac4cd4d3a
This commit is contained in:
parent
eee37a86a5
commit
0f50d8c06f
@ -22,6 +22,8 @@ Neutron Specific Commandments
|
|||||||
- [N330] Use assertEqual(*empty*, observed) instead of
|
- [N330] Use assertEqual(*empty*, observed) instead of
|
||||||
assertEqual(observed, *empty*)
|
assertEqual(observed, *empty*)
|
||||||
- [N331] Detect wrong usage with assertTrue(isinstance()).
|
- [N331] Detect wrong usage with assertTrue(isinstance()).
|
||||||
|
- [N332] Use assertEqual(expected_http_code, observed_http_code) instead of
|
||||||
|
assertEqual(observed_http_code, expected_http_code).
|
||||||
|
|
||||||
Creating Unit Tests
|
Creating Unit Tests
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -228,6 +228,15 @@ def check_assertisinstance(logical_line, filename):
|
|||||||
yield (0, msg)
|
yield (0, msg)
|
||||||
|
|
||||||
|
|
||||||
|
def check_assertequal_for_httpcode(logical_line, filename):
|
||||||
|
msg = ("N332: Use assertEqual(expected_http_code, observed_http_code) "
|
||||||
|
"instead of assertEqual(observed_http_code, expected_http_code)")
|
||||||
|
if 'neutron/tests/' in filename:
|
||||||
|
if re.search(r"assertEqual\(\s*[^,]*,[^,]*HTTP[^\.]*\.code\s*\)",
|
||||||
|
logical_line):
|
||||||
|
yield (0, msg)
|
||||||
|
|
||||||
|
|
||||||
def factory(register):
|
def factory(register):
|
||||||
register(validate_log_translations)
|
register(validate_log_translations)
|
||||||
register(use_jsonutils)
|
register(use_jsonutils)
|
||||||
@ -243,3 +252,4 @@ def factory(register):
|
|||||||
register(check_assertfalse)
|
register(check_assertfalse)
|
||||||
register(check_assertempty)
|
register(check_assertempty)
|
||||||
register(check_assertisinstance)
|
register(check_assertisinstance)
|
||||||
|
register(check_assertequal_for_httpcode)
|
||||||
|
@ -224,7 +224,7 @@ class SGServerRpcCallBackTestCase(test_sg.SecurityGroupDBTestCase):
|
|||||||
rule2['security_group_rule']]}
|
rule2['security_group_rule']]}
|
||||||
res = self._create_security_group_rule(self.fmt, rules)
|
res = self._create_security_group_rule(self.fmt, rules)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)
|
self.assertEqual(webob.exc.HTTPCreated.code, res.status_int)
|
||||||
|
|
||||||
res1 = self._create_port(
|
res1 = self._create_port(
|
||||||
self.fmt, n['network']['id'],
|
self.fmt, n['network']['id'],
|
||||||
@ -396,7 +396,7 @@ class SGServerRpcCallBackTestCase(test_sg.SecurityGroupDBTestCase):
|
|||||||
rule2['security_group_rule']]}
|
rule2['security_group_rule']]}
|
||||||
res = self._create_security_group_rule(self.fmt, rules)
|
res = self._create_security_group_rule(self.fmt, rules)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)
|
self.assertEqual(webob.exc.HTTPCreated.code, res.status_int)
|
||||||
|
|
||||||
res1 = self._create_port(
|
res1 = self._create_port(
|
||||||
self.fmt, n['network']['id'],
|
self.fmt, n['network']['id'],
|
||||||
@ -446,7 +446,7 @@ class SGServerRpcCallBackTestCase(test_sg.SecurityGroupDBTestCase):
|
|||||||
'security_group_rules': [rule1['security_group_rule']]}
|
'security_group_rules': [rule1['security_group_rule']]}
|
||||||
res = self._create_security_group_rule(self.fmt, rules)
|
res = self._create_security_group_rule(self.fmt, rules)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)
|
self.assertEqual(webob.exc.HTTPCreated.code, res.status_int)
|
||||||
|
|
||||||
res1 = self._create_port(
|
res1 = self._create_port(
|
||||||
self.fmt, n['network']['id'],
|
self.fmt, n['network']['id'],
|
||||||
@ -567,7 +567,7 @@ class SGServerRpcCallBackTestCase(test_sg.SecurityGroupDBTestCase):
|
|||||||
rule2['security_group_rule']]}
|
rule2['security_group_rule']]}
|
||||||
res = self._create_security_group_rule(self.fmt, rules)
|
res = self._create_security_group_rule(self.fmt, rules)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)
|
self.assertEqual(webob.exc.HTTPCreated.code, res.status_int)
|
||||||
|
|
||||||
dhcp_port = self._create_port(
|
dhcp_port = self._create_port(
|
||||||
self.fmt, n['network']['id'],
|
self.fmt, n['network']['id'],
|
||||||
|
@ -215,7 +215,7 @@ class ResourceTestCase(base.BaseTestCase):
|
|||||||
'format': 'json'})}
|
'format': 'json'})}
|
||||||
|
|
||||||
res = resource.get('', extra_environ=environ, expect_errors=True)
|
res = resource.get('', extra_environ=environ, expect_errors=True)
|
||||||
self.assertEqual(res.status_int, exc.HTTPGatewayTimeout.code)
|
self.assertEqual(exc.HTTPGatewayTimeout.code, res.status_int)
|
||||||
self.assertIn(msg_translation,
|
self.assertIn(msg_translation,
|
||||||
str(wsgi.JSONDeserializer().deserialize(res.body)))
|
str(wsgi.JSONDeserializer().deserialize(res.body)))
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ class NeutronDbPluginV2TestCase(testlib_api.WebTestCase):
|
|||||||
|
|
||||||
def _validate_behavior_on_bulk_success(self, res, collection,
|
def _validate_behavior_on_bulk_success(self, res, collection,
|
||||||
names=['test_0', 'test_1']):
|
names=['test_0', 'test_1']):
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPCreated.code)
|
self.assertEqual(webob.exc.HTTPCreated.code, res.status_int)
|
||||||
items = self.deserialize(self.fmt, res)[collection]
|
items = self.deserialize(self.fmt, res)[collection]
|
||||||
self.assertEqual(len(items), 2)
|
self.assertEqual(len(items), 2)
|
||||||
self.assertEqual(items[0]['name'], 'test_0')
|
self.assertEqual(items[0]['name'], 'test_0')
|
||||||
@ -1674,8 +1674,8 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s
|
|||||||
'ip_address': '2607:f0d0:1002:51::5'}]}
|
'ip_address': '2607:f0d0:1002:51::5'}]}
|
||||||
net_id = subnet['subnet']['network_id']
|
net_id = subnet['subnet']['network_id']
|
||||||
res = self._create_port(self.fmt, net_id=net_id, **kwargs)
|
res = self._create_port(self.fmt, net_id=net_id, **kwargs)
|
||||||
self.assertEqual(res.status_int,
|
self.assertEqual(webob.exc.HTTPClientError.code,
|
||||||
webob.exc.HTTPClientError.code)
|
res.status_int)
|
||||||
|
|
||||||
@mock.patch.object(non_ipam.IpamNonPluggableBackend,
|
@mock.patch.object(non_ipam.IpamNonPluggableBackend,
|
||||||
'_allocate_specific_ip')
|
'_allocate_specific_ip')
|
||||||
|
@ -667,7 +667,7 @@ class L3NatTestCaseBase(L3NatTestCaseMixin):
|
|||||||
self.fmt, _uuid(), arg_list=('external_gateway_info',),
|
self.fmt, _uuid(), arg_list=('external_gateway_info',),
|
||||||
set_context=True, external_gateway_info=ext_info
|
set_context=True, external_gateway_info=ext_info
|
||||||
)
|
)
|
||||||
self.assertEqual(res.status_int, exc.HTTPForbidden.code)
|
self.assertEqual(exc.HTTPForbidden.code, res.status_int)
|
||||||
|
|
||||||
def test_router_list(self):
|
def test_router_list(self):
|
||||||
with self.router() as v1, self.router() as v2, self.router() as v3:
|
with self.router() as v1, self.router() as v2, self.router() as v3:
|
||||||
|
@ -849,7 +849,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
remote_group_id)
|
remote_group_id)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_bad_security_group_id(self):
|
def test_create_security_group_rule_bad_security_group_id(self):
|
||||||
security_group_id = "4cd70774-cc67-4a87-9b39-7d1db38eb087"
|
security_group_id = "4cd70774-cc67-4a87-9b39-7d1db38eb087"
|
||||||
@ -864,7 +864,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
remote_ip_prefix)
|
remote_ip_prefix)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
self.assertEqual(webob.exc.HTTPNotFound.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_bad_tenant(self):
|
def test_create_security_group_rule_bad_tenant(self):
|
||||||
with self.security_group() as sg:
|
with self.security_group() as sg:
|
||||||
@ -880,7 +880,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
tenant_id='bad_tenant',
|
tenant_id='bad_tenant',
|
||||||
set_context=True)
|
set_context=True)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
self.assertEqual(webob.exc.HTTPNotFound.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_bad_tenant_remote_group_id(self):
|
def test_create_security_group_rule_bad_tenant_remote_group_id(self):
|
||||||
with self.security_group() as sg:
|
with self.security_group() as sg:
|
||||||
@ -901,7 +901,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
tenant_id='bad_tenant',
|
tenant_id='bad_tenant',
|
||||||
set_context=True)
|
set_context=True)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
self.assertEqual(webob.exc.HTTPNotFound.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_bad_tenant_security_group_rule(self):
|
def test_create_security_group_rule_bad_tenant_security_group_rule(self):
|
||||||
with self.security_group() as sg:
|
with self.security_group() as sg:
|
||||||
@ -921,7 +921,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
tenant_id='bad_tenant',
|
tenant_id='bad_tenant',
|
||||||
set_context=True)
|
set_context=True)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
self.assertEqual(webob.exc.HTTPNotFound.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_bad_remote_group_id(self):
|
def test_create_security_group_rule_bad_remote_group_id(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -939,7 +939,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
remote_group_id=remote_group_id)
|
remote_group_id=remote_group_id)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPNotFound.code)
|
self.assertEqual(webob.exc.HTTPNotFound.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_duplicate_rules(self):
|
def test_create_security_group_rule_duplicate_rules(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -953,7 +953,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
self._create_security_group_rule(self.fmt, rule)
|
self._create_security_group_rule(self.fmt, rule)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPConflict.code)
|
self.assertEqual(webob.exc.HTTPConflict.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_min_port_greater_max(self):
|
def test_create_security_group_rule_min_port_greater_max(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -968,8 +968,8 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
'ingress', protocol, '50', '22')
|
'ingress', protocol, '50', '22')
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int,
|
self.assertEqual(webob.exc.HTTPBadRequest.code,
|
||||||
webob.exc.HTTPBadRequest.code)
|
res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_ports_but_no_protocol(self):
|
def test_create_security_group_rule_ports_but_no_protocol(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -981,7 +981,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
sg['security_group']['id'], 'ingress', None, '22', '22')
|
sg['security_group']['id'], 'ingress', None, '22', '22')
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_port_range_min_only(self):
|
def test_create_security_group_rule_port_range_min_only(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -994,7 +994,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
const.PROTO_NAME_TCP, '22', None)
|
const.PROTO_NAME_TCP, '22', None)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_port_range_max_only(self):
|
def test_create_security_group_rule_port_range_max_only(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -1007,7 +1007,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
const.PROTO_NAME_TCP, None, '22')
|
const.PROTO_NAME_TCP, None, '22')
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_icmp_type_too_big(self):
|
def test_create_security_group_rule_icmp_type_too_big(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -1020,7 +1020,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
const.PROTO_NAME_ICMP, '256', None)
|
const.PROTO_NAME_ICMP, '256', None)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_icmp_code_too_big(self):
|
def test_create_security_group_rule_icmp_code_too_big(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -1033,7 +1033,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
const.PROTO_NAME_ICMP, '8', '256')
|
const.PROTO_NAME_ICMP, '8', '256')
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_icmp_with_code_only(self):
|
def test_create_security_group_rule_icmp_with_code_only(self):
|
||||||
name = 'webservers'
|
name = 'webservers'
|
||||||
@ -1047,8 +1047,8 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
const.PROTO_NAME_ICMP, None, code)
|
const.PROTO_NAME_ICMP, None, code)
|
||||||
res = self._create_security_group_rule(self.fmt, rule)
|
res = self._create_security_group_rule(self.fmt, rule)
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int,
|
self.assertEqual(webob.exc.HTTPBadRequest.code,
|
||||||
webob.exc.HTTPBadRequest.code)
|
res.status_int)
|
||||||
|
|
||||||
def test_list_ports_security_group(self):
|
def test_list_ports_security_group(self):
|
||||||
with self.network() as n:
|
with self.network() as n:
|
||||||
@ -1527,7 +1527,7 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
|
|||||||
security_groups=['not_valid'])
|
security_groups=['not_valid'])
|
||||||
|
|
||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, webob.exc.HTTPBadRequest.code)
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
|
||||||
def test_create_security_group_rule_with_specific_id(self):
|
def test_create_security_group_rule_with_specific_id(self):
|
||||||
neutron_context = context.Context('', 'test-tenant')
|
neutron_context = context.Context('', 'test-tenant')
|
||||||
|
@ -260,3 +260,17 @@ class HackingTestCase(base.BaseTestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
0, len(list(checks.check_assertisinstance(pass_code2,
|
0, len(list(checks.check_assertisinstance(pass_code2,
|
||||||
"neutron/tests/test_assert.py"))))
|
"neutron/tests/test_assert.py"))))
|
||||||
|
|
||||||
|
def test_assertequal_for_httpcode(self):
|
||||||
|
fail_code = """
|
||||||
|
self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code)
|
||||||
|
"""
|
||||||
|
pass_code = """
|
||||||
|
self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int)
|
||||||
|
"""
|
||||||
|
self.assertEqual(
|
||||||
|
1, len(list(checks.check_assertequal_for_httpcode(fail_code,
|
||||||
|
"neutron/tests/test_assert.py"))))
|
||||||
|
self.assertEqual(
|
||||||
|
0, len(list(checks.check_assertequal_for_httpcode(pass_code,
|
||||||
|
"neutron/tests/test_assert.py"))))
|
||||||
|
Loading…
Reference in New Issue
Block a user