def testChangeOrder_AddJustOnce(self): tasks = [Task("taskX",None,task_dep=["taskY"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(None) assert [tasks[1], tasks[0]] == [x for x in tc._add_task(0, 'taskX', False)] # both tasks were already added. so no tasks left.. assert [] == [x for x in tc._add_task(0, 'taskY', False)]
def testParallel(self): tasks = [Task("taskX",None,task_dep=["taskY"]), Task("taskY",None)] tc = TaskControl(tasks) tc.process(None) gen1 = tc._add_task(0, "taskX", False) assert tasks[1] == gen1.next() # gen2 wont get any task, because it was already being processed gen2 = tc._add_task(1, "taskY", False) py.test.raises(StopIteration, gen2.next)
def testDetectCyclicReference(self): tasks = [Task("taskX",None,task_dep=["taskY"]), Task("taskY",None,task_dep=["taskX"])] tc = TaskControl(tasks) tc.process(None) gen = tc._add_task(0, "taskX", False) py.test.raises(InvalidDodoFile, gen.next)
def testSetupInvalid(self): tasks = [Task("taskX",None,setup=["taskZZZZZZZZ"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(['taskX']) gen = tc._add_task(0, 'taskX', False) assert tasks[0] == gen.next() # tasks with setup are yield twice tasks[0].run_status = 'run' # should be executed py.test.raises(InvalidTask, gen.next) # execute setup before
def testSetupTasksDontRun(self): tasks = [Task("taskX",None,setup=["taskY"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(['taskX']) gen = tc._add_task(0, 'taskX', False) assert tasks[0] == gen.next() # X is up-to-date tasks[0].run_status = 'up-to-date' py.test.raises(StopIteration, gen.next)
def testSetupTasksRun(self): tasks = [Task("taskX",None,setup=["taskY"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(['taskX']) gen = tc._add_task(0, 'taskX', False) assert tasks[0] == gen.next() # tasks with setup are yield twice tasks[0].run_status = 'run' # should be executed assert tasks[1] == gen.next() # execute setup before assert tasks[0] == gen.next() # second time, ok py.test.raises(StopIteration, gen.next) # nothing left
def testIncludeSetup(self): # with include_setup yield all tasks without waiting for setup tasks to # be ready tasks = [Task("taskX",None,setup=["taskY"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(['taskX']) gen = tc._add_task(0, 'taskX', True) # <== include_setup assert tasks[0] == gen.next() # tasks with setup are yield twice assert tasks[1] == gen.next() # execute setup before assert tasks[0] == gen.next() # second time, ok py.test.raises(StopIteration, gen.next) # nothing left
def testCalcDep(self): def get_deps(): print "gget" return {'file_dep': ('a', 'b')} tasks = [Task("taskX", None, calc_dep=['task_dep']), Task("task_dep", [(get_deps,)]), ] tc = TaskControl(tasks) tc.process(['taskX']) gen = tc._add_task(0, 'taskX', False) assert tasks[1] == gen.next() assert isinstance(gen.next(), WaitRunTask) tasks[1].execute() assert tasks[0] == gen.next() assert set(['a', 'b']) == tasks[0].file_dep
def testWaitSetup(self): tasks = [Task("taskX",None,setup=["taskY"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(['taskX']) gen = tc._add_task(0, 'taskX', False) assert tasks[0] == gen.next() # tasks with setup are yield twice # wait for taskX run_status wait = gen.next() assert wait.task_name == 'taskX' assert isinstance(wait, WaitSelectTask) tasks[0].run_status = 'run' # should be executed assert tasks[1] == gen.next() # execute setup before assert tasks[0] == gen.next() # second time, ok py.test.raises(StopIteration, gen.next) # nothing left
def testAddNotSelected(self): tasks = [Task("taskX",None,task_dep=["taskY"]), Task("taskY",None,)] tc = TaskControl(tasks) tc.process(['taskX']) assert [tasks[1], tasks[0]] == [x for x in tc._add_task(0, 'taskX',False)]