示例#1
0
async def test_run_at_startup_no_id_only_runs_once(worker):
    """
    Without a custom job ID, and `run_at_startup=True` on two jobs, it will only execute once, since the job_id
    will be equal, and should only run once.
    """
    worker: Worker = worker(
        cron_jobs=[
            cron(foobar, minute=10, run_at_startup=True),
            cron(foobar, minute=20, run_at_startup=True)
        ],
        poll_delay=0.01,
    )
    await worker.main()

    assert worker.jobs_complete == 1
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0
示例#2
0
async def test_job_same_function_different_id(worker):
    """
    Set a different ID on the same function job, which runs at startup and ensure both functions are run.
    See next test for behaviour without setting job_id.
    """
    worker: Worker = worker(
        cron_jobs=[
            cron(foobar, minute=10, run_at_startup=True, job_id='custom_id'),
            cron(foobar, minute=20, run_at_startup=True, job_id='custom_id2'),
        ],
        poll_delay=0.01,
    )
    await worker.main()

    assert worker.jobs_complete == 2
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0
示例#3
0
文件: test_cron.py 项目: rubik/arq
async def test_job_successful(worker, caplog):
    caplog.set_level(logging.INFO)
    worker: Worker = worker(cron_jobs=[cron(foobar, hour=1, run_at_startup=True)])
    await worker.main()
    assert worker.jobs_complete == 1
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0

    log = re.sub(r'(\d+).\d\ds', r'\1.XXs', '\n'.join(r.message for r in caplog.records))
    assert '  0.XXs → cron:foobar()\n  0.XXs ← cron:foobar ● 42' in log
示例#4
0
文件: test_cron.py 项目: rubik/arq
async def test_not_run(worker, caplog):
    caplog.set_level(logging.INFO)
    worker: Worker = worker(cron_jobs=[cron(foobar, hour=1, run_at_startup=False)])
    await worker.main()
    assert worker.jobs_complete == 0
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0

    log = '\n'.join(r.message for r in caplog.records)
    assert 'cron:foobar()' not in log
示例#5
0
async def test_job_custom_id(worker):
    """
    Test that two different functions with the same job_id, will only be executed once.
    """
    worker: Worker = worker(
        cron_jobs=[
            cron(barfoo,
                 minute=10,
                 run_at_startup=True,
                 job_id='singleton_job'),
            cron(foobar,
                 minute=20,
                 run_at_startup=True,
                 job_id='singleton_job'),
        ],
        poll_delay=0.01,
    )
    await worker.main()

    assert worker.jobs_complete == 1
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0
示例#6
0
async def test_job_successful_on_specific_queue(worker, caplog):
    caplog.set_level(logging.INFO)
    worker: Worker = worker(
        queue_name='arq:test-cron-queue',
        cron_jobs=[cron(foobar, hour=1, run_at_startup=True)],
        poll_delay=0.5)
    await worker.main()
    assert worker.jobs_complete == 1
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0

    log = re.sub(r'(\d+).\d\ds', r'\1.XXs',
                 '\n'.join(r.message for r in caplog.records))
    assert '  0.XXs → cron:foobar()\n  0.XXs ← cron:foobar ● 42' in log
示例#7
0
async def test_cron_cancelled(worker, mocker):
    mocker.patch.object(arq.worker, 'keep_cronjob_progress', 0.1)

    async def try_sleep(ctx):
        if ctx['job_try'] == 1:
            raise asyncio.CancelledError

    worker: Worker = worker(
        cron_jobs=[
            cron(try_sleep, microsecond=20, run_at_startup=True, max_tries=2)
        ],
        poll_delay=0.01,
    )
    await worker.main()
    assert worker.jobs_complete == 1
    assert worker.jobs_retried == 1
    assert worker.jobs_failed == 0
示例#8
0
async def test_job_successful(worker, caplog, arq_redis, poll_delay):
    caplog.set_level(logging.INFO)
    worker: Worker = worker(
        cron_jobs=[cron(foobar, hour=1, run_at_startup=True)],
        poll_delay=poll_delay)
    await worker.main()
    assert worker.jobs_complete == 1
    assert worker.jobs_failed == 0
    assert worker.jobs_retried == 0

    log = re.sub(r'(\d+).\d\ds', r'\1.XXs',
                 '\n'.join(r.message for r in caplog.records))
    assert '  0.XXs → cron:foobar()\n  0.XXs ← cron:foobar ● 42' in log

    # Assert the in-progress key still exists.
    keys = await arq_redis.keys(in_progress_key_prefix + '*')
    assert len(keys) == 1
    assert await arq_redis.pttl(keys[0]) > 0.0
示例#9
0
async def test_str_function():
    cj = cron('asyncio.sleep', hour=1, run_at_startup=True)
    assert str(cj).startswith(
        '<CronJob name=cron:asyncio.sleep coroutine=<function sleep at')
示例#10
0
async def test_repr():
    cj = cron(foobar, hour=1, run_at_startup=True)
    assert str(cj).startswith(
        '<CronJob name=cron:foobar coroutine=<function foobar at')
示例#11
0
async def test_str_function():
    cj = cron('asyncio.sleep', hour=1, run_at_startup=True)
    assert str(cj).startswith('<CronJob name=cron:asyncio.sleep coroutine=<function sleep at')
示例#12
0
async def test_repr():
    cj = cron(foobar, hour=1, run_at_startup=True)
    assert str(cj).startswith('<CronJob name=cron:foobar coroutine=<function foobar at')