def test_loop_reload_pidchange_signals(self, open_mock, process_mock, sleep_mock): proc1 = MagicMock() proc2 = MagicMock() proc1.pid = 123 proc2.pid = 456 h = Herder() open_mock.return_value.read.return_value = '123\n' process_mock.return_value = proc1 ret = h._loop_inner() assert_equal(ret, True) # Simulate SIGHUP h._handle_HUP(signal.SIGHUP, None) open_mock.return_value.read.return_value = '456\n' process_mock.return_value = proc2 ret = h._loop_inner() assert_equal(ret, True) sleep_mock.assert_any_call(120) # Check for the default overlap expected_calls = [call.send_signal(signal.SIGUSR2), call.send_signal(signal.SIGWINCH), call.send_signal(signal.SIGQUIT)] assert_equal(proc1.mock_calls, expected_calls)
def test_loop_nonexistent_pidfile_terminating(self, open_mock, sleep_mock): def _fail(): raise IOError() open_mock.return_value.read.side_effect = _fail h = Herder() h.terminating = True assert_equal(h._loop_inner(), False)
def test_configurable_overlap(self, open_mock, process_mock, sleep_mock): h = Herder(overlap=17) # Set up an initial dummy master process for the herder to kill later open_mock.return_value.read.return_value = '123\n' process_mock.return_value = MagicMock(pid=123) h._loop_inner() # Simulate a reloaded Unicorn open_mock.return_value.read.return_value = '456\n' process_mock.return_value = MagicMock(pid=456) # Simulate SIGHUP, so the Herder thinks it's reloading h._handle_HUP(signal.SIGHUP, None) h._loop_inner() sleep_mock.assert_any_call(17)
def test_loop_detects_pidchange(self, open_mock, process_mock, sleep_mock): proc1 = MagicMock() proc2 = MagicMock() proc1.pid = 123 proc2.pid = 456 h = Herder() open_mock.return_value.read.return_value = '123\n' process_mock.return_value = proc1 ret = h._loop_inner() assert_equal(ret, True) open_mock.return_value.read.return_value = '456\n' process_mock.return_value = proc2 ret = h._loop_inner() assert_equal(ret, True) expected_calls = [] assert_equal(proc1.mock_calls, expected_calls)
def test_loop_valid_pid(self, open_mock, process_mock, sleep_mock): open_mock.return_value.read.return_value = '123\n' h = Herder() ret = h._loop_inner() assert_equal(ret, True) process_mock.assert_called_once_with(123)