use of org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent in project activiti-cloud by Activiti.
the class AuditServiceIT method shouldGetSignalReceivedEvent.
@Test
public void shouldGetSignalReceivedEvent() {
// given
List<CloudRuntimeEvent> coveredEvents = new ArrayList<>();
BPMNSignalImpl signal = new BPMNSignalImpl("signalId");
signal.setProcessDefinitionId("processDefinitionId");
signal.setProcessInstanceId("processInstanceId");
SignalPayload signalPayload = ProcessPayloadBuilder.signal().withName("SignalName").withVariable("signal-variable", "test").build();
signal.setSignalPayload(signalPayload);
CloudBPMNSignalReceivedEventImpl cloudSignalReceivedEvent = new CloudBPMNSignalReceivedEventImpl("eventId", System.currentTimeMillis(), signal, signal.getProcessDefinitionId(), signal.getProcessInstanceId());
coveredEvents.add(cloudSignalReceivedEvent);
producer.send(coveredEvents.toArray(new CloudRuntimeEvent[coveredEvents.size()]));
await().untilAsserted(() -> {
// when
Map<String, Object> filters = new HashMap<>();
filters.put("entityId", "signalId");
ResponseEntity<PagedResources<CloudRuntimeEvent>> eventsPagedResources = eventsRestTemplate.executeFind(filters);
// then
Collection<CloudRuntimeEvent> retrievedEvents = eventsPagedResources.getBody().getContent();
assertThat(retrievedEvents).hasSize(1);
assertThat(retrievedEvents).extracting(CloudRuntimeEvent::getEventType, CloudRuntimeEvent::getServiceName, CloudRuntimeEvent::getServiceVersion, CloudRuntimeEvent::getProcessInstanceId, CloudRuntimeEvent::getProcessDefinitionId, CloudRuntimeEvent::getEntityId, event -> ((CloudBPMNSignalReceivedEvent) event).getEntity().getElementId(), event -> ((CloudBPMNSignalReceivedEvent) event).getEntity().getSignalPayload().getId(), event -> ((CloudBPMNSignalReceivedEvent) event).getEntity().getSignalPayload().getName(), event -> ((CloudBPMNSignalReceivedEvent) event).getEntity().getSignalPayload().getVariables()).contains(tuple(cloudSignalReceivedEvent.getEventType(), cloudSignalReceivedEvent.getServiceName(), cloudSignalReceivedEvent.getServiceVersion(), cloudSignalReceivedEvent.getProcessInstanceId(), cloudSignalReceivedEvent.getProcessDefinitionId(), cloudSignalReceivedEvent.getEntityId(), cloudSignalReceivedEvent.getEntity().getElementId(), cloudSignalReceivedEvent.getEntity().getSignalPayload().getId(), cloudSignalReceivedEvent.getEntity().getSignalPayload().getName(), cloudSignalReceivedEvent.getEntity().getSignalPayload().getVariables()));
});
}
use of org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent in project activiti-cloud by Activiti.
the class MapBuilder method testGraphqlSubscriptionSIGNAL_RECEIVED.
@Test
public void testGraphqlSubscriptionSIGNAL_RECEIVED() throws JsonProcessingException {
ReplayProcessor<String> data = ReplayProcessor.create();
keycloakTokenProducer.setKeycloakTestUser(TESTADMIN);
final String auth = keycloakTokenProducer.authorizationHeaders().getFirst(AUTHORIZATION);
Map<String, Object> variables = new StringObjectMapBuilder().put("appName", "default-app").put("eventType", "SIGNAL_RECEIVED").get();
Map<String, Object> payload = new StringObjectMapBuilder().put("query", "subscription($appName: String!, $eventType: EngineEventType!) { " + " engineEvents(appName: [$appName], eventType: [$eventType]) { " + " processInstanceId " + " processDefinitionId " + " eventType " + " } " + "}").put("variables", variables).get();
GraphQLMessage start = GraphQLMessage.builder().type(GraphQLMessageType.START).id("1").payload(payload).build();
String startMessage = objectMapper.writeValueAsString(start);
// given
CloudBPMNSignalReceivedEvent event1 = new CloudBPMNSignalReceivedEventImpl("id", new Date().getTime(), new BPMNSignalImpl("elementId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
WebsocketSender client = HttpClient.create().baseUrl("ws://localhost:" + port).wiretap(true).headers(h -> h.add(AUTHORIZATION, auth)).websocket(GRAPHQL_WS).uri(WS_GRAPHQL_URI);
// start subscription
client.handle((i, o) -> {
o.options(NettyPipeline.SendOptions::flushOnEach).sendString(Mono.just(startMessage)).then().log("start").subscribe();
return i.receive().asString().log("data").take(1).doOnSubscribe(s -> producerChannel.output().send(MessageBuilder.withPayload(Arrays.array(event1)).setHeader("routingKey", "eventProducer").build())).delaySubscription(Duration.ofSeconds(1)).subscribeWith(data);
}).collectList().subscribe();
// then
Map<String, Object> message = Maps.of("data", Maps.of("engineEvents", Arrays.array(mapBuilder().put("processInstanceId", "processInstanceId").put("processDefinitionId", "processDefinitionId").put("eventType", "SIGNAL_RECEIVED").get())));
String dataMessage = objectMapper.writeValueAsString(GraphQLMessage.builder().type(GraphQLMessageType.DATA).id("1").payload(message).build());
StepVerifier.create(data).expectNext(dataMessage).expectComplete().verify(TIMEOUT);
}
use of org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent in project activiti-cloud by Activiti.
the class SignalAuditProducerIT method shouldProduceEventsWhenIntermediateSignalIsReceived.
@Test
public void shouldProduceEventsWhenIntermediateSignalIsReceived() {
// given
ResponseEntity<CloudProcessInstance> startProcessEntity1 = processInstanceRestTemplate.startProcess(new StartProcessPayloadBuilder().withProcessDefinitionKey(SIGNAL_PROCESS).withName("processInstanceName1").withBusinessKey("businessKey1").withVariables(Collections.emptyMap()).build());
ResponseEntity<CloudProcessInstance> startProcessEntity2 = processInstanceRestTemplate.startProcess(new StartProcessPayloadBuilder().withProcessDefinitionKey(SIGNAL_PROCESS).withName("processInstanceName2").withBusinessKey("businessKey2").withVariables(Collections.emptyMap()).build());
CloudProcessDefinition processWithSignalStart = processDefinitionRestTemplate.getProcessDefinitions().getBody().getContent().stream().filter(cloudProcessDefinition -> cloudProcessDefinition.getKey().equals("processWithSignalStart1")).findAny().orElse(null);
assertThat(processWithSignalStart).isNotNull();
SignalPayload signalProcessInstancesCmd = ProcessPayloadBuilder.signal().withName("Test").withVariable("signalVar", "timeToGo").build();
// when
signalRestTemplate.signal(signalProcessInstancesCmd);
await("Broadcast Signals").untilAsserted(() -> {
assertThat(streamHandler.getReceivedHeaders()).containsKeys(RUNTIME_BUNDLE_INFO_HEADERS);
assertThat(streamHandler.getReceivedHeaders()).containsKeys(ALL_REQUIRED_HEADERS);
List<CloudRuntimeEvent<?, ?>> receivedEvents = streamHandler.getLatestReceivedEvents();
String startedBySignalProcessInstanceId = Optional.ofNullable(runtimeService.createProcessInstanceQuery().processDefinitionKey("processWithSignalStart1").singleResult().getId()).orElseThrow(() -> new NoSuchElementException("processWithSignalStart1"));
List<CloudBPMNSignalReceivedEvent> signalReceivedEvents = receivedEvents.stream().filter(CloudBPMNSignalReceivedEvent.class::isInstance).map(CloudBPMNSignalReceivedEvent.class::cast).collect(Collectors.toList());
assertThat(signalReceivedEvents).filteredOn(event -> SIGNAL_RECEIVED.name().equals(event.getEventType().name())).extracting(CloudRuntimeEvent::getEventType, CloudRuntimeEvent::getProcessDefinitionId, CloudRuntimeEvent::getProcessInstanceId, CloudRuntimeEvent::getProcessDefinitionKey, CloudRuntimeEvent::getProcessDefinitionVersion, event -> event.getEntity().getProcessDefinitionId(), event -> event.getEntity().getProcessInstanceId(), event -> event.getEntity().getElementId(), event -> event.getEntity().getSignalPayload().getName(), event -> event.getEntity().getSignalPayload().getVariables()).contains(tuple(SIGNAL_RECEIVED, processWithSignalStart.getId(), startedBySignalProcessInstanceId, processWithSignalStart.getKey(), processWithSignalStart.getVersion(), processWithSignalStart.getId(), startedBySignalProcessInstanceId, "theStart", "Test", Collections.singletonMap("signalVar", "timeToGo")), tuple(SIGNAL_RECEIVED, startProcessEntity1.getBody().getProcessDefinitionId(), startProcessEntity1.getBody().getId(), startProcessEntity1.getBody().getProcessDefinitionKey(), // version
1, startProcessEntity1.getBody().getProcessDefinitionId(), startProcessEntity1.getBody().getId(), "signalintermediatecatchevent1", "Test", Collections.singletonMap("signalVar", "timeToGo")), tuple(SIGNAL_RECEIVED, startProcessEntity2.getBody().getProcessDefinitionId(), startProcessEntity2.getBody().getId(), startProcessEntity2.getBody().getProcessDefinitionKey(), // version
1, startProcessEntity2.getBody().getProcessDefinitionId(), startProcessEntity2.getBody().getId(), "signalintermediatecatchevent1", "Test", Collections.singletonMap("signalVar", "timeToGo")));
runtimeService.deleteProcessInstance(startedBySignalProcessInstanceId, "clean up");
});
}
use of org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent in project activiti-cloud by Activiti.
the class MapBuilder method testGraphqlSubscriptionShouldFilterEmptyResults.
@Test
public void testGraphqlSubscriptionShouldFilterEmptyResults() throws JsonProcessingException {
ReplayProcessor<String> data = ReplayProcessor.create();
keycloakTokenProducer.setKeycloakTestUser(TESTADMIN);
final String auth = keycloakTokenProducer.authorizationHeaders().getFirst(AUTHORIZATION);
Map<String, Object> variables = new StringObjectMapBuilder().put("appName", "default-app").put("eventType", "PROCESS_STARTED").get();
Map<String, Object> payload = new StringObjectMapBuilder().put("query", "subscription($appName: String!, $eventType: EngineEventType!) { " + " engineEvents(appName: [$appName], eventType: [$eventType]) { " + " processInstanceId " + " processDefinitionId " + " eventType " + " } " + "}").put("variables", variables).get();
GraphQLMessage start = GraphQLMessage.builder().type(GraphQLMessageType.START).id("1").payload(payload).build();
String startMessage = objectMapper.writeValueAsString(start);
// given
CloudBPMNSignalReceivedEvent event1 = new CloudBPMNSignalReceivedEventImpl("id", new Date().getTime(), new BPMNSignalImpl("elementId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
WebsocketSender client = HttpClient.create().baseUrl("ws://localhost:" + port).wiretap(true).headers(h -> h.add(AUTHORIZATION, auth)).websocket(GRAPHQL_WS).uri(WS_GRAPHQL_URI);
// start subscription
client.handle((i, o) -> {
o.options(NettyPipeline.SendOptions::flushOnEach).sendString(Mono.just(startMessage)).then().log("start").subscribe();
return i.receive().asString().log("data").timeout(Duration.ofSeconds(2)).doOnSubscribe(s -> producerChannel.output().send(MessageBuilder.withPayload(Arrays.array(event1)).setHeader("routingKey", "eventProducer").build())).delaySubscription(Duration.ofSeconds(1)).subscribeWith(data);
}).collectList().subscribe();
StepVerifier.create(data).expectSubscription().expectError(TimeoutException.class).verify();
}
use of org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent in project activiti-cloud by Activiti.
the class ToCloudProcessRuntimeEventConverterTest method shouldConvertBPMNSignalReceivedEventToCloudBPMNSignalReceivedEvent.
@Test
public void shouldConvertBPMNSignalReceivedEventToCloudBPMNSignalReceivedEvent() {
// given
BPMNSignalImpl signal = new BPMNSignalImpl();
signal.setProcessDefinitionId("procDefId");
signal.setProcessInstanceId("procInstId");
BPMNSignalReceivedEventImpl signalReceivedEvent = new BPMNSignalReceivedEventImpl(signal);
// when
CloudBPMNSignalReceivedEvent cloudEvent = converter.from(signalReceivedEvent);
assertThat(cloudEvent.getEntity()).isEqualTo(signal);
assertThat(cloudEvent.getProcessDefinitionId()).isEqualTo("procDefId");
assertThat(cloudEvent.getProcessInstanceId()).isEqualTo("procInstId");
// then
verify(runtimeBundleInfoAppender).appendRuntimeBundleInfoTo(any(CloudRuntimeEventImpl.class));
}
Aggregations