def test_work_fails(loop): """Failing jobs are put on the failed queue.""" q = Queue() failed_q = get_failed_queue() # Preconditions assert not (yield from failed_q.count) assert not (yield from q.count) # Action job = yield from q.enqueue(div_by_zero) assert (yield from q.count) == 1 # keep for later enqueued_at_date = strip_microseconds(job.enqueued_at) w = Worker([q]) yield from w.work(burst=True, loop=loop) # Should silently pass # Postconditions assert not (yield from q.count) assert (yield from failed_q.count) == 1 assert not (yield from w.get_current_job_id()) # Check the job job = yield from Job.fetch(job.id) assert job.origin == q.name # Should be the original enqueued_at date, not the date of enqueueing # to the failed queue assert job.enqueued_at == enqueued_at_date assert job.exc_info # should contain exc_info
def test_get_current_job(redis): """Ensure worker.get_current_job() works properly.""" q = Queue() worker = Worker([q]) job = yield from q.enqueue_call(say_hello) assert not (yield from redis.hget(worker.key, 'current_job')) yield from worker.set_current_job_id(job.id) current_id = as_text((yield from redis.hget(worker.key, 'current_job'))) assert (yield from worker.get_current_job_id()) == current_id assert (yield from worker.get_current_job()) == job
def test_prepare_job_execution(redis): """Prepare job execution does the necessary bookkeeping.""" queue = Queue(connection=redis) job = yield from queue.enqueue(say_hello) worker = Worker([queue]) yield from worker.prepare_job_execution(job) # Updates working queue registry = StartedJobRegistry(connection=redis) assert (yield from registry.get_job_ids()) == [job.id] # Updates worker statuses assert worker.get_state() == 'busy' assert (yield from worker.get_current_job_id()) == job.id