def test_long_running_slow_stopping(self, popen, sleep): proc = popen.return_value proc.poll.return_value = None proc.wait.side_effect = [ subprocess.TimeoutExpired('gogo', 2), lambda *_: True] runner('gogo', stop_event=make_event(is_set=True)) self.assertTrue(proc.kill.called)
def test_long_running_but_quick_stopping(self, popen, sleep): proc = popen.return_value proc.poll.return_value = None proc.wait.return_value = 0 runner('gogo', stop_event=make_event(is_set=True)) proc.send_signal.assert_called_with(signal.SIGINT) self.assertEqual(popen.return_value.send_signal.call_count, 1)
def _short_cmd(self, popen, returncode): proc = popen.return_value proc.poll.return_value = True # command completed proc.returncode = returncode stop = threading.Event() lines = [] runner('gogo', stop_event=stop, log=lines.append) return lines
def test_long_command_no_status_output(self, popen, sleep): proc = popen.return_value proc.returncode = 1 # FIXME: what's the real exit code for a SIGKILL? proc.poll.return_value = False # command not completed proc.wait.side_effect = [ subprocess.TimeoutExpired('gogo', 2), lambda *_: True] log_mock = MagicMock() runner('gogo', stop_event=make_event(is_set=True), log=log_mock) self.assertEqual(log_mock.call_count, 4) # calls to add in spacing