def test_find_connectable_master_happy_path(mock_check_ssh_and_sudo_on_master): masters = [ '192.0.2.1', '192.0.2.2', '192.0.2.3', ] timeout = 6.0 mock_check_ssh_and_sudo_on_master.return_value = (True, None) actual = utils.find_connectable_master(masters) expected = (masters[0], None) assert mock_check_ssh_and_sudo_on_master.call_count == 1 mock_check_ssh_and_sudo_on_master.assert_called_once_with(masters[0], timeout=timeout) assert actual == expected
def test_find_connectable_master_all_failures(mock_check_ssh_and_sudo_on_master): masters = [ '192.0.2.1', '192.0.2.2', '192.0.2.3', ] timeout = 6.0 mock_check_ssh_and_sudo_on_master.return_value = (255, "timeout") actual = utils.find_connectable_master(masters) assert mock_check_ssh_and_sudo_on_master.call_count == 3 mock_check_ssh_and_sudo_on_master.assert_any_call((masters[0]), timeout=timeout) mock_check_ssh_and_sudo_on_master.assert_any_call((masters[1]), timeout=timeout) mock_check_ssh_and_sudo_on_master.assert_any_call((masters[2]), timeout=timeout) assert actual[0] is None assert 'timeout' in actual[1]
def test_find_connectable_master_one_failure(mock_check_ssh_and_sudo_on_master): masters = [ '192.0.2.1', '192.0.2.2', '192.0.2.3', ] timeout = 6.0 # iter() is a workaround # (http://lists.idyll.org/pipermail/testing-in-python/2013-April/005527.html) # for a bug in mock (http://bugs.python.org/issue17826) create_connection_side_effects = iter([ (False, "something bad"), (True, 'unused'), (True, 'unused'), ]) mock_check_ssh_and_sudo_on_master.side_effect = create_connection_side_effects mock_check_ssh_and_sudo_on_master.return_value = True actual = utils.find_connectable_master(masters) assert mock_check_ssh_and_sudo_on_master.call_count == 2 mock_check_ssh_and_sudo_on_master.assert_any_call(masters[0], timeout=timeout) mock_check_ssh_and_sudo_on_master.assert_any_call(masters[1], timeout=timeout) assert actual == ('192.0.2.2', None)