def test_scheduling_unsubmitted_target(backend, monkeypatch): target = Target('TestTarget', inputs=[], outputs=[], options={}, working_dir='/some/dir') graph = Graph(targets={'TestTarget': target}) monkeypatch.setattr(graph, 'should_run', lambda t: True) assert schedule(graph, backend, target) == True assert len(backend.submit.call_args_list) == 1 assert call(target, dependencies=set()) in backend.submit.call_args_list
def test_scheduling_non_submitted_targets_that_should_not_run(backend, monkeypatch): target1 = Target('TestTarget1', inputs=[], outputs=['test_output1.txt'], options={}, working_dir='/some/dir') target2 = Target('TestTarget2', inputs=[], outputs=['test_output2.txt'], options={}, working_dir='/some/dir') target3 = Target('TestTarget3', inputs=['test_output1.txt', 'test_output2.txt'], outputs=['test_output3.txt'], options={}, working_dir='/some/dir') graph = Graph(targets={'TestTarget1': target1, 'TestTarget2': target2, 'TestTarget3': target3}) monkeypatch.setattr(graph, 'should_run', lambda t: False) assert schedule(graph, backend, target3) == False assert backend.submit.call_args_list == []
def test_scheduling_target_with_deps_that_are_not_submitted(backend, monkeypatch): target1 = Target('TestTarget1', inputs=[], outputs=['test_output.txt'], options={}, working_dir='/some/dir') target2 = Target('TestTarget2', inputs=['test_output.txt'], outputs=[], options={}, working_dir='/some/dir') graph = Graph(targets={'TestTarget1': target1, 'TestTarget2': target2}) monkeypatch.setattr(graph, 'should_run', lambda t: True) assert schedule(graph, backend, target2) == True assert len(backend.submit.call_args_list) == 2 assert call(target1, dependencies=set()) in backend.submit.call_args_list assert call(target2, dependencies=set([target1])) in backend.submit.call_args_list
def test_scheduling_branch_and_join_structure(backend, monkeypatch): target1 = Target('TestTarget1', inputs=[], outputs=['output1.txt'], options={}, working_dir='/some/dir') target2 = Target('TestTarget2', inputs=['output1.txt'], outputs=['output2.txt'], options={}, working_dir='/some/dir') target3 = Target('TestTarget3', inputs=['output1.txt'], outputs=['output3.txt'], options={}, working_dir='/some/dir') target4 = Target('TestTarget4', inputs=['output2.txt', 'output3.txt'], outputs=['final.txt'], options={}, working_dir='/some/dir') graph = Graph(targets={'target1': target1, 'target2': target2, 'target3': target3, 'target4': target4}) monkeypatch.setattr(graph, 'should_run', lambda t: True) assert schedule(graph, backend, target4) == True assert len(backend.submit.call_args_list) == 4 assert call(target1, dependencies=set([])) in backend.submit.call_args_list assert call(target2, dependencies=set([target1])) in backend.submit.call_args_list assert call(target3, dependencies=set([target1])) in backend.submit.call_args_list assert call(target4, dependencies=set([target3, target2])) in backend.submit.call_args_list