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"]
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 == ""
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"}
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"]
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"}
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 == ""
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")
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")