コード例 #1
0
    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()
コード例 #2
0
    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()
コード例 #3
0
    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()
コード例 #4
0
    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()
コード例 #5
0
    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()
コード例 #6
0
    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
コード例 #7
0
    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()