def test_engine_progress_collection(): with temporary_engine() as engine: seq = SimpleSequentialTaskCollection(3) engine.add(seq) # run through sequence while seq.execution.state != 'TERMINATED': engine.progress() assert seq.stage().jobname == 'stage2' assert seq.stage().execution.state == 'TERMINATED'
def test_engine_kill_SequentialTaskCollection(): with temporary_engine() as engine: seq = SimpleSequentialTaskCollection(3) engine.add(seq) while seq.execution.state != 'RUNNING': engine.progress() # When the sequence is in RUNNING state, so must the first app assert seq.tasks[0].execution.state == 'RUNNING' assert seq.tasks[1].execution.state == 'NEW' assert seq.tasks[2].execution.state == 'NEW' # Killing a sequential should put all the applications in # TERMINATED state. However, we will need an extra run of # engine.progress() to update the status of all the jobs. engine.kill(seq) assert seq.tasks[0].execution.state == 'RUNNING' assert seq.tasks[1].execution.state == 'NEW' assert seq.tasks[2].execution.state == 'NEW' assert seq.execution.state == 'RUNNING' engine.progress() assert seq.tasks[0].execution.state == 'TERMINATED' assert seq.tasks[1].execution.state == 'TERMINATED' assert seq.tasks[2].execution.state == 'TERMINATED' assert seq.execution.state == 'TERMINATED'
def test_engine_kill_SequentialTaskCollection(): with temporary_engine() as engine: seq = SimpleSequentialTaskCollection(3) engine.add(seq) while seq.execution.state != 'RUNNING': engine.progress() # Because of our noop engine, as soon as the sequential is in # running we will have a job in TERMINATED and the others in # NEW. assert ( ['TERMINATED', 'NEW', 'NEW'] == [i.execution.state for i in seq.tasks]) # Killing a sequential should put all the applications in # TERMINATED state. However, we will need an extra run of # engine.progress() to update the status of all the jobs. engine.kill(seq) assert ( ['TERMINATED', 'NEW', 'NEW'] == [i.execution.state for i in seq.tasks]) engine.progress() assert ( ['TERMINATED', 'TERMINATED', 'TERMINATED'] == [i.execution.state for i in seq.tasks]) assert seq.execution.state == 'TERMINATED'
def test_SequentialTaskCollection_progress(): with temporary_core() as core: seq = SimpleSequentialTaskCollection(3) seq.attach(core) # run until terminated while seq.execution.state != Run.State.TERMINATED: seq.progress() assert seq.stage().jobname == 'stage2' assert seq.stage().execution.state == Run.State.TERMINATED
def test_engine_progress_collection_and_forget_terminated(): with temporary_engine() as engine: engine.forget_terminated = True seq = SimpleSequentialTaskCollection(3) engine.add(seq) # run through sequence while seq.execution.state != 'TERMINATED': engine.progress() assert 0 == len(engine._managed.done) assert not seq._attached for task in seq.tasks: assert not task._attached
def test_empty_SequentialTaskCollection_progress(): with temporary_core() as core: seq = SimpleSequentialTaskCollection(0) seq.attach(core) # run until terminated while seq.execution.state != Run.State.TERMINATED: seq.progress() assert seq.execution.state == Run.State.TERMINATED assert seq.execution.returncode == 0
def test_SequentialTaskCollection_redo3(): """Test that we can re-do a partially terminated sequence.""" with temporary_core() as core: seq = SimpleSequentialTaskCollection(3) seq.attach(core) # run until stage1 is terminated while seq.tasks[1].execution.state != Run.State.TERMINATED: seq.progress() assert seq.stage().jobname == 'stage2' core.kill(seq) seq.redo(0) assert seq.stage().jobname == 'stage0' assert seq.stage().execution.state == Run.State.NEW assert seq.execution.state == Run.State.NEW # run until terminated while seq.execution.state != Run.State.TERMINATED: seq.progress() assert seq.stage().jobname == 'stage2' assert seq.stage().execution.state == Run.State.TERMINATED
def test_SequentialTaskCollection_redo2(): with temporary_core() as core: seq = SimpleSequentialTaskCollection(3) seq.attach(core) # run until terminated while seq.execution.state != Run.State.TERMINATED: seq.progress() assert seq.stage().jobname == "stage2" assert seq.stage().execution.state == Run.State.TERMINATED seq.redo(1) assert seq.stage().jobname == "stage1" assert seq.stage().execution.state == Run.State.NEW assert seq.execution.state == Run.State.NEW # run until terminated, again while seq.execution.state != Run.State.TERMINATED: seq.progress() assert seq.stage().jobname == "stage2" assert seq.stage().execution.state == Run.State.TERMINATED