def test_a_job_in_error_could_be_requeued(self): job = Job(identifier='job:1', status=STATUSES.ERROR) job.requeue('test') queue = Queue.get_queue('test') self.assertEqual(queue.waiting.llen(), 1) self.assertEqual(queue.delayed.zcard(), 0) self.assertEqual(job.status.hget(), STATUSES.WAITING)
def test_enqueue_job_should_add_the_job_to_the_waiting_list(self): job = Job(identifier='job:1') queue = Queue.get_queue(name='test') queue.enqueue_job(job) waiting_jobs = queue.waiting.lmembers() self.assertEqual(waiting_jobs, [job.ident]) # test a delayed job delayed_until = datetime.utcnow() + timedelta(seconds=1) job2 = Job(identifier='job:2', delayed_until=str(delayed_until)) queue.delay_job(job2, delayed_until) waiting_jobs = queue.waiting.lmembers() self.assertEqual(waiting_jobs, [job.ident])
def test_get_model_repr_should_return_the_string_repr_of_the_model(self): self.assertEqual(Job.get_model_repr(), 'limpyd_jobs.models.Job') job = Job() self.assertEqual(job.get_model_repr(), 'limpyd_jobs.models.Job') self.assertEqual(JobFooBar.get_model_repr(), 'tests.models.JobFooBar') job = JobFooBar() self.assertEqual(job.get_model_repr(), 'tests.models.JobFooBar')
def test_enqueue_job_can_prepend_jobs(self): queue = Queue.get_queue(name='test') job = Job(identifier='job:1') queue.enqueue_job(job) waiting_jobs = queue.waiting.lmembers() self.assertEqual(waiting_jobs, [job.ident]) job2 = Job(identifier='job:2') queue.enqueue_job(job2) waiting_jobs = queue.waiting.lmembers() self.assertEqual(waiting_jobs, [job.ident, job2.ident]) job3 = Job(identifier='job:3') queue.enqueue_job(job3, prepend=True) waiting_jobs = queue.waiting.lmembers() self.assertEqual(waiting_jobs, [job3.ident, job.ident, job2.ident])
def test_requeuing_a_job_with_a_datetime_should_put_it_in_the_delayed_lits(self): job = Job(identifier='job:1', status=STATUSES.ERROR) queue = Queue.get_queue('test') self.assertEqual(queue.waiting.llen(), 0) self.assertEqual(queue.delayed.zcard(), 0) job.requeue('test', delayed_until=datetime.utcnow()+timedelta(seconds=5)) self.assertEqual(queue.waiting.llen(), 0) self.assertEqual(queue.delayed.zcard(), 1) self.assertEqual(job.status.hget(), STATUSES.DELAYED)
def test_delay_job_should_add_the_job_to_the_delayed_sortedset(self): delayed_until = datetime.utcnow() + timedelta(seconds=1) timestamp = datetime_to_score(delayed_until) job = Job(identifier='job:1', delayed_until=str(delayed_until)) queue = Queue.get_queue(name='test') queue.delay_job(job, delayed_until) delayed_jobs = queue.delayed.zrange(0, -1, withscores=True) self.assertEqual(delayed_jobs, [(job.ident, timestamp)]) # test a non-delayed job job2 = Job(identifier='job:2') queue.enqueue_job(job2) delayed_jobs = queue.delayed.zrange(0, -1, withscores=True) self.assertEqual(delayed_jobs, [(job.ident, timestamp)])
def test_enqueue_or_delay_should_enqueue_if_not_in_the_future(self): queue = Queue.get_queue(name='test', priority=1) job = Job(identifier='job:1') job.enqueue_or_delay('test', 1) self.assertEqual(queue.delayed.zcard(), 0) self.assertEqual(queue.waiting.llen(), 1) self.assertEqual(job.delayed_until.hget(), None) self.assertEqual(job.status.hget(), STATUSES.WAITING) self.assertEqual(job.priority.hget(), '1') job2 = Job(identifier='job:2') delayed_until = datetime.utcnow() - timedelta(seconds=5) # the past ! job2.enqueue_or_delay('test', 1, delayed_until=delayed_until) self.assertEqual(queue.delayed.zcard(), 0) self.assertEqual(queue.waiting.llen(), 2) self.assertEqual(job2.delayed_until.hget(), None) self.assertEqual(job2.status.hget(), STATUSES.WAITING) self.assertEqual(job2.priority.hget(), '1')
def test_enqueue_or_delay_should_delay_if_in_the_future(self): queue = Queue.get_queue(name='test', priority=1) job = Job(identifier='job:1') delayed_until = datetime.utcnow() + timedelta(seconds=5) job.enqueue_or_delay('test', 1, delayed_until=delayed_until) self.assertEqual(queue.delayed.zcard(), 1) self.assertEqual(queue.waiting.llen(), 0) self.assertEqual(job.delayed_until.hget(), str(delayed_until)) self.assertEqual(job.status.hget(), STATUSES.DELAYED) self.assertEqual(job.priority.hget(), '1')
def test_duration_property_should_return_elapsed_time_during_start_and_end(self): job = Job(identifier='job:1') self.assertIsNone(job.duration) start = datetime.utcnow() job.start.hset(str(start)) self.assertIsNone(job.duration) end = start + timedelta(seconds=5) job.end.hset(str(end)) self.assertEqual(job.duration, timedelta(seconds=5)) job.start.delete() self.assertIsNone(job.duration)