コード例 #1
0
    def _publish_job_events(self, pubsub_channel, pubsub_override=False):
        """Generic job events tests"""

        pubsub = self.conn.pubsub()
        pubsub.subscribe(pubsub_channel)

        q = rq.Queue('foo')
        w = MockArthurWorker([q])

        if pubsub_override:
            w.pubsub_channel = pubsub_channel

        job_a = q.enqueue(mock_sum, task_id=0, a=2, b=3)
        job_b = q.enqueue(mock_failure, task_id=1)

        status = w.work(burst=True)
        self.assertEqual(status, True)

        # Ignore the first messages because it is a
        # subscription notification
        _ = pubsub.get_message()

        # STARTED event for job 'a'
        msg_a = pubsub.get_message()
        event = JobEvent.deserialize(msg_a['data'])
        self.assertEqual(event.job_id, job_a.id)
        self.assertEqual(event.task_id, 0)
        self.assertEqual(event.type, JobEventType.STARTED)
        self.assertEqual(event.payload, None)

        # COMPLETED event for job 'a'
        msg_a = pubsub.get_message()
        event = JobEvent.deserialize(msg_a['data'])
        self.assertEqual(job_a.result, 5)
        self.assertEqual(event.job_id, job_a.id)
        self.assertEqual(event.task_id, 0)
        self.assertEqual(event.type, JobEventType.COMPLETED)
        self.assertEqual(event.payload, 5)

        # STARTED event for job 'b'
        msg_b = pubsub.get_message()
        event = JobEvent.deserialize(msg_b['data'])
        self.assertEqual(event.job_id, job_b.id)
        self.assertEqual(event.task_id, 1)
        self.assertEqual(event.type, JobEventType.STARTED)
        self.assertEqual(event.payload, None)

        # FAILURE event for job 'b'
        msg_b = pubsub.get_message()
        event = JobEvent.deserialize(msg_b['data'])
        self.assertEqual(job_b.result, None)
        self.assertEqual(event.job_id, job_b.id)
        self.assertEqual(event.task_id, 1)
        self.assertEqual(event.type, JobEventType.FAILURE)
        self.assertRegex(event.payload['error'], "Traceback")
        self.assertEqual(event.payload['result'], None)
コード例 #2
0
ファイル: test_worker.py プロジェクト: sduenas/arthur
    def _publish_finished_job_status(self,
                                     pubsub_channel,
                                     skip_pubsub_override=False):
        """Test whether the worker publishes the status of a finished job"""

        pubsub = self.conn.pubsub()
        pubsub.subscribe(pubsub_channel)

        q = rq.Queue('foo')
        w = MockArthurWorker([q])

        if not skip_pubsub_override:
            w.pubsub_channel = pubsub_channel

        job_a = q.enqueue(mock_sum, a=2, b=3)
        job_b = q.enqueue(mock_failure)

        status = w.work(burst=True)
        self.assertEqual(status, True)

        # Ignore the first message because it is a
        # subscription notification
        _ = pubsub.get_message()
        msg_a = pubsub.get_message()
        msg_b = pubsub.get_message()

        event = JobEvent.deserialize(msg_a['data'])
        self.assertEqual(job_a.result, 5)
        self.assertEqual(event.job_id, job_a.id)
        self.assertEqual(event.type, JobEventType.COMPLETED)
        self.assertEqual(event.payload, 5)

        event = JobEvent.deserialize(msg_b['data'])
        self.assertEqual(job_b.result, None)
        self.assertEqual(event.job_id, job_b.id)
        self.assertEqual(event.type, JobEventType.FAILURE)
        self.assertRegex(event.payload, "Traceback")
コード例 #3
0
    def test_serializer(self):
        """Test if an event is properly serialized and deserialized"""

        result = MockJobResult(10, 'mockbackend')
        event_a = JobEvent(JobEventType.COMPLETED, '1', result)

        data = event_a.serialize()
        event = JobEvent.deserialize(data)

        self.assertIsInstance(event, JobEvent)
        self.assertEqual(event.uuid, event_a.uuid)
        self.assertEqual(event.timestamp, event_a.timestamp)
        self.assertEqual(event.type, event_a.type)
        self.assertEqual(event.job_id, event_a.job_id)

        payload = event.payload
        self.assertIsInstance(payload, MockJobResult)
        self.assertEqual(payload.result, result.result)
        self.assertEqual(payload.category, result.category)
        self.assertEqual(payload.timestamp, result.timestamp)