- [N325] Python 3: Do not use xrange.
- [N326] Python 3: do not use basestring.
- [N327] Python 3: do not use dict.iteritems.
+- [N328] Detect wrong usage with assertEqual
Creating Unit Tests
-------------------
reviewers to understand which one is the expected/observed value in non-trivial
assertions. The expected and observed values are also labeled in the output when
the assertion fails.
+* Prefer specific assertions (assertTrue, assertFalse) over assertEqual(True/False, observed).
* Don't write tests that don't test the intended code. This might seem silly but
it's easy to do with a lot of mocks in place. Ensure that your tests break as
expected before your code change.
yield(0, msg)
+def check_asserttrue(logical_line, filename):
+ if 'neutron/tests/' in filename:
+ if re.search(r"assertEqual\(True,.*\)", logical_line):
+ msg = ("N328: Use assertTrue(observed) instead of"
+ "assertEqual(True, observed)")
+ yield (0, msg)
+ if re.search(r"assertEqual\(.*, True\)", logical_line):
+ msg = ("N328: Use assertTrue(observed) instead of"
+ "assertEqual(True, observed)")
+ yield (0, msg)
+
+
def factory(register):
register(validate_log_translations)
register(use_jsonutils)
register(check_python3_xrange)
register(check_no_basestring)
register(check_python3_no_iteritems)
+ register(check_asserttrue)
service_profile['description'])
self.assertEqual(self.service_profile['metainfo'],
service_profile['metainfo'])
- self.assertEqual(True, service_profile['enabled'])
+ self.assertTrue(service_profile['enabled'])
@test.attr(type='smoke')
@test.idempotent_id('30abb445-0eea-472e-bd02-8649f54a5968')
self.assertEqual(self.flavor['id'], flavor['id'])
self.assertEqual(self.flavor['description'], flavor['description'])
self.assertEqual(self.flavor['name'], flavor['name'])
- self.assertEqual(True, flavor['enabled'])
+ self.assertTrue(flavor['enabled'])
@test.attr(type='smoke')
@test.idempotent_id('e2fb2f8c-45bf-429a-9f17-171c70444612')
tenant_context = context.Context('test_user', 'test_tenant_id', False)
extension_manager.extend_resources(self.api_version,
attributes.RESOURCE_ATTRIBUTE_MAP)
- self.assertEqual(self._check_external_router_policy(admin_context),
- True)
+ self.assertTrue(self._check_external_router_policy(admin_context))
self.assertEqual(self._check_external_router_policy(tenant_context),
False)
attributes.RESOURCE_ATTRIBUTE_MAP)
admin_context = context.get_admin_context()
tenant_context = context.Context('test_user', 'test_tenant_id', False)
- self.assertEqual(self._check_external_router_policy(admin_context),
- True)
- self.assertEqual(self._check_external_router_policy(tenant_context),
- True)
+ self.assertTrue(self._check_external_router_policy(admin_context))
+ self.assertTrue(self._check_external_router_policy(tenant_context))
def tearDown(self):
policy.reset()
agent = l3_agent.L3NATAgentWithStateReport(host=HOSTNAME,
conf=self.conf)
- self.assertEqual(agent.agent_state['start_flag'], True)
+ self.assertTrue(agent.agent_state['start_flag'])
use_call_arg = agent.use_call
agent.after_start()
report_state.assert_called_once_with(agent.context,
self.assertIn('network', res)
net = res['network']
self.assertEqual(net['id'], net_id)
- self.assertEqual(net['admin_state_up'], True)
+ self.assertTrue(net['admin_state_up'])
self.assertEqual(net['status'], "ACTIVE")
def test_create_no_keystone_env(self):
port_security_enabled=True,
allowed_address_pairs=address_pairs)
port = self.deserialize(self.fmt, res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self.assertEqual(port['port'][addr_pair.ADDRESS_PAIRS],
address_pairs)
self._delete('ports', port['port']['id'])
'device_id': port['port']['device_id']}}
req = self.new_update_request('ports', data, port['port']['id'])
res = self.deserialize(self.fmt, req.get_response(self.api))
- self.assertEqual(res['port']['admin_state_up'], True)
+ self.assertTrue(res['port']['admin_state_up'])
def test_update_device_id_null(self):
with self.port() as port:
ctx = context.Context('', '', is_admin=True)
subnet_db = manager.NeutronManager.get_plugin().get_subnet(
ctx, subnet['subnet']['id'])
- self.assertEqual(subnet_db['shared'], True)
+ self.assertTrue(subnet_db['shared'])
def test_update_network_set_not_shared_single_tenant(self):
with self.network(shared=True) as network:
def test_create_external_network_admin_succeeds(self):
with self.network(router__external=True) as ext_net:
- self.assertEqual(ext_net['network'][external_net.EXTERNAL],
- True)
+ self.assertTrue(ext_net['network'][external_net.EXTERNAL])
def test_delete_network_check_disassociated_floatingips(self):
with mock.patch.object(manager.NeutronManager,
router = res['router']
self.assertEqual(router['id'], router_id)
self.assertEqual(router['status'], "ACTIVE")
- self.assertEqual(router['admin_state_up'], True)
+ self.assertTrue(router['admin_state_up'])
def test_router_list(self):
router_id = _uuid()
def test_create_network_with_portsecurity_mac(self):
res = self._create_network('json', 'net1', True)
net = self.deserialize('json', res)
- self.assertEqual(net['network'][psec.PORTSECURITY], True)
+ self.assertTrue(net['network'][psec.PORTSECURITY])
def test_create_network_with_portsecurity_false(self):
res = self._create_network('json', 'net1', True,
res = self._create_network('json', 'net1', True,
port_security_enabled='True')
net = self.deserialize('json', res)
- self.assertEqual(net['network'][psec.PORTSECURITY], True)
+ self.assertTrue(net['network'][psec.PORTSECURITY])
update_net = {'network': {psec.PORTSECURITY: False}}
req = self.new_update_request('networks', update_net,
net['network']['id'])
with self.network() as net:
res = self._create_port('json', net['network']['id'])
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self._delete('ports', port['port']['id'])
def test_create_port_passing_true(self):
net = self.deserialize('json', res)
res = self._create_port('json', net['network']['id'])
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self._delete('ports', port['port']['id'])
def test_create_port_on_port_security_false_network(self):
arg_list=('port_security_enabled',),
port_security_enabled=True)
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self._delete('ports', port['port']['id'])
def test_create_port_fails_with_secgroup_and_port_security_false(self):
with self.subnet(network=net):
res = self._create_port('json', net['network']['id'])
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self.assertEqual(len(port['port'][ext_sg.SECURITYGROUPS]), 1)
self._delete('ports', port['port']['id'])
port_security_enabled=True,
security_groups=[security_group_id])
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self.assertEqual(port['port']['security_groups'], [security_group_id])
self._delete('ports', port['port']['id'])
with self.subnet(network=net):
res = self._create_port('json', net['network']['id'])
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
update_port = {'port': {psec.PORTSECURITY: False}}
req = self.new_update_request('ports', update_port,
arg_list=('port_security_enabled',),
port_security_enabled=True)
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
# remove security group on port
update_port = {'port': {ext_sg.SECURITYGROUPS: None,
arg_list=('port_security_enabled',),
port_security_enabled=True)
port = self.deserialize('json', res)
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
# remove security group on port
update_port = {'port': {ext_sg.SECURITYGROUPS: None,
port['port']['id'])
port = self.deserialize('json', req.get_response(self.api))
- self.assertEqual(port['port'][psec.PORTSECURITY], True)
+ self.assertTrue(port['port'][psec.PORTSECURITY])
self.assertEqual(len(port['port'][ext_sg.SECURITYGROUPS]), 1)
self._delete('ports', port['port']['id'])
res = self.deserialize(self.fmt, req.get_response(self.api))
self.assertEqual(net['network']['name'],
res['network']['name'])
- self.assertEqual(True, res['network'][vlt.VLANTRANSPARENT])
+ self.assertTrue(res['network'][vlt.VLANTRANSPARENT])
def test_network_create_with_bad_vlan_transparent_attr(self):
vlantrans = {'vlan_transparent': "abc"}
f = checks.check_python3_no_iteritems
self.assertLineFails(f, "d.iteritems()")
self.assertLinePasses(f, "six.iteritems(d)")
+
+ def test_asserttrue(self):
+ fail_code1 = """
+ test_bool = True
+ self.assertEqual(True, test_bool)
+ """
+ fail_code2 = """
+ test_bool = True
+ self.assertEqual(test_bool, True)
+ """
+ pass_code = """
+ test_bool = True
+ self.assertTrue(test_bool)
+ """
+ self.assertEqual(
+ 1, len(list(checks.check_asserttrue(fail_code1,
+ "neutron/tests/test_assert.py"))))
+ self.assertEqual(
+ 1, len(list(checks.check_asserttrue(fail_code2,
+ "neutron/tests/test_assert.py"))))
+ self.assertEqual(
+ 0, len(list(checks.check_asserttrue(pass_code,
+ "neutron/tests/test_assert.py"))))
cfg.CONF.set_override('enable_distributed_routing', True,
group='AGENT')
cfgmap = self.mod_agent.create_agent_config_map(cfg.CONF)
- self.assertEqual(cfgmap['enable_distributed_routing'], True)
+ self.assertTrue(cfgmap['enable_distributed_routing'])
class TestOvsNeutronAgent(object):
self.assertEqual(response.status, '200 OK')
self.assertEqual(self.context.roles, ['role1', 'role2', 'role3',
'role4', 'role5', 'AdMiN'])
- self.assertEqual(self.context.is_admin, True)
+ self.assertTrue(self.context.is_admin)
def test_with_user_tenant_name(self):
self.request.headers['X_PROJECT_ID'] = 'testtenantid'
def test_enforce_good_action(self):
action = "example:allowed"
result = policy.enforce(self.context, action, self.target)
- self.assertEqual(result, True)
+ self.assertTrue(result)
@mock.patch.object(urlrequest, 'urlopen',
return_value=six.StringIO("True"))
action = "example:get_http"
target = {}
result = policy.enforce(self.context, action, target)
- self.assertEqual(result, True)
+ self.assertTrue(result)
def test_enforce_http_false(self):
context, action, target)
else:
result = policy.enforce(context, action, target)
- self.assertEqual(result, True)
+ self.assertTrue(result)
def _test_nonadmin_action_on_attr(self, action, attr, value,
exception=None, **kwargs):
if kwargs:
target.update(kwargs)
result = policy.enforce(admin_context, action, target)
- self.assertEqual(result, True)
+ self.assertTrue(result)
def test_enforce_adminonly_attribute_create(self):
self._test_enforce_adminonly_attribute('create_network')
action = "create_" + FAKE_RESOURCE_NAME
target = {'tenant_id': 'fake', 'attr': {'sub_attr_1': 'x'}}
result = policy.enforce(self.context, action, target, None)
- self.assertEqual(result, True)
+ self.assertTrue(result)
def test_enforce_admin_only_subattribute(self):
action = "create_" + FAKE_RESOURCE_NAME
'sub_attr_2': 'y'}}
result = policy.enforce(context.get_admin_context(),
action, target, None)
- self.assertEqual(result, True)
+ self.assertTrue(result)
def test_enforce_admin_only_subattribute_nonadminctx_returns_403(self):
action = "create_" + FAKE_RESOURCE_NAME