def test_overdue_tasks(): schdlr = scheduler.Scheduler(4) task1 = task.Task('test-1', foo, (1, ), { 'to_sleep': 1, }) task2 = task.Task('test-2', foo, (1, ), { 'to_sleep': 1, }) task3 = task.Task('test-3', foo, (1, ), { 'to_sleep': 1, }) schdlr.start() schdlr.add_task(task1, priority=task.PRIORITY_MID, timeout=0.1) time.sleep(0.2) assert len(schdlr.overdue_tasks) == 1 schdlr.add_task(task2, priority=task.PRIORITY_MID, timeout=0.1) time.sleep(0.2) assert len(schdlr.overdue_tasks) == 2 schdlr.add_task(task3, priority=task.PRIORITY_MID, timeout=0.1) time.sleep(0.2) assert len(schdlr.overdue_tasks) == 3 time.sleep(1) assert len(schdlr.overdue_tasks) == 0 schdlr.stop()
def test_multiple_task_order_different_priority_2(): schdlr = scheduler.Scheduler(1) task1 = task.Task('test-1', foo, (1, ), { 'to_sleep': 0.3, }) task2 = task.Task('test-2', foo, (1, ), { 'to_sleep': 0.3, }) task3 = task.Task('test-3', foo, (1, ), { 'to_sleep': 0.3, }) task4 = task.Task('test-4', foo, (1, ), { 'to_sleep': 0.3, }) schdlr.add_task(task1, priority=task.PRIORITY_MID) schdlr.add_task(task2, priority=task.PRIORITY_MID) schdlr.add_task(task3, priority=task.PRIORITY_MID) schdlr.start() time.sleep(0.1) schdlr.add_task(task4, priority=task.PRIORITY_HI) schdlr.stop() check_scheduler_state(schdlr, scheduler.STATE_STOPPED, 0, 0, 4, None) compare_task_list( schdlr.tasks_stat(short=False)["done"], [task1, task2, task4, task3])
def test_worker_2_tasks(): wkr = worker.Worker('test_worker') task1 = task.Task('foo_task1', foo_raise, (), {}) task2 = task.Task('foo_task2', foo, (1, ), {'b': 2}) wkr.start() wkr.do(task1) wkr.do(task2) time.sleep(3) wkr.stop() assert task1.failed assert task2.result == 3
def test_simple_task_fail(): e = Exception('test') t = task.Task('foo_task', foo_raise, (e, ), {}) t.execute() check_task_state(t, task.FAILED, False, True, [task.PENDING, task.IN_PROGRESS, task.FAILED]) assert isinstance(t.traceback, str) and 'in foo_raise' in t.traceback assert t.result is e
def test_worker_simple_fail(): wkr = worker.Worker('test_worker') task1 = task.Task('foo_task', foo_raise, (), {}) wkr.start() wkr.do(task1) check_worker_state(wkr, worker.PROCESSING, False) time.sleep(1) check_worker_state(wkr, worker.IDLE, True) wkr.stop() assert task1.failed
def test_worker_simple_pass(): wkr = worker.Worker('test_worker') task1 = task.Task('foo_task', foo, (1, ), {'b': 2}) wkr.start() wkr.do(task1) check_worker_state(wkr, worker.PROCESSING, False) time.sleep(1) check_worker_state(wkr, worker.IDLE, True) wkr.stop() assert task1.result == 3
def test_complete_enqueued(): schdlr = scheduler.Scheduler(4) task1 = task.Task('test-1', foo, (1, ), { 'to_sleep': 1, }) task2 = task.Task('test-2', foo, (1, ), { 'to_sleep': 1, }) task3 = task.Task('test-3', foo, (1, ), { 'to_sleep': 1, }) schdlr.start() schdlr.add_task(task1) schdlr.add_task(task2) schdlr.add_task(task3) schdlr.stop() check_scheduler_state(schdlr, scheduler.STATE_STOPPED, 0, 0, 3, None)
def test_multiple_task_order_same_priority(): schdlr = scheduler.Scheduler(1) task1 = task.Task('test-1', foo, (1, ), { 'to_sleep': 0.3, }) task2 = task.Task('test-2', foo, (1, ), { 'to_sleep': 0.3, }) task3 = task.Task('test-3', foo, (1, ), { 'to_sleep': 0.3, }) for t in [task1, task2, task3]: schdlr.add_task(t) schdlr.start() time.sleep(0.5) schdlr.stop() check_scheduler_state(schdlr, scheduler.STATE_STOPPED, 0, 0, 3, None) assert schdlr.tasks_stat(short=False)["done"] == [task1, task2, task3]
def test_one_worker_one_task_pass_added_before_start(): schdlr = scheduler.Scheduler(1) task1 = task.Task('test-1', foo, (1, ), { 'to_sleep': 0.3, }) schdlr.add_task(task1) assert task1.done is False and task1.result is etc._undef_ schdlr.start() time.sleep(0.1) check_scheduler_state(schdlr, scheduler.STATE_RUNNING, 0, 1, 0, None) schdlr.stop() assert task1.done is True and task1.result == 1 check_scheduler_state(schdlr, scheduler.STATE_STOPPED, 0, 0, 1, None)
def test_unexpected_args(): t = task.Task('foo_task', foo, (1, ), {'bb': 2, 'cc': 3}) t.execute() check_task_state(t, task.FAILED, False, True, [task.PENDING, task.IN_PROGRESS, task.FAILED]) assert isinstance(t.result, TypeError)
def test_simple_task_pass_no_return(): t = task.Task('no_return', no_return, (), {}) t.execute() check_task_state(t, task.DONE, True, False, [task.PENDING, task.IN_PROGRESS, task.DONE]) assert t.result is None
def test_simple_task_pass(): t = task.Task('foo_task', foo, (1, ), {'b': 2, 'c': 3}) t.execute() check_task_state(t, task.DONE, True, False, [task.PENDING, task.IN_PROGRESS, task.DONE]) assert t.result == 6
def test_init_state(): t = task.Task('foo_task', foo, (1, ), {'b': 2, 'c': 3}) check_task_state(t, task.PENDING, False, False, [task.PENDING]) assert t.result is etc._undef_