Пример #1
0
def test_run_after_success_function_when_second_stage_succeeds():
    state = {'state': 'start'}

    def do_first(stage):
        assert state['state'] == 'start'
        state['state'] = 'first'
        stage.set_result(
            PrepareSuccess(statuses=(),
                           command_exec_info=None,
                           environ=dict(),
                           overrides=UserConfigOverrides(),
                           env_spec_name='foo'),
            [])

        def last(stage):
            assert state['state'] == 'first'
            state['state'] = 'second'
            stage.set_result(
                PrepareSuccess(statuses=(),
                               command_exec_info=None,
                               environ=dict(),
                               overrides=UserConfigOverrides(),
                               env_spec_name='bar'),
                [])
            return None

        return _FunctionPrepareStage(dict(), UserConfigOverrides(), "second", [], last)

    first_stage = _FunctionPrepareStage(dict(), UserConfigOverrides(), "first", [], do_first)

    def after(updated_statuses):
        assert state['state'] == 'second'
        state['state'] = 'after'

    stage = _after_stage_success(first_stage, after)

    assert stage.overrides is first_stage.overrides
    assert stage.description_of_action == first_stage.description_of_action
    assert stage.environ == first_stage.environ
    assert stage.statuses_before_execute is first_stage.statuses_before_execute
    stage.configure()  # checking it doesn't raise

    while stage is not None:
        next_stage = stage.execute()

        if hasattr(stage, '_stage'):
            assert stage.statuses_after_execute is stage._stage.statuses_after_execute
            assert stage.failed is stage._stage.failed

        result = stage.result
        if result.failed:
            assert stage.failed
            break
        else:
            assert not stage.failed
        stage = next_stage
    assert not result.failed
    assert state['state'] == 'after'
Пример #2
0
def _no_op_prepare(config_context):
    def _do_nothing(stage):
        stage.set_result(
            PrepareSuccess(logs=[],
                           statuses=(),
                           command_exec_info=None,
                           environ=dict(),
                           overrides=UserConfigOverrides()),
            [])
        return None

    return _FunctionPrepareStage(dict(), UserConfigOverrides(), "Do Nothing", [], _do_nothing, config_context)
Пример #3
0
def test_run_after_success_function_when_second_stage_succeeds():
    state = {'state': 'start'}

    def do_first(stage):
        assert state['state'] == 'start'
        state['state'] = 'first'
        stage.set_result(
            PrepareSuccess(logs=[],
                           statuses=(),
                           command_exec_info=None,
                           environ=dict(),
                           overrides=UserConfigOverrides()),
            [])

        def last(stage):
            assert state['state'] == 'first'
            state['state'] = 'second'
            stage.set_result(
                PrepareSuccess(logs=[],
                               statuses=(),
                               command_exec_info=None,
                               environ=dict(),
                               overrides=UserConfigOverrides()),
                [])
            return None

        return _FunctionPrepareStage(dict(), UserConfigOverrides(), "second", [], last)

    first_stage = _FunctionPrepareStage(dict(), UserConfigOverrides(), "first", [], do_first)

    def after(updated_statuses):
        assert state['state'] == 'second'
        state['state'] = 'after'

    stage = _after_stage_success(first_stage, after)
    assert stage.overrides is first_stage.overrides
    while stage is not None:
        next_stage = stage.execute()
        result = stage.result
        if result.failed:
            assert stage.failed
            break
        else:
            assert not stage.failed
        stage = next_stage
    assert not result.failed
    assert state['state'] == 'after'
Пример #4
0
def test_skip_after_success_function_when_second_stage_fails():
    state = {'state': 'start'}

    def do_first(stage):
        assert state['state'] == 'start'
        state['state'] = 'first'
        stage.set_result(
            PrepareSuccess(logs=[],
                           statuses=(),
                           command_exec_info=None,
                           environ=dict(),
                           overrides=UserConfigOverrides()),
            [])

        def last(stage):
            assert state['state'] == 'first'
            state['state'] = 'second'
            stage.set_result(
                PrepareFailure(logs=[],
                               statuses=(),
                               errors=[],
                               environ=dict(),
                               overrides=UserConfigOverrides()),
                [])
            return None

        return _FunctionPrepareStage(dict(), UserConfigOverrides(), "second", [], last)

    first_stage = _FunctionPrepareStage(dict(), UserConfigOverrides(), "first", [], do_first)

    def after(updated_statuses):
        raise RuntimeError("should not have been called")

    stage = _after_stage_success(first_stage, after)
    assert stage.overrides is first_stage.overrides
    assert isinstance(stage.environ, dict)
    while stage is not None:
        next_stage = stage.execute()
        result = stage.result
        if result.failed:
            assert stage.failed
            break
        else:
            assert not stage.failed
        stage = next_stage
    assert result.failed
    assert state['state'] == 'second'
Пример #5
0
    def do_first(stage):
        assert state['state'] == 'start'
        state['state'] = 'first'
        stage.set_result(
            PrepareSuccess(
                statuses=(),
                command_exec_info=None,
                environ=dict(),
                overrides=UserConfigOverrides(),
                env_spec_name='first'), [])

        def last(stage):
            assert state['state'] == 'first'
            state['state'] = 'second'
            stage.set_result(
                PrepareFailure(
                    statuses=(), errors=[], environ=dict(), overrides=UserConfigOverrides(), env_spec_name='last'), [])
            return None

        return _FunctionPrepareStage(dict(), UserConfigOverrides(), "second", [], last)