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'
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)
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'
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'
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)