# Try to detect unintended calls of nonexistent mock methods like:
# assert_called_once
# assertCalledOnceWith
+ # assert_has_called
if 'neutron/tests/' in filename:
if '.assert_called_once_with(' in logical_line:
return
- if '.assertcalledonce' in logical_line.lower().replace('_', ''):
+ uncased_line = logical_line.lower().replace('_', '')
+
+ if '.assertcalledonce' in uncased_line:
msg = ("N322: Possible use of no-op mock method. "
"please use assert_called_once_with.")
yield (0, msg)
+ if '.asserthascalled' in uncased_line:
+ msg = ("N322: Possible use of no-op mock method. "
+ "please use assert_has_calls.")
+ yield (0, msg)
+
def check_oslo_namespace_imports(logical_line):
if re.match(oslo_namespace_imports_from_dot, logical_line):
trace_level='warning',
expected_sync=False)
- def _test_sync_state_helper(self, known_networks, active_networks):
+ def _test_sync_state_helper(self, known_net_ids, active_net_ids):
+ active_networks = set(mock.Mock(id=netid) for netid in active_net_ids)
+
with mock.patch(DHCP_PLUGIN) as plug:
mock_plugin = mock.Mock()
mock_plugin.get_active_networks_info.return_value = active_networks
dhcp = dhcp_agent.DhcpAgent(HOSTNAME)
- attrs_to_mock = dict(
- [(a, mock.DEFAULT) for a in
- ['refresh_dhcp_helper', 'disable_dhcp_helper', 'cache']])
+ attrs_to_mock = dict([(a, mock.DEFAULT)
+ for a in ['disable_dhcp_helper', 'cache',
+ 'safe_configure_dhcp_for_network']])
with mock.patch.multiple(dhcp, **attrs_to_mock) as mocks:
- mocks['cache'].get_network_ids.return_value = known_networks
+ mocks['cache'].get_network_ids.return_value = known_net_ids
dhcp.sync_state()
- exp_refresh = [
- mock.call(net_id) for net_id in active_networks]
-
- diff = set(known_networks) - set(active_networks)
+ diff = set(known_net_ids) - set(active_net_ids)
exp_disable = [mock.call(net_id) for net_id in diff]
-
mocks['cache'].assert_has_calls([mock.call.get_network_ids()])
- mocks['refresh_dhcp_helper'].assert_has_called(exp_refresh)
- mocks['disable_dhcp_helper'].assert_has_called(exp_disable)
+ mocks['disable_dhcp_helper'].assert_has_calls(exp_disable)
def test_sync_state_initial(self):
self._test_sync_state_helper([], ['a'])
self._test_sync_state_helper(['b'], ['a'])
def test_sync_state_waitall(self):
- class mockNetwork(object):
- id = '0'
- admin_state_up = True
- subnets = []
-
- def __init__(self, id):
- self.id = id
with mock.patch.object(dhcp_agent.eventlet.GreenPool, 'waitall') as w:
- active_networks = [mockNetwork('1'), mockNetwork('2'),
- mockNetwork('3'), mockNetwork('4'),
- mockNetwork('5')]
- known_networks = ['1', '2', '3', '4', '5']
- self._test_sync_state_helper(known_networks, active_networks)
+ active_net_ids = ['1', '2', '3', '4', '5']
+ known_net_ids = ['1', '2', '3', '4', '5']
+ self._test_sync_state_helper(known_net_ids, active_net_ids)
w.assert_called_once_with()
def test_sync_state_plugin_error(self):
mock.method(1, 2, 3, test='wow')
mock.method.assertCalledOnceWith()
"""
+ fail_code3 = """
+ mock = Mock()
+ mock.method(1, 2, 3, test='wow')
+ mock.method.assert_has_called()
+ """
pass_code = """
mock = Mock()
mock.method(1, 2, 3, test='wow')
mock.method.assert_called_once_with()
"""
+ pass_code2 = """
+ mock = Mock()
+ mock.method(1, 2, 3, test='wow')
+ mock.method.assert_has_calls()
+ """
self.assertEqual(
1, len(list(checks.check_assert_called_once_with(fail_code1,
"neutron/tests/test_assert.py"))))
self.assertEqual(
0, len(list(checks.check_assert_called_once_with(pass_code,
"neutron/tests/test_assert.py"))))
+ self.assertEqual(
+ 1, len(list(checks.check_assert_called_once_with(fail_code3,
+ "neutron/tests/test_assert.py"))))
+ self.assertEqual(
+ 0, len(list(checks.check_assert_called_once_with(pass_code2,
+ "neutron/tests/test_assert.py"))))
def test_check_oslo_namespace_imports(self):
def check(s, fail=True):