def test_scheduler(r): list_key = 'scheduler_test:q' r.delete(list_key) schedule = create_schedule('math.copysign', 1, -1, hook='django_q.tests.tasks.result', schedule_type=Schedule.HOURLY, repeats=1) assert schedule.last_run() is None # run scheduler scheduler(list_key=list_key) # set up the workflow task_queue = Queue() stop_event = Event() stop_event.set() # push it pusher(task_queue, stop_event, list_key=list_key, r=r) assert task_queue.qsize() == 1 assert r.llen(list_key) == 0 task_queue.put('STOP') # let a worker handle them result_queue = Queue() worker(task_queue, result_queue, Value('b', -1)) assert result_queue.qsize() == 1 result_queue.put('STOP') # store the results monitor(result_queue) assert result_queue.qsize() == 0 schedule.refresh_from_db() assert schedule.repeats == 0 assert schedule.last_run() is not None assert schedule.success() is True task = get_task(schedule.task) assert task is not None assert task.success is True assert task.result < 0 for t in Schedule.TYPE: schedule = create_schedule('django_q.tests.tasks.word_multiply', 2, word='django', schedule_type=t[0], repeats=1, hook='django_q.tests.tasks.result' ) assert schedule is not None assert schedule.last_run() is None
def test_async(r): list_key = "cluster_test:q" r.delete(list_key) a = async( "django_q.tests.tasks.count_letters", DEFAULT_WORDLIST, hook="django_q.tests.test_cluster.assert_result", list_key=list_key, ) b = async( "django_q.tests.tasks.count_letters2", WordClass(), hook="django_q.tests.test_cluster.assert_result", list_key=list_key, ) # unknown argument c = async( "django_q.tests.tasks.count_letters", DEFAULT_WORDLIST, "oneargumentoomany", hook="django_q.tests.test_cluster.assert_bad_result", list_key=list_key, ) # unknown function d = async( "django_q.tests.tasks.does_not_exist", WordClass(), hook="django_q.tests.test_cluster.assert_bad_result", list_key=list_key, ) # function without result e = async("django_q.tests.tasks.countdown", 100000, list_key=list_key) # function as instance f = async(multiply, 753, 2, hook=assert_result, list_key=list_key) # model as argument g = async("django_q.tests.tasks.get_task_name", Task(name="John"), list_key=list_key) # args and kwargs and broken hook h = async("django_q.tests.tasks.word_multiply", 2, word="django", hook="fail.me", list_key=list_key, redis=r) # check if everything has a task name assert isinstance(a, str) assert isinstance(b, str) assert isinstance(c, str) assert isinstance(d, str) assert isinstance(e, str) assert isinstance(f, str) assert isinstance(g, str) assert isinstance(h, str) # run the cluster to execute the tasks task_count = 8 assert r.llen(list_key) == task_count task_queue = Queue() stop_event = Event() stop_event.set() # push the tasks for i in range(task_count): pusher(task_queue, stop_event, list_key=list_key, r=r) assert r.llen(list_key) == 0 assert task_queue.qsize() == task_count task_queue.put("STOP") # let a worker handle them result_queue = Queue() worker(task_queue, result_queue, Value("b", -1)) assert result_queue.qsize() == task_count result_queue.put("STOP") # store the results monitor(result_queue) assert result_queue.qsize() == 0 # Check the results # task a result_a = get_task(a) assert result_a is not None assert result_a.success is True assert result(a) == 1506 # task b result_b = get_task(b) assert result_b is not None assert result_b.success is True assert result(b) == 1506 # task c result_c = get_task(c) assert result_c is not None assert result_c.success is False # task d result_d = get_task(d) assert result_d is not None assert result_d.success is False # task e result_e = get_task(e) assert result_e is not None assert result_e.success is True assert result(e) is None # task f result_f = get_task(f) assert result_f is not None assert result_f.success is True assert result(f) == 1506 # task g result_g = get_task(g) assert result_g is not None assert result_g.success is True assert result(g) == "John" # task h result_h = get_task(h) assert result_h is not None assert result_h.success is True assert result(h) == 12 r.delete(list_key)