def test_measure_persistence(measure_workbench, measure, tmpdir, monkeypatch): """Test saving and reloading a measure. """ measure_workbench.register(TasksManagerManifest()) plugin = measure_workbench.get_plugin('ecpy.measure') for m_e in ('meas_name', 'meas_id', 'meas_date'): assert m_e in measure.root_task.database_entries measure.add_tool('pre-hook', 'dummy') measure.root_task.default_path = 'test' measure.pre_hooks['dummy'].fail_check = True path = str(tmpdir.join('test.meas.ini')) measure.save(path) assert measure.path == path loaded, errors = Measure.load(plugin, path) assert loaded.root_task.default_path == 'test' assert loaded.pre_hooks['dummy'].fail_check assert loaded.path == path assert not errors # Test handling errors : root_task rebuilding and tool rebuilding. class CommandError(Exception): pass def generate_err(self, cmd, infos, u=None): raise CommandError() from enaml.workbench.core.core_plugin import CorePlugin old = CorePlugin.invoke_command monkeypatch.setattr(CorePlugin, 'invoke_command', generate_err) loaded, errors = Measure.load(plugin, path) assert loaded is None assert 'main task' in errors and 'CommandError' in errors['main task'] CorePlugin.invoke_command = old class CreationError(Exception): pass class Fail(object): def new(self, workbench, default=True): raise CreationError() plugin._pre_hooks.contributions['dummy'] = Fail() loaded, errors = Measure.load(plugin, path) assert loaded is None assert 'pre-hook' in errors and 'dummy' in errors['pre-hook'] assert 'CreationError' in errors['pre-hook']['dummy']
def test_stopping_processing_in_hook(processor, measure_with_tools): """Test stopping processing while running a hook. """ plugin = processor.plugin.workbench.get_plugin('ecpy.measure') measure2 = Measure(plugin=plugin, root_task=RootTask(), name='Dummy', id='002') processor.plugin.enqueued_measures.add(measure2) measure = measure_with_tools processor.start_measure(measure) process_and_assert(getattr, (processor, 'active')) pre_hook = measure.pre_hooks['dummy'] process_and_assert(pre_hook.waiting.wait, (5, )) process_app_events() processor.stop_processing(no_post_exec=True) pre_hook.go_on.set() def wait(timeout): processor._thread.join(timeout) return not processor._thread.is_alive() wait_and_process(wait) assert measure.status == 'INTERRUPTED' m = processor.plugin.workbench.get_manifest('test.measure') assert not m.find('runtime_dummy1').collected assert not m.find('runtime_dummy2').collected assert measure2.status == 'READY'
def test_measure_persistence(measure_workbench, measure, tmpdir, monkeypatch): """Test saving and reloading a measure. """ measure_workbench.register(TasksManagerManifest()) plugin = measure_workbench.get_plugin('ecpy.measure') measure.add_tool('pre-hook', 'dummy') measure.root_task.default_path = 'test' measure.pre_hooks['dummy'].fail_check = True path = str(tmpdir.join('test.meas.ini')) measure.save(path) assert measure.path == path loaded, errors = Measure.load(plugin, path) assert loaded.root_task.default_path == 'test' assert loaded.pre_hooks['dummy'].fail_check assert loaded.path == path assert not errors # Test handling errors : root_task rebuilding and tool rebuilding. class CommandError(Exception): pass def generate_err(self, cmd, infos, u=None): raise CommandError() from enaml.workbench.core.core_plugin import CorePlugin monkeypatch.setattr(CorePlugin, 'invoke_command', generate_err) class CreationError(Exception): pass class Fail(object): def new(self, workbench, default=True): raise CreationError() plugin._pre_hooks.contributions['dummy'] = Fail() loaded, errors = Measure.load(plugin, path) assert loaded is None assert 'main task' in errors and 'CommandError' in errors['main task'] assert 'pre-hook' in errors and 'dummy' in errors['pre-hook'] assert 'CreationError' in errors['pre-hook']['dummy']
def measure(measure_workbench): """Register the dummy testing tools and create an empty measure. """ try: measure_workbench.register(MeasureTestManifest()) except ValueError: pass plugin = measure_workbench.get_plugin('ecpy.measure') measure = Measure(plugin=plugin, root_task=RootTask(), name='Dummy', id='001') return measure
def test_running_full_measure(app, processor, measure_with_tools, windows, dialog_sleep, tmpdir): """Test running a complete measure with pre/post-hooks and monitor. """ plugin = processor.plugin.workbench.get_plugin('ecpy.measure') measure2 = Measure(plugin=plugin, root_task=RootTask(), name='Dummy', id='002') processor.plugin.enqueued_measures.add(measure2) measure = measure_with_tools processor.continuous_processing = False processor.start_measure(measure) process_and_assert(getattr, (processor, 'active')) pre_hook = measure.pre_hooks['dummy'] process_and_assert(pre_hook.waiting.wait, (5, )) assert measure is processor.running_measure assert measure.status == 'RUNNING' assert tmpdir.listdir() pre_hook.go_on.set() wait_and_process(processor.engine.waiting.wait) assert processor.monitors_window assert processor.monitors_window.measure is measure assert measure.monitors['dummy'].running sleep(dialog_sleep) processor.engine.go_on.set() post_hook = measure.post_hooks['dummy'] wait_and_process(post_hook.waiting.wait) assert measure.task_execution_result assert not measure.monitors['dummy'].running assert measure.monitors['dummy'].received_news post_hook.go_on.set() process_and_join_thread(processor._thread) assert measure.status == 'COMPLETED' m = processor.plugin.workbench.get_manifest('test.measure') assert not m.find('runtime_dummy1').collected assert not m.find('runtime_dummy2').collected assert measure2.status == 'READY'
def test_converting_a_measure(measure_workbench, meas_file, tmpdir, monkeypatch): """Test converting a measure created using HQCMeas to make it run on Ecpy. """ from ecpy.measure.monitors.text_monitor import monitor monkeypatch.setattr(monitor, 'information', lambda *args, **kwargs: 1) measure_workbench.register(TasksManagerManifest()) measure_workbench.register(HqcLegacyManifest()) plugin = measure_workbench.get_plugin('ecpy.measure') path = convert_measure(os.path.join(MEASURE_DIRECTORY, meas_file), dest_folder=str(tmpdir)) res, errors = Measure.load(plugin, path) with open(path) as f: print(errors.get('main task'), f.read()) assert res
def test_stopping_processing_while_in_pause(processor, measure_with_tools): """Test stopping processing while in pause before starting main. """ plugin = processor.plugin.workbench.get_plugin('ecpy.measure') measure2 = Measure(plugin=plugin, root_task=RootTask(), name='Dummy', id='002') processor.plugin.enqueued_measures.add(measure2) def wait_on_state_paused(timeout): return processor._state.wait(timeout, 'paused') measure = measure_with_tools processor.start_measure(measure) pre_hook = measure.pre_hooks['dummy'] assert pre_hook.waiting.wait(5) process_app_events() processor.pause_measure() pre_hook.accept_pause = False pre_hook.go_on.set() wait_and_process(wait_on_state_paused) processor.stop_processing(no_post_exec=True) sleep(0.2) def wait(timeout): processor._thread.join(timeout) return not processor._thread.is_alive() wait_and_process(wait) assert measure.status == 'INTERRUPTED' m = processor.plugin.workbench.get_manifest('test.measure') assert not m.find('runtime_dummy1').collected assert not m.find('runtime_dummy2').collected assert measure2.status == 'READY'