def tasks(): return { 'SimpleTask': TaskInfos(cls=SimpleTask, metadata={'meta': True}), 'ComplexTask': TaskInfos(cls=ComplexTask, metadata={ 'group': 'Complex', 'meta': False }) }
def test_register_interface_decl_children2(int_decl, collector): """Test handling child type issue when extending. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos() collector.contributions['ecpy.Task'] = infos task, interface = int_decl task.task = 'ecpy.Task' interface.interface = 'Test' interface.insert_children(None, [Task()]) tb = {} task.register(collector, tb) assert ('ecpy.Task:Test' in tb and 'Interface' in tb['ecpy.Task:Test'])
def test_analysing_instr_task_dependencies(monkeypatch, task_workbench, task_dep_collector, profile_dep_collector, driver_dep_collector): """Test analysing the dependencies of a task. """ plugin = task_workbench.get_plugin('ecpy.tasks') plugin._tasks.contributions['ecpy.InstrumentTask'] =\ TaskInfos(cls=InstrumentTask, instruments=['test']) dep = set() errors = dict() t = InstrumentTask(selected_instrument=('test', 'dummy', 'c', None)) run = task_dep_collector.analyse(task_workbench, t, getattr, dep, errors) assert run == { 'ecpy.tasks.instruments.drivers', 'ecpy.tasks.instruments.profiles' } assert 'ecpy.InstrumentTask' in dep assert not errors dep.clear() profile_dep_collector.analyse(task_workbench, t, dep, errors) assert 'test' in dep assert not errors dep.clear() driver_dep_collector.analyse(task_workbench, t, dep, errors) assert 'dummy' in dep assert not errors
def test_register_interface_decl_children2(int_decl, collector): """Test handling child type issue when extending. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos() collector.contributions['ecpy.Task'] = infos task, interface = int_decl task.task = 'ecpy.Task' interface.interface = 'Test' interface.insert_children(None, [Task()]) tb = {} task.register(collector, tb) assert 'ecpy.Task.Test' in tb and 'Interface' in tb['ecpy.Task.Test']
def exec_infos(measure_workbench, measure, tmpdir, process_engine, sync_server): tp = measure_workbench.get_plugin('ecpy.tasks') tp._tasks.contributions['tests.WaitingTask'] = TaskInfos(cls=WaitingTask) r = RootTask(default_path=text(tmpdir)) r.add_child_task(0, WaitingTask(name='test1', sock_id='test1', sync_port=sync_server.port)) r.add_child_task(1, WaitingTask(name='test2', sock_id='test2', sync_port=sync_server.port)) measure.root_task = r deps = measure.dependencies res, msg, errors = deps.collect_runtimes() assert res return ExecutionInfos( id='test', task=r, build_deps=deps.get_build_dependencies().dependencies, runtime_deps=deps.get_runtime_dependencies('main'), observed_entries=['test'], checks=not measure.forced_enqueued, )
def test_register_interface_extend_task(collector, int_decl): """Test extending a task by adding interfaces. """ collector.contributions['ecpy.Task'] = TaskInfos() task, _ = int_decl task.task = 'ecpy.Task' task.register(collector, {}) assert collector.contributions['ecpy.Task'].interfaces
def instr_task_workbench(prof_plugin): """Workbench with instrument and task support and patched task. """ w = prof_plugin.workbench w.register(TasksManagerManifest()) p = w.get_plugin('ecpy.tasks') infos = TaskInfos(cls=InterInstrTask, instruments=['tests.test.FalseDriver']) infos.interfaces = {'test.I': InterfaceInfos(cls=TaskInterface, parent=infos, instruments=['tests.test.FalseDriver4', 'tests.test.FalseDriver2'], ) } p._tasks.contributions['ecpy.InstrumentTask'] = infos return w
def test_register_interface_extend_interface1(collector, int_decl): """Test extending an interface. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos() collector.contributions['ecpy.Task'] = infos task, interface = int_decl task.task = 'ecpy.Task' interface.interface = 'Test' interface.instruments = ['test'] interface.dependencies = ['dep'] task.register(collector, {}) interface = collector.contributions['ecpy.Task'].interfaces['Test'] assert interface.instruments == {'test'} assert 'dep' in interface.dependencies
def test_register_interface_decl_duplicate1(int_decl, collector): """Test handling duplicate : in collector. """ tb = {} task, i = int_decl infos = TaskInfos(interfaces={'ecpy.IterableLoopInterface': None}) collector.contributions[task.id] = infos i.register(collector, tb) assert 'ecpy.LoopTask:ecpy.IterableLoopInterface_duplicate1' in tb
def test_register_interface_extend_interface1(collector, int_decl): """Test extending an interface. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos() collector.contributions['ecpy.Task'] = infos task, interface = int_decl task.task = 'ecpy.Task' interface.interface = 'Test' interface.instruments = ['test'] interface.dependencies = ['dep'] task.register(collector, {}) interface = collector.contributions['ecpy.Task'].interfaces['Test'] assert interface.instruments == {'test'} assert 'dep' in interface.dependencies assert len(interface.dependencies) == 3
def test_register_task_decl_extend3(collector, task_decl): """Test extending a task using wrong children. """ tb = {} collector.contributions['ecpy.Task'] = TaskInfos() task_decl.task = 'ecpy.Task' task_decl.insert_children(None, [Task()]) task_decl.register(collector, tb) assert 'ecpy.Task' in tb
def test_unregister_interface_decl4(collector, int_decl): """Test unregistering an interface simply contributing instruments. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos() collector.contributions['ecpy.Task'] = infos task, interface = int_decl task.task = 'ecpy.Task' interface.interface = 'Test' interface.instruments = ['test'] interface.dependencies = ['dep'] task.register(collector, {}) interface = collector.contributions['ecpy.Task'].interfaces['Test'] assert interface.instruments == {'test'} task.unregister(collector) assert not interface.instruments assert not interface.dependencies
def test_nested_interfaces_extend1(nested_int_decl, collector): """Test registering, unregistering an interface extending an interface to an interface. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos(interfaces={'Nested': InterfaceInfos()}) collector.contributions['ecpy.Task'] = infos task, interface = nested_int_decl task.task = 'ecpy.Task' interface.parent.interface = 'Test' interface.interface = 'Nested' interface.instruments = ['test'] task.register(collector, {}) i = collector.contributions['ecpy.Task'].interfaces['Test'] assert i.interfaces['Nested'].instruments == {'test'} interface.parent.unregister(collector)
def test_nested_interfaces_extend1(nested_int_decl, collector): """Test registering, unregistering an interface extending an interface to an interface. """ infos = TaskInfos() infos.interfaces['Test'] = InterfaceInfos( interfaces={'Nested': InterfaceInfos()}) collector.contributions['ecpy.Task'] = infos task, interface = nested_int_decl task.task = 'ecpy.Task' interface.parent.interface = 'Test' interface.interface = 'Nested' interface.instruments = ['test'] task.register(collector, {}) i = collector.contributions['ecpy.Task'].interfaces['Test'] assert i.interfaces['Nested'].instruments == {'test'} interface.parent.unregister(collector)
def instr_task_workbench(prof_plugin): """Workbench with instrument and task support and patched task. """ w = prof_plugin.workbench w.register(TasksManagerManifest()) p = w.get_plugin('ecpy.tasks') infos = TaskInfos(cls=InterInstrTask, instruments=['tests.test.FalseDriver']) infos.interfaces = { 'test.I': InterfaceInfos( cls=TaskInterface, parent=infos, instruments=['tests.test.FalseDriver4', 'tests.test.FalseDriver2'], ) } p._tasks.contributions['ecpy.InstrumentTask'] = infos return w
def test_unregister_task_decl3(collector, task_decl): """Test unregistering a task simply contributing instruments. """ collector.contributions['ecpy.Task'] = TaskInfos() task_decl.task = 'Task' task_decl.instruments = ['test'] task_decl.dependencies = ['dep'] task_decl.register(collector, {}) task_decl.unregister(collector) assert not collector.contributions['ecpy.Task'].instruments assert not collector.contributions['ecpy.Task'].dependencies
def test_register_task_decl_extend1(collector, task_decl): """Test extending a task. """ collector.contributions['ecpy.Task'] = TaskInfos() task_decl.task = 'ecpy.Task' task_decl.instruments = ['test'] task_decl.dependencies = ['dep'] task_decl.register(collector, {}) infos = collector.contributions['ecpy.Task'] assert infos.instruments == set(['test']) assert infos.dependencies == set(['dep'])
def test_analysing_instr_interface_dependencies(monkeypatch, task_workbench, interface_dep_collector, i_profile_dep_collector, i_driver_dep_collector): """Test analysing the dependencies of an interface. """ class FalseI(TaskInterface): __slots__ = ('__dict__') plugin = task_workbench.get_plugin('ecpy.tasks') p_infos = TaskInfos(cls=InstrumentTask, instruments=['test']) plugin._tasks.contributions['ecpy.InstrumentTask'] = p_infos p_infos.interfaces['tests.FalseI'] =\ InterfaceInfos(cls=FalseI, instruments=['test'], parent=p_infos) dep = set() errors = dict() i = FalseI() t = InstrumentTask(selected_instrument=('test', 'dummy', 'c', None)) i.task = t run = interface_dep_collector.analyse(task_workbench, i, getattr, dep, errors) assert run == { INSTR_RUNTIME_INTERFACE_DRIVERS_ID, INSTR_RUNTIME_INTERFACE_PROFILES_ID } assert 'ecpy.InstrumentTask:tests.FalseI' in dep assert not errors dep.clear() i_profile_dep_collector.analyse(task_workbench, i, dep, errors) assert 'test' in dep assert not errors dep.clear() i_driver_dep_collector.analyse(task_workbench, i, dep, errors) assert 'dummy' in dep assert not errors i.selected_instrument = ('test2', 'dummy2', 'c', None) dep.clear() i_profile_dep_collector.analyse(task_workbench, i, dep, errors) assert 'test2' in dep assert not errors dep.clear() i_driver_dep_collector.analyse(task_workbench, i, dep, errors) assert 'dummy2' in dep assert not errors
def test_register_interface_extend_interface2(collector, int_decl): """Test extending an interface not yet declared. """ collector.contributions['ecpy.Task'] = TaskInfos() task, interface = int_decl task.task = 'ecpy.Task' interface.interface = 'Test' interface.instruments = ['test'] task.register(collector, {}) assert collector._delayed == [interface]