async def test_ack(app, broker, message, xid, consumer_id, job): await broker.read(consumer_id, count=1) state = get_state(app) assert len(state.queue.messages) == 1 assert state.queue.groups[0].pending == 1 assert len(state.schedule) == 0 assert len(state.dead.messages) == 0 assert count_results(app) == 0 assert get_status(app, job.uuid) == status.SENT await broker.ack(xid, job) state = get_state(app) assert len(state.queue.messages) == 0 assert state.queue.groups[0].pending == 0 assert len(state.schedule) == 0 assert len(state.dead.messages) == 0 assert count_results(app) == 0 assert get_status(app, job.uuid) == status.SUCCESS
async def test_process_schedule(app, broker, jobs, messages): with freeze_time("2020-01-01"): for xid, job in jobs: job.status = EXECUTING await broker.ack_and_schedule(xid, job) state = get_state(app) assert len(state.queue.messages) == 0 assert state.queue.groups[0].pending == 0 assert len(state.schedule) == 10 assert len(state.dead.messages) == 0 assert count_results(app) == 0 assert all(get_status(app, job.uuid) == RETRY for _, job in jobs) with freeze_time("1970-01-01"): # We're before the schedule time, no jobs should have moved. scheduled = await broker.process_schedule() assert len(scheduled) == 0 state = get_state(app) assert len(state.queue.messages) == 0 assert state.queue.groups[0].pending == 0 assert len(state.schedule) == 10 assert len(state.dead.messages) == 0 assert count_results(app) == 0 assert all(get_status(app, job.uuid) == RETRY for _, job in jobs) with freeze_time("2100-01-01"): # After the schedule time, all jobs should be moved to the task queue. scheduled = await broker.process_schedule() assert len(scheduled) == 10 state = get_state(app) assert len(state.queue.messages) == 10 assert {x.uuid for x in state.queue.messages} == {y.uuid for (_, y) in jobs} assert state.queue.groups[0].pending == 0 assert len(state.schedule) == 0 assert len(state.dead.messages) == 0 assert count_results(app) == 0 assert all(get_status(app, job.uuid) == RETRY for _, job in jobs)
async def test_ack_and_dead(app, broker, failing_message, xid, consumer_id, failing_job): await broker.read(consumer_id, count=1) state = get_state(app) assert len(state.queue.messages) == 1 assert state.queue.groups[0].pending == 1 assert len(state.schedule) == 0 assert len(state.dead.messages) == 0 assert count_results(app) == 0 assert get_status(app, failing_job.uuid) == status.SENT await broker.ack_and_dead(xid, failing_job) state = get_state(app) assert len(state.queue.messages) == 0 assert state.queue.groups[0].pending == 0 assert len(state.schedule) == 0 assert state.dead.messages[0].uuid == failing_job.uuid assert len(state.dead.messages) == 1 assert count_results(app) == 1 assert get_status(app, failing_job.uuid) == status.DEAD
def status(self): """ Return the status of the task execution. Examples -------- >>> @app.task >>> def bar(x) ... time.sleep(x) ... return x ... >>> x = bar.delay(5) >>> x.status() SENT >>> x.status() # After roughly 5 seconds... SUCCESS """ return get_status(self.app, self.job.uuid)
def test_module(app, job, xid): actions.send(app, job, xid=xid) assert state.get_status(app, job.uuid) == SENT assert state.get_job(app, job.uuid).status == SENT assert state.count_jobs(app) == 1 assert state.get_messages( app, app.keys.queue) == [Message(id=xid, uuid=job.uuid)] with executor(app): wait_for_results(app, length=1) assert actions.result(app, job, timeout=1)["return_value"] == job.args[0] assert state.get_info(app, app.keys.queue).groups == 1 assert state.get_groups(app, app.keys.queue)[0].name == app.keys.group assert state.get_stream(app, app.keys.queue).key == app.keys.queue assert state.count_results(app) == 1 with pytest.raises(JobNotFound): state.get_job(app, "nope")