Пример #1
0
def test_interactive_function_success():
    """Ensure the function is called when it passes inspection."""

    def good_function(session):
        return session.run("who")

    runner = Bladerunner()
    mock_hosts = Mock()
    # we need to mock out the interactive_hosts dict b/c dict.values will
    # return a new object every time, making the assert_called_once_with fail
    runner.interactive_hosts = mock_hosts

    map_mock = patch.object(
        base.ThreadPoolExecutor,
        "map",
        return_value=["totes fake"],
    )

    with patch.object(runner, "setup_interactive") as mock_setup:
        with map_mock as mock_map:
            res = runner.run_interactive_function(good_function, "some host")

    mock_setup.assert_called_once_with("some host")
    assert mock_map.call_count == 1
    mock_map.assert_called_once_with(
        good_function,
        mock_hosts.values(),
    )

    assert res == ["totes fake"]
Пример #2
0
def test_run_interactive(capfd):
    """Ensure the calls to run a command on a list of hosts interactively."""

    runner = Bladerunner({"threads": 14})
    fake_result = Mock()
    fake_result.result = Mock(return_value="fake results")

    mock_con = Mock()
    runner.interactive_hosts = {"fake host": mock_con}

    fake_thread = Mock()
    fake_thread.__enter__ = fake_context
    fake_thread.__exit__ = fake_context
    fake_thread.submit = Mock(return_value=fake_result)

    threadpool_mock = patch.object(
        base,
        "ThreadPoolExecutor",
        return_value=fake_thread,
    )

    with patch.object(runner, "setup_interactive") as mock_setup:
        with threadpool_mock as mock_threadpool:
            runner.run_interactive("fake cmd", "fake host")

    mock_setup.assert_called_once_with("fake host")
    mock_threadpool.assert_called_once_with(max_workers=14)

    stdout, stderr = capfd.readouterr()
    assert stdout == "fake host: fake results\n"
    assert stderr == ""
Пример #3
0
def test_run_interactive_returns():
    """Confirm the dict return when print_results is False."""

    runner = Bladerunner({"threads": 17})
    fake_result = Mock()
    fake_result.result = Mock(return_value="some result")

    mock_con = Mock()
    runner.interactive_hosts = {"host": mock_con}

    fake_thread = Mock()
    fake_thread.__enter__ = fake_context
    fake_thread.__exit__ = fake_context
    fake_thread.submit = Mock(return_value=fake_result)

    threadpool_mock = patch.object(
        base,
        "ThreadPoolExecutor",
        return_value=fake_thread,
    )

    with patch.object(runner, "setup_interactive") as mock_setup:
        with threadpool_mock as mock_threadpool:
            results = runner.run_interactive("ok", "host", print_results=False)

    mock_setup.assert_called_once_with("host")
    mock_threadpool.assert_called_once_with(max_workers=17)

    assert results == {"host": "some result"}
Пример #4
0
def test_interactive_function_success():
    """Ensure the function is called when it passes inspection."""
    def good_function(session):
        return session.run("who")

    runner = Bladerunner()
    mock_hosts = Mock()
    # we need to mock out the interactive_hosts dict b/c dict.values will
    # return a new object every time, making the assert_called_once_with fail
    runner.interactive_hosts = mock_hosts

    map_mock = patch.object(
        base.ThreadPoolExecutor,
        "map",
        return_value=["totes fake"],
    )

    with patch.object(runner, "setup_interactive") as mock_setup:
        with map_mock as mock_map:
            res = runner.run_interactive_function(good_function, "some host")

    mock_setup.assert_called_once_with("some host")
    assert mock_map.call_count == 1
    mock_map.assert_called_once_with(
        good_function,
        mock_hosts.values(),
    )

    assert res == ["totes fake"]
Пример #5
0
def test_run_interactive_returns():
    """Confirm the dict return when print_results is False."""

    runner = Bladerunner({"threads": 17})
    fake_result = Mock()
    fake_result.result = Mock(return_value="some result")

    mock_con = Mock()
    runner.interactive_hosts = {"host": mock_con}

    fake_thread = Mock()
    fake_thread.__enter__ = fake_context
    fake_thread.__exit__ = fake_context
    fake_thread.submit = Mock(return_value=fake_result)

    threadpool_mock = patch.object(
        base,
        "ThreadPoolExecutor",
        return_value=fake_thread,
    )

    with patch.object(runner, "setup_interactive") as mock_setup:
        with threadpool_mock as mock_threadpool:
            results = runner.run_interactive("ok", "host", print_results=False)

    mock_setup.assert_called_once_with("host")
    mock_threadpool.assert_called_once_with(max_workers=17)

    assert results == {"host": "some result"}
Пример #6
0
def test_run_interactive(capfd):
    """Ensure the calls to run a command on a list of hosts interactively."""

    runner = Bladerunner({"threads": 14})
    fake_result = Mock()
    fake_result.result = Mock(return_value="fake results")

    mock_con = Mock()
    runner.interactive_hosts = {"fake host": mock_con}

    fake_thread = Mock()
    fake_thread.__enter__ = fake_context
    fake_thread.__exit__ = fake_context
    fake_thread.submit = Mock(return_value=fake_result)

    threadpool_mock = patch.object(
        base,
        "ThreadPoolExecutor",
        return_value=fake_thread,
    )

    with patch.object(runner, "setup_interactive") as mock_setup:
        with threadpool_mock as mock_threadpool:
            runner.run_interactive("fake cmd", "fake host")

    mock_setup.assert_called_once_with("fake host")
    mock_threadpool.assert_called_once_with(max_workers=14)

    stdout, stderr = capfd.readouterr()
    assert stdout == "fake host: fake results\n"
    assert stderr == ""
Пример #7
0
def test_end_interactive():
    """Ensure we can remove interactive sessions from teh object pool."""

    runner = Bladerunner()
    mock_host = Mock()
    runner.interactive_hosts = {"fake": mock_host}

    runner.end_interactive("fake")
    mock_host.end.assert_called_once_with()
    assert "fake" not in runner.interactive_hosts

    # running this multiple times shouldn't matter/do anything
    runner.end_interactive("fake")
Пример #8
0
def test_end_interactive():
    """Ensure we can remove interactive sessions from teh object pool."""

    runner = Bladerunner()
    mock_host = Mock()
    runner.interactive_hosts = {"fake": mock_host}

    runner.end_interactive("fake")
    mock_host.end.assert_called_once_with()
    assert "fake" not in runner.interactive_hosts

    # running this multiple times shouldn't matter/do anything
    runner.end_interactive("fake")