Beispiel #1
0
 def test_dictionary_key(self):
     e = {}
     d1 = DecisionId(DecisionTarget.ACTIVITY, 123)
     d2 = DecisionId(DecisionTarget.CHILD_WORKFLOW, 456)
     e[d1] = "abc"
     e[d2] = "def"
     self.assertEqual(e[d1], "abc")
     self.assertEqual(e[d2], "def")
Beispiel #2
0
 def test_get_decisions_none(self):
     state_machine: DecisionStateMachine = Mock()
     state_machine.get_decision = MagicMock(return_value=None)
     self.decider.decisions[DecisionId(DecisionTarget.ACTIVITY,
                                       10)] = state_machine
     decisions = self.decider.get_decisions()
     self.assertEqual(0, len(decisions))
 def schedule_activity_task(self, schedule: ScheduleActivityTaskDecisionAttributes) -> int:
     # PORT: addAllMissingVersionMarker(false, Optional.empty());
     next_decision_event_id = self.next_decision_event_id
     decision_id = DecisionId(DecisionTarget.ACTIVITY, next_decision_event_id)
     self.activity_id_to_scheduled_event_id[schedule.activity_id] = next_decision_event_id
     self.add_decision(decision_id, ActivityDecisionStateMachine(decision_id, schedule_attributes=schedule))
     return next_decision_event_id
 def cancel_timer(self, start_event_id: int, immediate_cancellation_callback: Callable):
     decision: DecisionStateMachine = self.get_decision(DecisionId(DecisionTarget.TIMER, start_event_id))
     if decision.is_done():
         return True
     if decision.cancel(immediate_cancellation_callback):
         self.next_decision_event_id += 1
     return decision.is_done()
Beispiel #5
0
 def test_get_decisions(self):
     decision = Decision()
     state_machine: DecisionStateMachine = Mock()
     state_machine.get_decision = MagicMock(return_value=decision)
     self.decider.decisions[DecisionId(DecisionTarget.ACTIVITY, 10)] = state_machine
     decisions = self.decider.get_decisions()
     self.assertEqual(1, len(decisions))
     self.assertIs(decision, decisions[0])
Beispiel #6
0
 def start_timer(self, request: StartTimerDecisionAttributes):
     start_event_id = self.next_decision_event_id
     decision_id = DecisionId(DecisionTarget.TIMER, start_event_id)
     self.add_decision(
         decision_id,
         TimerDecisionStateMachine(decision_id,
                                   start_timer_attributes=request))
     return start_event_id
Beispiel #7
0
 def test_handle_activity_task_scheduled(self):
     state_machine: DecisionStateMachine = Mock()
     self.decider.decisions[DecisionId(DecisionTarget.ACTIVITY, 10)] = state_machine
     event = HistoryEvent(event_id=10)
     self.decider.handle_activity_task_scheduled(event)
     state_machine.handle_initiated_event.assert_called()
     args, kwargs = state_machine.handle_initiated_event.call_args_list[0]
     self.assertIn(event, args)
Beispiel #8
0
 def test_activity_task_closed(self):
     state_machine: DecisionStateMachine = Mock()
     state_machine.is_done = MagicMock(return_value=True)
     self.decider.decisions[DecisionId(DecisionTarget.ACTIVITY, 10)] = state_machine
     ret = self.decider.handle_activity_task_closed(10)
     self.assertTrue(ret)
     state_machine.handle_completion_event.assert_called_once()
     state_machine.is_done.assert_called_once()
Beispiel #9
0
 def test_schedule_activity_task(self):
     schedule_attributes = ScheduleActivityTaskDecisionAttributes()
     self.decider.schedule_activity_task(schedule_attributes)
     expected_decision_id = DecisionId(DecisionTarget.ACTIVITY, 0)
     self.assertEqual(1, self.decider.next_decision_event_id)
     self.assertEqual(1, len(self.decider.decisions))
     state_machine: ActivityDecisionStateMachine = self.decider.decisions[expected_decision_id]
     self.assertIs(schedule_attributes, state_machine.schedule_attributes)
     self.assertEqual(expected_decision_id, state_machine.id)
