def test_DependencyError(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])], file_dep=["i_dont_exist"]) my_runner = runner.Runner(dep_manager, reporter) assert False == my_runner.select_task(ExecNode(t1, None), {}) assert ('start', t1) == reporter.log.pop(0) assert ('fail', t1) == reporter.log.pop(0) assert not reporter.log
def test_getargs_ok(self, reporter, dep_manager): def ok(): return {'x': 1} def check_x(my_x): return my_x == 1 t1 = Task('t1', [(ok, )]) n1 = ExecNode(t1, None) t2 = Task('t2', [(check_x, )], getargs={'my_x': ('t1', 'x')}) n2 = ExecNode(t2, None) tasks_dict = {'t1': t1, 't2': t2} my_runner = runner.Runner(dep_manager, reporter) # t2 gives chance for setup tasks to be executed assert False == my_runner.select_task(n2, tasks_dict) assert ('start', t2) == reporter.log.pop(0) # execute task t1 to calculate value assert True == my_runner.select_task(n1, tasks_dict) assert ('start', t1) == reporter.log.pop(0) t1_result = my_runner.execute_task(t1) assert ('execute', t1) == reporter.log.pop(0) my_runner.process_task_result(n1, t1_result) assert ('success', t1) == reporter.log.pop(0) # t2.options are set on select_task assert True == my_runner.select_task(n2, tasks_dict) assert not reporter.log assert {'my_x': 1} == t2.options
def test_getargs_fail(self, reporter, dep_manager): # invalid getargs. Exception wil be raised and task will fail def check_x(my_x): return True t1 = Task('t1', [lambda: True]) n1 = ExecNode(t1, None) t2 = Task('t2', [(check_x, )], getargs={'my_x': ('t1', 'x')}) n2 = ExecNode(t2, None) tasks_dict = {'t1': t1, 't2': t2} my_runner = runner.Runner(dep_manager, reporter) # t2 gives chance for setup tasks to be executed assert False == my_runner.select_task(n2, tasks_dict) assert ('start', t2) == reporter.log.pop(0) # execute task t1 to calculate value assert True == my_runner.select_task(n1, tasks_dict) assert ('start', t1) == reporter.log.pop(0) t1_result = my_runner.execute_task(t1) assert ('execute', t1) == reporter.log.pop(0) my_runner.process_task_result(n1, t1_result) assert ('success', t1) == reporter.log.pop(0) # select_task t2 fails assert False == my_runner.select_task(n2, tasks_dict) assert ('fail', t2) == reporter.log.pop(0) assert not reporter.log
def test_alwaysExecute(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])]) my_runner = runner.Runner(dep_manager, reporter, always_execute=True) my_runner.dep_manager.save_success(t1) assert True == my_runner.select_task(ExecNode(t1, None), {}) assert ('start', t1) == reporter.log.pop(0) assert not reporter.log
def test_ignore(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])]) my_runner = runner.Runner(dep_manager, reporter) my_runner.dep_manager.ignore(t1) assert False == my_runner.select_task(ExecNode(t1, None), {}) assert ('start', t1) == reporter.log.pop(0) assert ('ignore', t1) == reporter.log.pop(0) assert not reporter.log
def test_upToDate(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])], file_dep=[__file__]) my_runner = runner.Runner(dep_manager, reporter) my_runner.dep_manager.save_success(t1) assert False == my_runner.select_task(ExecNode(t1, None), {}) assert ('start', t1) == reporter.log.pop(0) assert ('up-to-date', t1) == reporter.log.pop(0) assert not reporter.log
def test_alwaysExecute(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])], uptodate=[True]) my_runner = runner.Runner(dep_manager, reporter, always_execute=True) my_runner.dep_manager.save_success(t1) n1 = ExecNode(t1, None) assert True == my_runner.select_task(n1, {}) # run_status is set to run even if task is up-to-date assert n1.run_status == 'run' assert ('start', t1) == reporter.log.pop(0) assert not reporter.log
def test_withSetup(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])], setup=["taskY"]) my_runner = runner.Runner(dep_manager, reporter) # defer execution n1 = ExecNode(t1, None) assert False == my_runner.select_task(n1, {}) assert ('start', t1) == reporter.log.pop(0) assert not reporter.log # trying to select again assert True == my_runner.select_task(n1, {}) assert not reporter.log
def test_reporter_runtime_error(self, reporter, dep_manager): t1 = Task('t1', [], calc_dep=['t2']) t2 = Task('t2', [lambda: {'file_dep':[1]}]) my_runner = runner.Runner(dep_manager, reporter) my_runner.run_all(TaskDispatcher({'t1':t1, 't2':t2}, [], ['t1', 't2'])) assert runner.ERROR == my_runner.final_result assert ('start', t2) == reporter.log.pop(0) assert ('execute', t2) == reporter.log.pop(0) assert ('success', t2) == reporter.log.pop(0) assert ('runtime_error',) == reporter.log.pop(0) assert not reporter.log
def test_reverse_order(self, reporter, depfile_name): def do_nothing(): pass t1 = Task('t1', [], teardown=[do_nothing]) t2 = Task('t2', [], teardown=[do_nothing]) my_runner = runner.Runner(Dependency, depfile_name, reporter) my_runner.teardown_list = [t1, t2] my_runner.teardown() assert ('teardown', t2) == reporter.log.pop(0) assert ('teardown', t1) == reporter.log.pop(0) assert not reporter.log
def test_reverse_order(self, reporter, dep_manager): def do_nothing():pass t1 = Task('t1', [], teardown=[do_nothing]) t2 = Task('t2', [], teardown=[do_nothing]) my_runner = runner.Runner(dep_manager, reporter) my_runner.teardown_list = [t1, t2] t1.execute(my_runner.stream) t2.execute(my_runner.stream) my_runner.teardown() assert ('teardown', t2) == reporter.log.pop(0) assert ('teardown', t1) == reporter.log.pop(0) assert not reporter.log
def test_ok(self, reporter, dep_manager): touched = [] def touch(): touched.append(1) t1 = Task('t1', [], teardown=[(touch,)]) my_runner = runner.Runner(dep_manager, reporter) my_runner.teardown_list = [t1] t1.execute(my_runner.stream) my_runner.teardown() assert 1 == len(touched) assert ('teardown', t1) == reporter.log.pop(0) assert not reporter.log
def test_getargs_dict(self, reporter, dep_manager): def ok(): return {'x':1} t1 = Task('t1', [(ok,)]) n1 = ExecNode(t1, None) t2 = Task('t2', None, getargs={'my_x':('t1', None)}) tasks_dict = {'t1': t1, 't2':t2} my_runner = runner.Runner(dep_manager, reporter) t1_result = my_runner.execute_task(t1) my_runner.process_task_result(n1, t1_result) # t2.options are set on _get_task_args my_runner._get_task_args(t2, tasks_dict) assert {'my_x': {'x':1}} == t2.options
def test_ok(self, reporter, depfile_name): touched = [] def touch(): touched.append(1) t1 = Task('t1', [], teardown=[(touch, )]) my_runner = runner.Runner(Dependency, depfile_name, reporter) my_runner.teardown_list = [t1] my_runner.teardown() assert 1 == len(touched) assert ('teardown', t1) == reporter.log.pop(0) assert not reporter.log
def test_getargs_group_value(self, reporter, dep_manager): def ok(): return {'x':1} t1 = Task('t1', None, task_dep=['t1:a'], has_subtask=True) t1a = Task('t1:a', [(ok,)], subtask_of='t1') t2 = Task('t2', None, getargs={'my_x':('t1', 'x')}) tasks_dict = {'t1': t1, 't1a':t1a, 't2':t2} my_runner = runner.Runner(dep_manager, reporter) t1a_result = my_runner.execute_task(t1a) my_runner.process_task_result(ExecNode(t1a, None), t1a_result) # t2.options are set on _get_task_args my_runner._get_task_args(t2, tasks_dict) assert {'my_x': {'a':1} } == t2.options
def test_errors(self, reporter, depfile_name): def raise_something(x): raise Exception(x) t1 = Task('t1', [], teardown=[(raise_something, ['t1 blow'])]) t2 = Task('t2', [], teardown=[(raise_something, ['t2 blow'])]) my_runner = runner.Runner(Dependency, depfile_name, reporter) my_runner.teardown_list = [t1, t2] my_runner.teardown() assert ('teardown', t2) == reporter.log.pop(0) assert ('cleanup_error', ) == reporter.log.pop(0) assert ('teardown', t1) == reporter.log.pop(0) assert ('cleanup_error', ) == reporter.log.pop(0) assert not reporter.log
def test_reporter_runtime_error(self, reporter, depfile_name): t1 = Task('t1', [], calc_dep=['t2']) t2 = Task('t2', [lambda: {'file_dep': [1]}]) my_runner = runner.Runner(Dependency, depfile_name, reporter) my_runner.run_all( TaskDispatcher({ 't1': t1, 't2': t2 }, [], ['t1', 't2'])) assert ('start', t2) == reporter.log.pop(0) assert ('execute', t2) == reporter.log.pop(0) assert ('success', t2) == reporter.log.pop(0) assert ('runtime_error', ) == reporter.log.pop(0) assert not reporter.log
def test_errors(self, reporter, dep_manager): def raise_something(x): raise Exception(x) t1 = Task('t1', [], teardown=[(raise_something,['t1 blow'])]) t2 = Task('t2', [], teardown=[(raise_something,['t2 blow'])]) my_runner = runner.Runner(dep_manager, reporter) my_runner.teardown_list = [t1, t2] t1.execute(my_runner.stream) t2.execute(my_runner.stream) my_runner.teardown() assert ('teardown', t2) == reporter.log.pop(0) assert ('cleanup_error',) == reporter.log.pop(0) assert ('teardown', t1) == reporter.log.pop(0) assert ('cleanup_error',) == reporter.log.pop(0) assert not reporter.log
def test_dependency_error_after_execution(self, dep_manager): t1 = Task("t1", [(my_print, ["out a"] )], file_dep=["i_dont_exist"], targets=['not_there']) reporter = FakeReporter(with_exceptions=True) my_runner = runner.Runner(dep_manager, reporter) # Missing file_dep is not caught because check is short-circuited by # missing target. my_runner.run_tasks(TaskDispatcher({'t1':t1}, [], ['t1'])) assert runner.ERROR == my_runner.finish() print(reporter.log) assert ('start', t1) == reporter.log.pop(0) assert ('execute', t1) == reporter.log.pop(0) fail_log = reporter.log.pop(0) assert ('fail', t1) == fail_log[:2] assert "Dependent file 'i_dont_exist' does not exist" in str(fail_log[2]) assert not reporter.log
def test_getargs_group(self, reporter, depfile_name): def ok(): return {'x': 1} t1 = Task('t1', None, task_dep=['t1:a'], has_subtask=True) t1a = Task('t1:a', [(ok, )], is_subtask=True) t2 = Task('t2', None, getargs={'my_x': ('t1', None)}) tasks_dict = {'t1': t1, 't1a': t1a, 't2': t2} my_runner = runner.Runner(Dependency, depfile_name, reporter) t1a_result = my_runner.execute_task(t1a) my_runner.process_task_result(ExecNode(t1a, None), t1a_result) # t2.options are set on _get_task_args assert {} == t2.options my_runner._get_task_args(t2, tasks_dict) assert {'my_x': {'a': {'x': 1}}} == t2.options
def testInit(self, reporter, dep_manager): my_runner = runner.Runner(dep_manager, reporter) assert False == my_runner._stop_running assert runner.SUCCESS == my_runner.final_result
def test_noSetup_ok(self, reporter, dep_manager): t1 = Task("taskX", [(my_print, ["out a"])]) my_runner = runner.Runner(dep_manager, reporter) assert True == my_runner.select_task(ExecNode(t1, None), {}) assert ('start', t1) == reporter.log.pop(0) assert not reporter.log
def testInit(self, reporter, depfile_name): my_runner = runner.Runner(Dependency, depfile_name, reporter) assert False == my_runner._stop_running assert runner.SUCCESS == my_runner.final_result
def test_ready(self, reporter, depfile_name): t1 = Task("taskX", [(my_print, ["out a"])]) my_runner = runner.Runner(Dependency, depfile_name, reporter) assert True == my_runner.select_task(ExecNode(t1, None), {}) assert ('start', t1) == reporter.log.pop(0) assert not reporter.log