async def test_enqueue_multiple(arq_redis: ArqRedis, caplog): caplog.set_level(logging.DEBUG) results = await asyncio.gather(*[ arq_redis.enqueue_job('foobar', i, _job_id='testing') for i in range(10) ]) assert sum(r is not None for r in results) == 1 assert sum(r is None for r in results) == 9 assert 'WatchVariableError' not in caplog.text
def test_no_jobs(arq_redis: ArqRedis, loop): class Settings: functions = [func(foobar, name='foobar')] burst = True poll_delay = 0 loop.run_until_complete(arq_redis.enqueue_job('foobar')) worker = run_worker(Settings) assert worker.jobs_complete == 1 assert str(worker) == '<Worker j_complete=1 j_failed=0 j_retried=0 j_ongoing=0>'
async def test_mung(arq_redis: ArqRedis, worker): """ check a job can't be enqueued multiple times with the same id """ counter = Counter() async def count(ctx, v): counter[v] += 1 tasks = [] for i in range(50): tasks.extend( [arq_redis.enqueue_job('count', i, _job_id=f'v-{i}'), arq_redis.enqueue_job('count', i, _job_id=f'v-{i}')] ) shuffle(tasks) await asyncio.gather(*tasks) worker: Worker = worker(functions=[func(count, name='count')]) await worker.main() assert counter.most_common(1)[0][1] == 1 # no job go enqueued twice
async def arq_redis_msgpack(loop): redis_ = ArqRedis( host='localhost', port=6379, encoding='utf-8', job_serializer=msgpack.packb, job_deserializer=functools.partial(msgpack.unpackb, raw=False), ) await redis_.flushall() yield redis_ await redis_.close(close_connection_pool=True)
async def arq_redis(loop): redis_ = ArqRedis( host='localhost', port=6379, encoding='utf-8', ) await redis_.flushall() yield redis_ await redis_.close(close_connection_pool=True)
def test_no_jobs(arq_redis: ArqRedis, loop, mocker): class Settings: functions = [func(foobar, name='foobar')] burst = True poll_delay = 0 queue_read_limit = 10 loop.run_until_complete(arq_redis.enqueue_job('foobar')) mocker.patch('asyncio.get_event_loop', lambda: loop) worker = run_worker(Settings) assert worker.jobs_complete == 1 assert str(worker) == '<Worker j_complete=1 j_failed=0 j_retried=0 j_ongoing=0>'
async def test_many_jobs_expire(arq_redis: ArqRedis, worker, caplog): caplog.set_level(logging.INFO) await arq_redis.enqueue_job('foobar') await asyncio.gather(*[arq_redis.zadd(default_queue_name, 1, f'testing-{i}') for i in range(100)]) worker: Worker = worker(functions=[foobar]) assert worker.jobs_complete == 0 assert worker.jobs_failed == 0 assert worker.jobs_retried == 0 await worker.main() assert worker.jobs_complete == 1 assert worker.jobs_failed == 100 assert worker.jobs_retried == 0 log = '\n'.join(r.message for r in caplog.records) assert 'job testing-0 expired' in log assert log.count(' expired') == 100