def test_start_timer(decider):
    request = StartTimerDecisionAttributes()
    assert decider.start_timer(request) == DECISION_EVENT_ID
    decision_id = DecisionId(DecisionTarget.TIMER, DECISION_EVENT_ID)
    assert decision_id in decider.decisions
    state_machine = decider.decisions[decision_id]
    assert isinstance(state_machine, TimerDecisionStateMachine)
    assert state_machine.id == decision_id
    assert state_machine.start_timer_attributes == request
 def cancel_workflow_execution(self):
     logger.info("Canceling workflow: %s", self.execution_id)
     decision = Decision()
     attr = CancelWorkflowExecutionDecisionAttributes()
     attr.details = None
     decision.cancel_workflow_execution_decision_attributes = attr
     decision.decision_type = DecisionType.CancelWorkflowExecution
     decision_id = DecisionId(DecisionTarget.SELF, 0)
     self.add_decision(decision_id, CompleteWorkflowStateMachine(decision_id, decision))
     self.completed = True
 def complete_workflow_execution(self, ret_value):
     # PORT: addAllMissingVersionMarker(false, Optional.empty());
     decision = Decision()
     attr = CompleteWorkflowExecutionDecisionAttributes()
     attr.result = json.dumps(ret_value)
     decision.complete_workflow_execution_decision_attributes = attr
     decision.decision_type = DecisionType.CompleteWorkflowExecution
     decision_id = DecisionId(DecisionTarget.SELF, 0)
     self.add_decision(decision_id, CompleteWorkflowStateMachine(decision_id, decision))
     self.completed = True
 def fail_workflow_execution(self, exception):
     # PORT: addAllMissingVersionMarker(false, Optional.empty());
     decision = Decision()
     fail_attributes = FailWorkflowExecutionDecisionAttributes()
     fail_attributes.reason = "WorkflowFailureException"
     fail_attributes.details = serialize_exception(exception)
     decision.fail_workflow_execution_decision_attributes = fail_attributes
     decision.decision_type = DecisionType.FailWorkflowExecution
     decision_id = DecisionId(DecisionTarget.SELF, 0)
     self.add_decision(decision_id, CompleteWorkflowStateMachine(decision_id, decision))
     self.completed = True
 def record_marker(self, marker_name: str, header: Header, details: bytes):
     marker = RecordMarkerDecisionAttributes()
     marker.marker_name = marker_name
     marker.header = header
     marker.details = details
     decision = Decision()
     decision.decision_type = DecisionType.RecordMarker
     decision.record_marker_decision_attributes = marker
     next_decision_event_id = self.decider.next_decision_event_id
     decision_id = DecisionId(DecisionTarget.MARKER, next_decision_event_id)
     self.decider.add_decision(decision_id, MarkerDecisionStateMachine(id=decision_id, decision=decision))
 def setUp(self) -> None:
     self.schedule_attributes = ScheduleActivityTaskDecisionAttributes()
     self.schedule_attributes.activity_id = "123"
     self.state_machine: ActivityDecisionStateMachine = ActivityDecisionStateMachine(
         DecisionId(DecisionTarget.ACTIVITY, 888),
         schedule_attributes=self.schedule_attributes)
Beispiel #16
0
 def handle_activity_task_scheduled(self, event: HistoryEvent):
     decision = self.get_decision(
         DecisionId(DecisionTarget.ACTIVITY, event.event_id))
     decision.handle_initiated_event(event)
Beispiel #17
0
 def handle_activity_task_started(self, event: HistoryEvent):
     attr = event.activity_task_started_event_attributes
     decision = self.get_decision(
         DecisionId(DecisionTarget.ACTIVITY, attr.scheduled_event_id))
     decision.handle_started_event(event)
Beispiel #18
0
 def test_notify_decision_sent(self):
     state_machine: DecisionStateMachine = Mock()
     self.decider.decisions[DecisionId(DecisionTarget.ACTIVITY,
                                       10)] = state_machine
     self.decider.notify_decision_sent()
     state_machine.handle_decision_task_started_event.assert_called_once()
Beispiel #19
0
 def handle_activity_task_closed(self, scheduled_event_id: int) -> bool:
     decision: DecisionStateMachine = self.get_decision(
         DecisionId(DecisionTarget.ACTIVITY, scheduled_event_id))
     assert decision
     decision.handle_completion_event()
     return decision.is_done()
Beispiel #20
0
 def test_get_decision(self):
     state_machine = DecisionStateMachine()
     decision_id = DecisionId(DecisionTarget.ACTIVITY, 20)
     self.decider.decisions[decision_id] = state_machine
     self.assertIs(state_machine, self.decider.get_decision(decision_id))
Beispiel #21
0
 def test_get_decision_not_found(self):
     decision_id = DecisionId(DecisionTarget.ACTIVITY, 20)
     with self.assertRaises(NonDeterministicWorkflowException):
         self.decider.get_decision(decision_id)
 def setUp(self) -> None:
     self.state_machine = DecisionStateMachineBase(
         DecisionId(DecisionTarget.ACTIVITY, 123))
Beispiel #23
0
 def handle_timer_closed(self,
                         attributes: TimerFiredEventAttributes) -> bool:
     decision = self.get_decision(
         DecisionId(DecisionTarget.TIMER, attributes.started_event_id))
     decision.handle_completion_event()
     return decision.is_done()
def mock_decision(decider):
    decision_id = DecisionId(DecisionTarget.TIMER, DECISION_EVENT_ID)
    decision = MagicMock()
    decider.add_decision(decision_id, decision)
    decision.is_done = Mock(return_value=True)
    return decision
 def test_get_id(self):
     self.assertEqual(DecisionId(DecisionTarget.ACTIVITY, 123),
                      self.state_machine.get_id())
Beispiel #26
0
 def handle_cancel_timer_failed(self, event: HistoryEvent) -> bool:
     started_event_id = event.event_id
     decision = self.get_decision(
         DecisionId(DecisionTarget.TIMER, started_event_id))
     decision.handle_cancellation_failure_event(event)
     return decision.is_done()
Beispiel #27
0
 def handle_timer_canceled(self, event: HistoryEvent) -> bool:
     attributes = event.timer_canceled_event_attributes
     decision = self.get_decision(
         DecisionId(DecisionTarget.TIMER, attributes.started_event_id))
     decision.handle_cancellation_event()
     return decision.is_done()
 def setUp(self) -> None:
     self.decision_id = DecisionId(DecisionTarget.SELF, 256)
     self.decision = Decision()
     self.state_machine = CompleteWorkflowStateMachine(
         self.decision_id, self.decision)
Beispiel #29
0
 def handle_timer_started(self, event: HistoryEvent):
     decision = self.get_decision(
         DecisionId(DecisionTarget.TIMER, event.event_id))
     decision.handle_initiated_event(event)
def decision(decider):
    decision_id = DecisionId(DecisionTarget.TIMER, DECISION_EVENT_ID)
    decision = TimerDecisionStateMachine(decision_id, start_timer_attributes=StartTimerDecisionAttributes())
    decider.add_decision(decision_id, decision)
    return decision