def test_no_timeout(self): """Tests when no timeout is specified.""" common.wait_timeout(mock.Mock(), None) self.assert_n_calls( 0, [self.mock.sleep, self.mock.getpgid, self.mock.killpg])
def test_timeout(self): """Tests when the process must be killed.""" self.proc.poll.return_value = None common.wait_timeout(self.proc, 5) self.mock.kill.assert_called_once_with(self.proc) self.assert_exact_calls(self.mock.sleep, [mock.call(0.5)] * 10)
def test_die_before(self): """Tests when the process exits without needing to be killed.""" self.proc.poll.side_effect = [None, None, None, 1] common.wait_timeout(self.proc, 5) self.mock.kill.assert_called_once_with(self.proc) self.assert_exact_calls(self.mock.sleep, [mock.call(0.5)] * 4)
def test_kill_needed(self): """Tests when the process must be killed.""" self.mock.getpgid.return_value = 345 class ProcMock(object): pid = 1234 def poll(self): return None proc = ProcMock() common.wait_timeout(proc, 5) self.assert_exact_calls(self.mock.killpg, [mock.call(345, 15)]) self.assert_exact_calls(self.mock.getpgid, [mock.call(1234)]) self.assert_n_calls(11, [self.mock.sleep])
def test_kill_not_needed(self): """Tests when the process exits without needing to be killed.""" class ProcMock(object): poll_results = [1, None, None, None] pid = 1234 def poll(self): return self.poll_results.pop() proc = ProcMock() common.wait_timeout(proc, 5) self.assert_n_calls(0, [self.mock.killpg]) self.assert_exact_calls(self.mock.sleep, [mock.call(0.5), mock.call(0.5), mock.call(0.5), mock.call(0.5)])
def test_no_process(self): """Tests when process died maturely.""" error = OSError() error.errno = 3 # No such process. self.mock.killpg.side_effect = error self.mock.getpgid.return_value = 345 class ProcMock(object): pid = 1234 def poll(self): return None proc = ProcMock() common.wait_timeout(proc, 5) self.assert_exact_calls(self.mock.killpg, [mock.call(345, 15)]) self.assert_exact_calls(self.mock.getpgid, [mock.call(1234)]) self.assert_n_calls(10, [self.mock.sleep])
def test_kill_error(self): """Test error when killing.""" error = OSError() error.errno = 4 self.mock.killpg.side_effect = error self.mock.getpgid.return_value = 345 class ProcMock(object): pid = 1234 def poll(self): return None proc = ProcMock() with self.assertRaises(OSError): common.wait_timeout(proc, 5) self.assert_exact_calls(self.mock.killpg, [mock.call(345, 15)]) self.assert_exact_calls(self.mock.getpgid, [mock.call(1234)]) self.assert_n_calls(10, [self.mock.sleep])
def test_ignore_kill_error(self): """Tests ignoring error from killing.""" self.mock.kill.side_effect = Exception() common.wait_timeout(self.proc, 5) self.mock.kill.assert_called_once_with(self.proc)
def test_no_timeout(self): """Test no timeout.""" common.wait_timeout(self.proc, None) self.assertEqual(0, self.mock.sleep.call_count) self.assertEqual(0, self.proc.poll.call_count)