def test_requeue_delayed_jobs_put_back_ready_delayed_jobs_to_the_waiting_list(self): queue = Queue.get_queue(name='test') job1 = Job.add_job(identifier='job:1', queue_name='test', delayed_for=10) job2 = Job.add_job(identifier='job:2', queue_name='test', delayed_for=1) self.assertEqual(Queue.count_waiting_jobs('test'), 0) self.assertEqual(Queue.count_delayed_jobs('test'), 2) self.assertEqual(job1.status.hget(), STATUSES.DELAYED) self.assertEqual(job2.status.hget(), STATUSES.DELAYED) # must not move any jobs, too soon queue.requeue_delayed_jobs() self.assertEqual(Queue.count_waiting_jobs('test'), 0) self.assertEqual(Queue.count_delayed_jobs('test'), 2) self.assertEqual(job1.status.hget(), STATUSES.DELAYED) self.assertEqual(job2.status.hget(), STATUSES.DELAYED) sleep(1) # now we should have one job in the waiting list queue.requeue_delayed_jobs() self.assertEqual(Queue.count_waiting_jobs('test'), 1) self.assertEqual(Queue.count_delayed_jobs('test'), 1) self.assertEqual(job1.status.hget(), STATUSES.DELAYED) self.assertEqual(job2.status.hget(), STATUSES.WAITING) waiting_jobs = queue.waiting.lmembers() self.assertEqual(waiting_jobs, [job2.ident]) delayed_jobs = queue.delayed.zrange(0, -1, withscores=True) self.assertEqual(delayed_jobs[0][0], job1.ident)
def test_count_delayed_jobs_should_return_the_number_of_delayed_jobs(self): self.assertEqual(Queue.count_delayed_jobs('test'), 0) Job.add_job(identifier='job:1', queue_name='test', delayed_for=5) self.assertEqual(Queue.count_delayed_jobs('test'), 1) Job.add_job(identifier='job:2', queue_name='test') self.assertEqual(Queue.count_delayed_jobs('test'), 1) Job.add_job(identifier='foo:1', queue_name='foo', delayed_for=5) Job.add_job(identifier='bar:1', queue_name='bar', delayed_for=5) self.assertEqual(Queue.count_delayed_jobs(['foo', 'bar']), 2) self.assertEqual(Queue.count_delayed_jobs(['test', 'foo', 'bar']), 3)
def test_requeue_delayed_jobs_should_abort_if_another_thread_works_on_it(self): queue = Queue.get_queue(name='test') # simulate a lock on this queue lock_key = queue.make_key( queue._name, queue.pk.get(), "requeue_all_delayed_ready_jobs", ) queue.get_connection().set(lock_key, 1) Job.add_job(identifier='job:1', queue_name='test', delayed_for=0.1) self.assertEqual(Queue.count_waiting_jobs('test'), 0) self.assertEqual(Queue.count_delayed_jobs('test'), 1) # wait until the job should be ready sleep(0.5) queue.requeue_delayed_jobs() # the requeue must have done nothing self.assertEqual(Queue.count_waiting_jobs('test'), 0) self.assertEqual(Queue.count_delayed_jobs('test'), 1)