示例#1
0
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']
示例#2
0
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'
示例#3
0
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']
示例#4
0
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
示例#5
0
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'
示例#6
0
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
示例#7
0
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'