@Test public void shouldCloseSubscriptionForOldVersions() { // given testClient.deploy(createWorkflowWithOneMessageStartEvent()); // when testClient.deploy(createWorkflowWithOneMessageStartEvent()); // then final List<Record<MessageStartEventSubscriptionRecordValue>> subscriptions = RecordingExporter.messageStartEventSubscriptionRecords().limit(6).asList(); final List<Intent> intents = subscriptions.stream().map(s -> s.getMetadata().getIntent()).collect(Collectors.toList()); assertThat(intents) .containsExactly( MessageStartEventSubscriptionIntent.OPEN, MessageStartEventSubscriptionIntent.OPENED, MessageStartEventSubscriptionIntent.CLOSE, // close old version MessageStartEventSubscriptionIntent.OPEN, // open new MessageStartEventSubscriptionIntent.CLOSED, MessageStartEventSubscriptionIntent.OPENED); final long closingWorkflowKey = subscriptions.get(2).getValue().getWorkflowKey(); assertThat(closingWorkflowKey).isEqualTo(subscriptions.get(0).getValue().getWorkflowKey()); }
@Test public void shouldCloseSubscriptionForOldVersions() { // given testClient.deploy(createWorkflowWithOneMessageStartEvent()); // when testClient.deploy(createWorkflowWithOneMessageStartEvent()); // then final List<Record<MessageStartEventSubscriptionRecordValue>> subscriptions = RecordingExporter.messageStartEventSubscriptionRecords().limit(6).asList(); final List<Intent> intents = subscriptions.stream().map(s -> s.getMetadata().getIntent()).collect(Collectors.toList()); assertThat(intents) .containsExactly( MessageStartEventSubscriptionIntent.OPEN, MessageStartEventSubscriptionIntent.OPENED, MessageStartEventSubscriptionIntent.CLOSE, // close old version MessageStartEventSubscriptionIntent.OPEN, // open new MessageStartEventSubscriptionIntent.CLOSED, MessageStartEventSubscriptionIntent.OPENED); final long closingWorkflowKey = subscriptions.get(2).getValue().getWorkflowKey(); assertThat(closingWorkflowKey).isEqualTo(subscriptions.get(0).getValue().getWorkflowKey()); }
@Test public void shouldOpenSubscriptionsForAllMessageStartEvents() { // when testClient.deploy(createWorkflowWithTwoMessageStartEvent()); final List<Record<MessageStartEventSubscriptionRecordValue>> subscriptions = RecordingExporter.messageStartEventSubscriptionRecords( MessageStartEventSubscriptionIntent.OPENED) .limit(2) .asList(); // then assertThat(subscriptions.size()).isEqualTo(2); assertThat(subscriptions) .hasSize(2) .extracting(Record::getValue) .extracting(s -> tuple(s.getMessageName(), s.getStartEventId())) .containsExactlyInAnyOrder( tuple(MESSAGE_NAME1, EVENT_ID1), tuple(MESSAGE_NAME2, EVENT_ID2)); }
@Test public void shouldOpenSubscriptionsForAllMessageStartEvents() { // when testClient.deploy(createWorkflowWithTwoMessageStartEvent()); final List<Record<MessageStartEventSubscriptionRecordValue>> subscriptions = RecordingExporter.messageStartEventSubscriptionRecords( MessageStartEventSubscriptionIntent.OPENED) .limit(2) .asList(); // then assertThat(subscriptions.size()).isEqualTo(2); assertThat(subscriptions) .hasSize(2) .extracting(Record::getValue) .extracting(s -> tuple(s.getMessageName(), s.getStartEventId())) .containsExactlyInAnyOrder( tuple(MESSAGE_NAME1, EVENT_ID1), tuple(MESSAGE_NAME2, EVENT_ID2)); }
@Test public void shouldNotCreateInstanceOfOldVersion() { // given testClient.deploy(createWorkflowWithOneMessageStartEvent()); // new version final ExecuteCommandResponse response = testClient.deployWithResponse(createWorkflowWithOneMessageStartEvent()); final long workflowKey2 = getFirstDeployedWorkflowKey(response); // wait until second subscription is opened assertThat( messageStartEventSubscriptionRecords(MessageStartEventSubscriptionIntent.OPENED) .limit(2) .count()) .isEqualTo(2); // when testClient.publishMessage(MESSAGE_NAME1, "order-123", asMsgPack("foo", "bar")); // then final List<Record<WorkflowInstanceRecordValue>> records = RecordingExporter.workflowInstanceRecords().limit(5).asList(); assertThat(records.stream().map(r -> r.getMetadata().getIntent())) .containsExactly( WorkflowInstanceIntent.EVENT_OCCURRED, // message WorkflowInstanceIntent.ELEMENT_READY, // workflow instance WorkflowInstanceIntent.ELEMENT_ACTIVATED, WorkflowInstanceIntent.EVENT_TRIGGERING, // start event WorkflowInstanceIntent.EVENT_TRIGGERED); assertThat(records).allMatch(r -> r.getValue().getWorkflowKey() == workflowKey2); }
@Test public void shouldNotCreateInstanceOfOldVersion() { // given testClient.deploy(createWorkflowWithOneMessageStartEvent()); // new version final ExecuteCommandResponse response = testClient.deployWithResponse(createWorkflowWithOneMessageStartEvent()); final long workflowKey2 = getFirstDeployedWorkflowKey(response); // wait until second subscription is opened assertThat( messageStartEventSubscriptionRecords(MessageStartEventSubscriptionIntent.OPENED) .limit(2) .count()) .isEqualTo(2); // when testClient.publishMessage(MESSAGE_NAME1, "order-123", asMsgPack("foo", "bar")); // then final List<Record<WorkflowInstanceRecordValue>> records = RecordingExporter.workflowInstanceRecords().limit(5).asList(); assertThat(records.stream().map(r -> r.getMetadata().getIntent())) .containsExactly( WorkflowInstanceIntent.EVENT_OCCURRED, // message WorkflowInstanceIntent.ELEMENT_ACTIVATING, // workflow instance WorkflowInstanceIntent.ELEMENT_ACTIVATED, WorkflowInstanceIntent.ELEMENT_ACTIVATING, // start event WorkflowInstanceIntent.ELEMENT_ACTIVATED); assertThat(records).allMatch(r -> r.getValue().getWorkflowKey() == workflowKey2); }
@Test public void shouldCreateInstancesForDifferentMessages() { // given final ExecuteCommandResponse response = testClient.deployWithResponse(createWorkflowWithTwoMessageStartEvent()); final long workflowKey = getFirstDeployedWorkflowKey(response); // check if two subscriptions are opened assertThat( messageStartEventSubscriptionRecords(MessageStartEventSubscriptionIntent.OPENED) .limit(2) .count()) .isEqualTo(2); // when testClient.publishMessage(MESSAGE_NAME1, "order-123", asMsgPack("foo", "bar")); testClient.publishMessage(MESSAGE_NAME2, "order-124", asMsgPack("foo", "bar")); // then // check if two instances are created final List<Record<WorkflowInstanceRecordValue>> records = RecordingExporter.workflowInstanceRecords(WorkflowInstanceIntent.EVENT_TRIGGERING) .limit(2) .asList(); assertThat(records.size()).isEqualTo(2); assertThat(records).allMatch(r -> r.getValue().getWorkflowKey() == workflowKey); assertThat(records.get(0).getValue()) .hasElementId(EVENT_ID1); // Message 1 triggers start event 1 assertThat(records.get(1).getValue()) .hasElementId(EVENT_ID2); // Message 2 triggers start event 2 }
@Test public void shouldCreateInstancesForDifferentMessages() { // given final ExecuteCommandResponse response = testClient.deployWithResponse(createWorkflowWithTwoMessageStartEvent()); final long workflowKey = getFirstDeployedWorkflowKey(response); // check if two subscriptions are opened assertThat( messageStartEventSubscriptionRecords(MessageStartEventSubscriptionIntent.OPENED) .limit(2) .count()) .isEqualTo(2); // when testClient.publishMessage(MESSAGE_NAME1, "order-123", asMsgPack("foo", "bar")); testClient.publishMessage(MESSAGE_NAME2, "order-124", asMsgPack("foo", "bar")); // then // check if two instances are created final List<Record<WorkflowInstanceRecordValue>> records = RecordingExporter.workflowInstanceRecords(WorkflowInstanceIntent.ELEMENT_COMPLETING) .limit(2) .asList(); assertThat(records.size()).isEqualTo(2); assertThat(records).allMatch(r -> r.getValue().getWorkflowKey() == workflowKey); assertThat(records.get(0).getValue()) .hasElementId(EVENT_ID1); // Message 1 triggers start event 1 assertThat(records.get(1).getValue()) .hasElementId(EVENT_ID2); // Message 2 triggers start event 2 }
@Test public void shouldOpenMessageStartEventSubscriptionOnAllPartitions() { testClient.deploy(createWorkflowWithOneMessageStartEvent()); final List<Record<MessageStartEventSubscriptionRecordValue>> subscriptions = RecordingExporter.messageStartEventSubscriptionRecords( MessageStartEventSubscriptionIntent.OPENED) .limit(3) .asList(); assertThat(subscriptions) .hasSize(3) .extracting(Record::getValue) .extracting(v -> tuple(v.getStartEventId(), v.getMessageName())) .containsOnly(tuple(EVENT_ID1, MESSAGE_NAME1)); assertThat(subscriptions) .extracting(r -> r.getMetadata().getPartitionId()) .containsExactlyInAnyOrder(0, 1, 2); }
@Test public void shouldOpenMessageStartEventSubscriptionOnAllPartitions() { testClient.deploy(createWorkflowWithOneMessageStartEvent()); final List<Record<MessageStartEventSubscriptionRecordValue>> subscriptions = RecordingExporter.messageStartEventSubscriptionRecords( MessageStartEventSubscriptionIntent.OPENED) .limit(3) .asList(); assertThat(subscriptions) .hasSize(3) .extracting(Record::getValue) .extracting(v -> tuple(v.getStartEventId(), v.getMessageName())) .containsOnly(tuple(EVENT_ID1, MESSAGE_NAME1)); assertThat(subscriptions) .extracting(r -> r.getMetadata().getPartitionId()) .containsExactlyInAnyOrder(0, 1, 2); }