Example #1
0
 def test_prepare_registries(self):
     """prepare_registries() creates self._scheduled_job_registries"""
     foo_queue = Queue('foo', connection=self.testconn)
     bar_queue = Queue('bar', connection=self.testconn)
     scheduler = RQScheduler([foo_queue, bar_queue],
                             connection=self.testconn)
     self.assertEqual(scheduler._scheduled_job_registries, [])
     scheduler.prepare_registries([foo_queue.name])
     self.assertEqual(scheduler._scheduled_job_registries,
                      [ScheduledJobRegistry(queue=foo_queue)])
     scheduler.prepare_registries([foo_queue.name, bar_queue.name])
     self.assertEqual(scheduler._scheduled_job_registries, [
         ScheduledJobRegistry(queue=foo_queue),
         ScheduledJobRegistry(queue=bar_queue)
     ])
Example #2
0
    def test_enqueue_at(self):
        """queue.enqueue_at() puts job in the scheduled"""
        queue = Queue(connection=self.testconn)
        registry = ScheduledJobRegistry(queue=queue)
        scheduler = RQScheduler([queue], connection=self.testconn)
        scheduler.acquire_locks()
        # Jobs created using enqueue_at is put in the ScheduledJobRegistry
        queue.enqueue_at(datetime(2019, 1, 1, tzinfo=utc), say_hello)
        self.assertEqual(len(queue), 0)
        self.assertEqual(len(registry), 1)

        # After enqueue_scheduled_jobs() is called, the registry is empty
        # and job is enqueued
        scheduler.enqueue_scheduled_jobs()
        self.assertEqual(len(queue), 1)
        self.assertEqual(len(registry), 0)
Example #3
0
    def test_heartbeat(self):
        """Test that heartbeat updates locking keys TTL"""
        name_1 = 'lock-test-1'
        name_2 = 'lock-test-2'
        scheduler = RQScheduler([name_1, name_2], self.testconn)
        scheduler.acquire_locks()

        locking_key_1 = RQScheduler.get_locking_key(name_1)
        locking_key_2 = RQScheduler.get_locking_key(name_2)

        with self.testconn.pipeline() as pipeline:
            pipeline.expire(locking_key_1, 1000)
            pipeline.expire(locking_key_2, 1000)

        scheduler.heartbeat()
        self.assertEqual(self.testconn.ttl(locking_key_1), 6)
        self.assertEqual(self.testconn.ttl(locking_key_1), 6)

        # scheduler.stop() releases locks and sets status to STOPPED
        scheduler._status = scheduler.Status.WORKING
        scheduler.stop()
        self.assertFalse(self.testconn.exists(locking_key_1))
        self.assertFalse(self.testconn.exists(locking_key_2))
        self.assertEqual(scheduler.status, scheduler.Status.STOPPED)

        # Heartbeat also works properly for schedulers with a single queue
        scheduler = RQScheduler([name_1], self.testconn)
        scheduler.acquire_locks()
        self.testconn.expire(locking_key_1, 1000)
        scheduler.heartbeat()
        self.assertEqual(self.testconn.ttl(locking_key_1), 6)
Example #4
0
 def test_init(self):
     """Scheduler can be instantiated with queues or queue names"""
     foo_queue = Queue('foo', connection=self.testconn)
     scheduler = RQScheduler([foo_queue, 'bar'], connection=self.testconn)
     self.assertEqual(scheduler._queue_names, {'foo', 'bar'})
     self.assertEqual(scheduler.status, RQScheduler.Status.STOPPED)