def test_run_command_explosive_cancel_callback(rc): def boom(*args): raise Exception('boom') rc.command = ['sleep','1'] runner = Runner(config=rc, cancel_callback=boom) with pytest.raises(Exception): runner.run()
def test_run_command_explosive_finished_callback(rc): def boom(*args): raise Exception('boom') rc.command = ['pwd'] runner = Runner(config=rc, finished_callback=boom) with pytest.raises(Exception): runner.run()
def test_run_command_ansible_rotate_artifacts(rc): rc.module = "debug" rc.host_pattern = "localhost" rc.prepare() rc.rotate_artifacts = 1 runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0
def test_run_command_job_timeout(rc): rc.command = ['pwd'] rc.job_timeout = 0.0000001 runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'timeout' assert exitcode == 254
def test_run_command_idle_timeout(rc): rc.command = ['sleep', '1'] rc.idle_timeout = 0.0000001 runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'timeout' assert exitcode == 254
def test_run_command_events_missing(rc): rc.command = ['sleep', '1'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 assert list(runner.events) == []
def test_run_command_no_stats(rc): rc.command = ['sleep', '1'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 assert runner.stats is None
def test_run_command_no_stats(rc): rc.command = ['pwd'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 with pytest.raises(AnsibleRunnerException): runner.stats
def test_run_command_events_missing(rc): rc.command = ['pwd'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 with pytest.raises(AnsibleRunnerException): list(runner.events)
def test_run_command_cancel_callback(rc): def cancel(*args): return True rc.command = ['sleep','1'] runner = Runner(config=rc, cancel_callback=cancel) status, exitcode = runner.run() assert status == 'canceled' assert exitcode == 254
def test_verbose_event_created_time(rc): rc.command = ['echo', 'helloworld'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 for event in runner.events: assert 'created' in event, event
def test_run_command_finished_callback(rc): finished_callback = MagicMock() rc.command = ['sleep', '1'] runner = Runner(config=rc, finished_callback=finished_callback) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 finished_callback.assert_called_with(runner)
def test_executable_not_found(rc): rc.command = ['supercalifragilistic'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'failed' assert exitcode == 127 events = list(runner.events) assert len(events) == 1 assert 'The command was not found or was not executable: supercalifragilistic' in events[0]['stdout'] # noqa
def test_run_command_stdout_missing(rc): rc.command = ['sleep', '1'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 os.unlink(os.path.join(runner.config.artifact_dir, 'stdout')) with pytest.raises(AnsibleRunnerException): list(runner.stdout)
def test_set_extra_vars(rc): rc.module = "debug" rc.module_args = "var=test_extra_vars" rc.host_pattern = "localhost" rc.extra_vars = dict(test_extra_vars='hello there') rc.prepare() runner = Runner(config=rc) status, exitcode = runner.run() with open(os.path.join(rc.artifact_dir, 'stdout')) as f: assert 'hello there' in f.read()
def test_run_command_ansible_event_handler_failure(rc): def event_handler(*args): raise IOError() rc.module = "debug" rc.host_pattern = "localhost" rc.prepare() runner = Runner(config=rc, event_handler=event_handler) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0
def test_stdout_file_no_write(rc, runner_mode): rc.command = ['echo', 'hello_world_marker ' ] # workaround bug in stdout handl wrapper rc.runner_mode = runner_mode rc.suppress_output_file = True runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' for filename in ('stdout', 'stderr'): stdout_path = Path(rc.artifact_dir) / filename assert not stdout_path.exists()
def test_run_command_ansible_event_handler(rc): event_handler = MagicMock() status_handler = MagicMock() rc.module = "debug" rc.host_pattern = "localhost" rc.prepare() runner = Runner(config=rc, event_handler=event_handler, status_handler=status_handler) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 event_handler.assert_called() status_handler.assert_called()
def test_run_command_ansible(rc): rc.module = "debug" rc.host_pattern = "localhost" rc.prepare() runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 assert list(runner.events) != [] assert runner.stats != {} assert list(runner.host_events('localhost')) != [] stdout = runner.stdout assert stdout.read() != ""
def test_get_fact_cache(rc): assert os.path.basename(rc.fact_cache) == 'fact_cache' rc.module = "setup" rc.host_pattern = "localhost" rc.prepare() runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 print(rc.cwd) assert os.path.exists(os.path.join(rc.artifact_dir, 'fact_cache')) assert os.path.exists(os.path.join(rc.artifact_dir, 'fact_cache', 'localhost')) data = runner.get_fact_cache('localhost') assert data
def test_set_fact_cache(rc): assert os.path.basename(rc.fact_cache) == 'fact_cache' rc.module = "debug" rc.module_args = "var=message" rc.host_pattern = "localhost" rc.prepare() runner = Runner(config=rc) runner.set_fact_cache('localhost', dict(message='hello there')) status, exitcode = runner.run() assert status == 'successful' assert exitcode == 0 print(rc.cwd) assert os.path.exists(os.path.join(rc.artifact_dir, 'fact_cache')) assert os.path.exists(os.path.join(rc.artifact_dir, 'fact_cache', 'localhost')) data = runner.get_fact_cache('localhost') assert data['message'] == 'hello there'
def test_set_extra_vars(rc): rc.module = "debug" rc.module_args = "var=test_extra_vars" rc.host_pattern = "localhost" rc.extra_vars = dict(test_extra_vars='hello there') rc.prepare() runner = Runner(config=rc) status, exitcode = runner.run() # stdout file can be subject to a race condition for _ in iterate_timeout( 30.0, 'stdout file to be written with "hello there" in it', interval=0.2): with open(os.path.join(rc.artifact_dir, 'stdout')) as f: if 'hello there' in f.read(): break
def test_stdout_file_write(rc, runner_mode): if runner_mode == 'pexpect': pytest.skip( 'Writing to stdout can be flaky, probably due to some pexpect bug') rc.command = ['echo', 'hello_world_marker ' ] # workaround bug in stdout handl wrapper rc.runner_mode = runner_mode runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'successful' stdout_path = Path(rc.artifact_dir) / 'stdout' # poll until we are sure the file has been written to for _ in iterate_timeout(30.0, 'stdout file to be written', interval=0.2): if stdout_path.read_text().strip(): break assert 'hello_world_marker' in stdout_path.read_text() assert list(runner.events) assert 'hello_world_marker' in list(runner.events)[0]['stdout']
def test_run_command_long_running_children(rc): rc.command = ['bash', '-c', "(yes)"] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'timeout' assert exitcode == 254
def test_run_command_long_running(rc): rc.command = ['yes'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'timeout' assert exitcode == 254
def test_run_command_failed(rc): rc.command = ['false'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'failed' assert exitcode == 1
def test_job_timeout(rc): rc.command = ['python', '-c', 'import time; time.sleep(5)'] runner = Runner(config=rc) status, exitcode = runner.run() assert status == 'timeout' assert runner.timed_out is True