def test_creation_for_temporary_errors(): error = Exception() outcome = HandlerOutcome(final=False, exception=error, delay=123) assert not outcome.final assert outcome.delay == 123 assert outcome.result is None assert outcome.exception is error
def test_creation_for_permanent_errors(): error = Exception() outcome = HandlerOutcome(final=True, exception=error) assert outcome.final assert outcome.delay is None assert outcome.result is None assert outcome.exception is error
def test_creation_for_results(): result = HandlerResult(object()) outcome = HandlerOutcome(final=True, result=result) assert outcome.final assert outcome.delay is None assert outcome.result is result assert outcome.exception is None
def test_activity_error_exception(): outcome = HandlerOutcome(final=True) outcomes: Mapping[HandlerId, HandlerOutcome] outcomes = {HandlerId('id'): outcome} error = ActivityError("message", outcomes=outcomes) assert str(error) == "message" assert error.outcomes == outcomes
def test_set_awake_time(handler, expected, body, delay): origbody = copy.deepcopy(body) patch = {} state = State.from_body(body=body, handlers=[handler]) state = state.with_outcomes( outcomes={handler.id: HandlerOutcome(final=False, delay=delay)}) state.store(patch=patch) assert patch['status']['kopf']['progress']['some-id'].get( 'delayed') == expected assert body == origbody # not modified
def test_asap_takes_the_least_retried(mocker): handler1 = mocker.Mock(id='id1', spec_set=['id']) handler2 = mocker.Mock(id='id2', spec_set=['id']) handler3 = mocker.Mock(id='id3', spec_set=['id']) # Set the pre-existing state, and verify that it was set properly. state = State.from_scratch(handlers=[handler1, handler2, handler3]) state = state.with_outcomes({handler1.id: HandlerOutcome(final=False)}) state = state.with_outcomes({handler1.id: HandlerOutcome(final=False)}) state = state.with_outcomes({handler3.id: HandlerOutcome(final=False)}) assert state[handler1.id].retries == 2 assert state[handler2.id].retries == 0 assert state[handler3.id].retries == 1 handlers = [handler1, handler2, handler3] selected = kopf.lifecycles.asap(handlers, state=state) assert isinstance(selected, (tuple, list)) assert len(selected) == 1 assert selected[0] is handler2
def test_store_success(handler, expected_retries, expected_stopped, body): origbody = copy.deepcopy(body) patch = {} state = State.from_body(body=body, handlers=[handler]) state = state.with_outcomes( outcomes={handler.id: HandlerOutcome(final=True)}) state.store(patch=patch) assert patch['status']['kopf']['progress']['some-id']['success'] is True assert patch['status']['kopf']['progress']['some-id']['failure'] is False assert patch['status']['kopf']['progress']['some-id'][ 'retries'] == expected_retries assert patch['status']['kopf']['progress']['some-id'][ 'stopped'] == expected_stopped assert patch['status']['kopf']['progress']['some-id']['message'] is None assert body == origbody # not modified
def test_store_result(handler, expected_patch, result): patch = {} outcomes = {handler.id: HandlerOutcome(final=True, result=result)} deliver_results(outcomes=outcomes, patch=patch) assert patch == expected_patch
def test_creation_for_ignored_handlers(): outcome = HandlerOutcome(final=True) assert outcome.final assert outcome.delay is None assert outcome.result is None assert outcome.exception is None