Beispiel #1
0
def test_remove_failed(queue, worker, mongodb):
    import tests.project.work
    job = queue.enqueue(tests.project.work.ErrorJob, attempts=5, sleep=1)
    worker.start(1)
    while queue.config.sys.queue.count_documents({"state": "running"}) == 0:
        time.sleep(0.25)
    assert queue.remove_job(job._id)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(0.25)
    worker.stop()
    assert queue.config.sys.journal.count_documents({}) == 1
    assert queue.config.sys.queue.count_documents({}) == 0
Beispiel #2
0
def test_remove_complete(queue, worker, mongodb):
    job = queue.enqueue(core4.queue.helper.job.example.DummyJob, sleep=3)
    worker.start(1)
    while queue.config.sys.queue.count_documents({"state": "running"}) == 0:
        time.sleep(0.25)
    assert queue.remove_job(job._id)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(0.25)
    worker.stop()
    assert queue.config.sys.journal.count_documents({}) == 1
    assert queue.config.sys.queue.count_documents({}) == 0
    job = queue.find_job(job._id)
    assert job.state == "complete"
Beispiel #3
0
def test_mass_defer(queue, worker, mongodb):
    import tests.project.work
    for i in range(0, 10):
        queue.enqueue(tests.project.work.DeferJob,
                      i=i,
                      success=True,
                      defer_time=1,
                      defer_max=2)
    worker.start(4)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(1)
        if queue.config.sys.queue.count_documents({"state": "inactive"}) == 10:
            break
    worker.stop()
Beispiel #4
0
def test_defer(queue, worker):
    import tests.project.work
    queue.enqueue(tests.project.work.DeferJob)
    worker.start(1)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(1)
        if queue.config.sys.queue.count_documents({"state": "inactive"}) > 0:
            break
    worker.stop()
    data = list(queue.config.sys.log.find())
    assert sum([1 for d in data if
                "done execution with [deferred]" in d["message"]]) > 2
    assert sum([1 for d in data if
                "done execution with [inactive]" in d["message"]]) == 1
Beispiel #5
0
def test_remove_error(queue, worker):
    import tests.project.work
    job = queue.enqueue(tests.project.work.ErrorJob, attempts=1)
    worker.start(1)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(1)
        if queue.config.sys.queue.count_documents({"state": "error"}) > 0:
            break
    assert queue.remove_job(job._id)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(1)
    worker.stop()
    assert queue.config.sys.journal.count_documents({}) == 1
    assert queue.config.sys.queue.count_documents({}) == 0
    job = queue.find_job(job._id)
    assert job.state == "error"
Beispiel #6
0
def test_remove_inactive(queue, worker):
    import tests.project.work
    job = queue.enqueue(tests.project.work.DeferJob, defer_max=1)
    worker.start(1)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(1)
        if queue.config.sys.queue.count_documents({"state": "inactive"}) > 0:
            break
    assert queue.remove_job(job._id)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(1)
    worker.stop()
    assert queue.config.sys.journal.count_documents({}) == 1
    assert queue.config.sys.queue.count_documents({}) == 0
    job = queue.find_job(job._id)
    assert job.state == "inactive"
Beispiel #7
0
def test_error(queue, worker):
    import tests.project.work
    queue.enqueue(tests.project.work.ErrorJob)
    worker.start(1)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(0.25)
        if queue.config.sys.queue.count_documents({"state": "error"}) > 0:
            break
    worker.stop()
    data = list(queue.config.sys.log.find())
    from pprint import pprint
    pprint(data)
    assert sum([1 for d in data if "done execution" in d["message"]]) == 3
    assert sum([1 for d in data if "start execution" in d["message"]]) == 3
    delta = [d["created"] for d in data if
             "execution" in d["message"] and d["level"] == "INFO"]
    assert (delta[1] - delta[0]).total_seconds() >= 3
    assert (delta[2] - delta[1]).total_seconds() >= 3
Beispiel #8
0
def test_no_pid(queue, worker):
    job = queue.enqueue(ForeverJob)
    worker.start(1)
    while True:
        job = queue.find_job(job._id)
        if job.locked and job.locked["pid"]:
            job = queue.find_job(job._id)
            proc = psutil.Process(job.locked["pid"])
            time.sleep(5)
            print("kill now", job.locked["pid"])
            print("my pid", core4.util.node.get_pid())
            proc.kill()
            break
    while True:
        job = queue.find_job(job._id)
        print(job.state)
        if job.state == "killed":
            break
    worker.stop()
Beispiel #9
0
def test_nonstop(queue, worker):
    job = queue.enqueue(core4.queue.helper.job.example.DummyJob, sleep=5,
                        wall_time=1)
    worker.start(1)
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(0.1)
        if queue.config.sys.queue.count_documents(
                {"wall_at": {"$ne": None}}) > 0:
            break
    while queue.config.sys.queue.count_documents({}) > 0:
        time.sleep(0.1)
    worker.stop()
    assert queue.config.sys.journal.count_documents({}) == 1
    assert queue.config.sys.queue.count_documents({}) == 0
    job = queue.find_job(job._id)
    assert job.wall_at is not None
    data = list(queue.config.sys.log.find())
    assert sum([1 for d in data
                if "successfully set non-stop job" in d["message"]]) == 1