diff --git a/tests/integration/test_execute.py b/tests/integration/test_execute.py index df2171ec0..6680eb28f 100644 --- a/tests/integration/test_execute.py +++ b/tests/integration/test_execute.py @@ -87,6 +87,35 @@ def test_log_outputs_skips_error_output_in_exception_for_process_with_none_stdou assert not error.value.output +def test_log_outputs_kills_other_processes_when_one_errors(): + flexmock(module.logger).should_receive('log') + flexmock(module).should_receive('exit_code_indicates_error').and_return(True) + flexmock(module).should_receive('command_for_process').and_return('grep') + + process = subprocess.Popen(['grep'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + other_process = subprocess.Popen( + ['watch', 'true'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT + ) + flexmock(module).should_receive('output_buffer_for_process').with_args(process, ()).and_return( + process.stdout + ) + flexmock(module).should_receive('output_buffer_for_process').with_args( + other_process, () + ).and_return(other_process.stdout) + flexmock(other_process).should_receive('kill').once() + + with pytest.raises(subprocess.CalledProcessError) as error: + module.log_outputs( + (process, other_process), + exclude_stdouts=(), + output_log_level=logging.INFO, + borg_local_path='borg', + ) + + assert error.value.returncode == 2 + assert error.value.output + + def test_log_outputs_truncates_long_error_output(): flexmock(module).ERROR_OUTPUT_MAX_LINE_COUNT = 0 flexmock(module.logger).should_receive('log') diff --git a/tests/unit/test_execute.py b/tests/unit/test_execute.py index 7c805d878..97e197ada 100644 --- a/tests/unit/test_execute.py +++ b/tests/unit/test_execute.py @@ -21,6 +21,7 @@ from borgmatic import execute as module (flexmock(args=['grep']), 0, 'borg', False), (flexmock(args=['borg']), 0, 'borg', False), (flexmock(args=['borg1']), 0, 'borg1', False), + (flexmock(args=['borg']), None, None, False), ), ) def test_exit_code_indicates_error_respects_exit_code_and_borg_local_path(