def test_start(self, mock_start): m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) worker.start() assert worker.ppid == os.getpid() mock_start.assert_called_once()
def test__return_result(self, mock_client): instance = mock_client.return_value m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) task = bollard.Task(name='task', state='completed') worker.task = task worker._return_result() instance.send.assert_called_once_with(task) instance.close.assert_called_once()
def test_terminate(self, mock_start, mock_os_kill, mock_get_children): mock_get_children.return_value = [222222] m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) worker.is_alive = mock.MagicMock(return_value=True) worker.join = mock.MagicMock() worker._popen = mock.MagicMock() worker._popen.pid = 111111 worker.terminate() mock_os_kill.call_count = 2 mock_os_kill.assert_has_calls(mock.call(111111, bollard.SIGKILL)) mock_os_kill.assert_has_calls(mock.call(222222, bollard.SIGKILL)) worker.join.assert_called_once()
def test__supervisor_parent_crash(self, mock_is_alive, mock_os_kill): m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) worker.terminate = mock.MagicMock() worker._supervisor_ev.set() worker._task_lock = mock.MagicMock() worker.task = None t = threading.Thread(target=worker._supervisor) t.start() time.sleep(2) worker._supervisor_ev.clear() time.sleep(1) assert not t.is_alive() worker.terminate.assert_called_once()
def test__get_task(self, mock_client): instance = mock_client.return_value instance.recv.return_value = ('task') m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) worker._worker_uuid = 'uuid' worker._task_lock = threading.Lock() worker._popen = mock.MagicMock() worker._popen.pid = 111 worker._get_task() assert worker.task == 'task', worker.task assert worker._soft_timeout_called is False instance.send.assert_called_once_with('111:uuid') instance.recv.assert_called_once() instance.close.assert_called_once()
def test__supervisor_ok(self, mock_is_alive, mock_os_kill, mock_datetime): m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) worker.terminate = mock.MagicMock() worker._started_ev.set() worker._task_lock = mock.MagicMock() worker.task = mock.MagicMock() t = threading.Thread(target=worker._supervisor) t.start() time.sleep(4) worker._supervisor_ev.clear() time.sleep(1) assert not t.is_alive() assert not worker.terminate.called assert not mock_os_kill.called assert worker._soft_timeout_called is False
def test__supervisor_task_timeout(self, mock_is_alive, mock_os_kill, mock_timedelta, mock_datetime): m = mock.MagicMock() worker = bollard.Worker(m, m, m, m) worker.terminate = mock.MagicMock() worker._return_result = mock.MagicMock() worker._started_ev.set() worker._supervisor_ev.set() worker._task_lock = mock.MagicMock() worker.task = mock.MagicMock() mock_datetime.strptime.return_value = 0 mock_timedelta.return_value = 0 mock_datetime.utcnow.return_value = 1 t = threading.Thread(target=worker._supervisor) t.start() time.sleep(3) worker._started_ev.clear() worker._supervisor_ev.clear() time.sleep(1) assert not t.is_alive() worker._return_result.assert_called_once() worker.terminate.assert_called_once()