use of org.activiti.cloud.api.process.model.events.CloudBPMNTimerScheduledEvent in project activiti-cloud by Activiti.
the class AuditServiceIT method shouldGetTimerScheduledEvent.
@Test
public void shouldGetTimerScheduledEvent() {
// given
List<CloudRuntimeEvent> coveredEvents = new ArrayList<>();
BPMNTimerImpl timer1 = new BPMNTimerImpl("timerId1");
timer1.setProcessDefinitionId("processDefinitionId");
timer1.setProcessInstanceId("processInstanceId");
timer1.setTimerPayload(createTimerPayload());
CloudBPMNTimerFiredEventImpl cloudTimerFiredEvent = new CloudBPMNTimerFiredEventImpl("eventId1", System.currentTimeMillis(), timer1, timer1.getProcessDefinitionId(), timer1.getProcessInstanceId());
coveredEvents.add(cloudTimerFiredEvent);
BPMNTimerImpl timer2 = new BPMNTimerImpl("timerId2");
timer2.setProcessDefinitionId("processDefinitionId");
timer2.setProcessInstanceId("processInstanceId");
timer2.setTimerPayload(createTimerPayload());
CloudBPMNTimerScheduledEventImpl cloudTimerScheduledEvent = new CloudBPMNTimerScheduledEventImpl("eventId2", System.currentTimeMillis(), timer2, timer2.getProcessDefinitionId(), timer2.getProcessInstanceId());
coveredEvents.add(cloudTimerScheduledEvent);
producer.send(coveredEvents.toArray(new CloudRuntimeEvent[coveredEvents.size()]));
await().untilAsserted(() -> {
// when
Map<String, Object> filters = new HashMap<>();
filters.put("eventType", BPMNTimerEvent.TimerEvents.TIMER_SCHEDULED.name());
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 -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getElementId(), event -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getProcessInstanceId(), event -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getProcessDefinitionId(), event -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getTimerPayload().getId(), event -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getTimerPayload().getMaxIterations(), event -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getTimerPayload().getRepeat(), event -> ((CloudBPMNTimerScheduledEvent) event).getEntity().getTimerPayload().getRetries()).contains(tuple(cloudTimerScheduledEvent.getEventType(), cloudTimerScheduledEvent.getServiceName(), cloudTimerScheduledEvent.getServiceVersion(), cloudTimerScheduledEvent.getProcessInstanceId(), cloudTimerScheduledEvent.getProcessDefinitionId(), cloudTimerScheduledEvent.getEntityId(), cloudTimerScheduledEvent.getEntity().getElementId(), cloudTimerScheduledEvent.getEntity().getProcessInstanceId(), cloudTimerScheduledEvent.getEntity().getProcessDefinitionId(), cloudTimerScheduledEvent.getEntity().getTimerPayload().getId(), cloudTimerScheduledEvent.getEntity().getTimerPayload().getMaxIterations(), cloudTimerScheduledEvent.getEntity().getTimerPayload().getRepeat(), cloudTimerScheduledEvent.getEntity().getTimerPayload().getRetries()));
});
}
use of org.activiti.cloud.api.process.model.events.CloudBPMNTimerScheduledEvent in project activiti-cloud by Activiti.
the class MapBuilder method testGraphqlSubscriptionCloudBPMNTimerEvents.
@Test
public void testGraphqlSubscriptionCloudBPMNTimerEvents() 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("eventTypes", Arrays.array("TIMER_SCHEDULED", "TIMER_FIRED", "TIMER_EXECUTED", "TIMER_CANCELLED", "TIMER_FAILED", "TIMER_RETRIES_DECREMENTED")).get();
Map<String, Object> payload = new StringObjectMapBuilder().put("query", "subscription($appName: String!, $eventTypes: [EngineEventType!]) { " + " engineEvents(appName: [$appName], eventType: $eventTypes) { " + " processInstanceId " + " processDefinitionId " + " entity " + " eventType " + " } " + "}").put("variables", variables).get();
GraphQLMessage start = GraphQLMessage.builder().type(GraphQLMessageType.START).id("1").payload(payload).build();
String startMessage = objectMapper.writeValueAsString(start);
// given
CloudBPMNTimerScheduledEvent event1 = new CloudBPMNTimerScheduledEventImpl("id", new Date().getTime(), new BPMNTimerImpl("timerId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
// given
CloudBPMNTimerFiredEvent event2 = new CloudBPMNTimerFiredEventImpl("id", new Date().getTime(), new BPMNTimerImpl("timerId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
// given
CloudBPMNTimerExecutedEvent event3 = new CloudBPMNTimerExecutedEventImpl("id", new Date().getTime(), new BPMNTimerImpl("timerId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
// given
CloudBPMNTimerCancelledEvent event4 = new CloudBPMNTimerCancelledEventImpl("id", new Date().getTime(), new BPMNTimerImpl("timerId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
// given
CloudBPMNTimerFailedEvent event5 = new CloudBPMNTimerFailedEventImpl("id", new Date().getTime(), new BPMNTimerImpl("timerId"), "processDefinitionId", "processInstanceId") {
{
setAppName("default-app");
setServiceName("rb-my-app");
setServiceFullName("serviceFullName");
setServiceType("runtime-bundle");
setServiceVersion("");
setProcessDefinitionId("processDefinitionId");
setProcessDefinitionKey("processDefinitionKey");
setProcessDefinitionVersion(1);
setBusinessKey("businessKey");
}
};
// given
CloudBPMNTimerRetriesDecrementedEvent event6 = new CloudBPMNTimerRetriesDecrementedEventImpl("id", new Date().getTime(), new BPMNTimerImpl("timerId"), "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, event2, event3, event4, event5, event6)).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("entity", new BPMNTimerImpl("timerId")).put("eventType", "TIMER_SCHEDULED").get(), mapBuilder().put("processInstanceId", "processInstanceId").put("processDefinitionId", "processDefinitionId").put("entity", new BPMNTimerImpl("timerId")).put("eventType", "TIMER_FIRED").get(), mapBuilder().put("processInstanceId", "processInstanceId").put("processDefinitionId", "processDefinitionId").put("entity", new BPMNTimerImpl("timerId")).put("eventType", "TIMER_EXECUTED").get(), mapBuilder().put("processInstanceId", "processInstanceId").put("processDefinitionId", "processDefinitionId").put("entity", new BPMNTimerImpl("timerId")).put("eventType", "TIMER_CANCELLED").get(), mapBuilder().put("processInstanceId", "processInstanceId").put("processDefinitionId", "processDefinitionId").put("entity", new BPMNTimerImpl("timerId")).put("eventType", "TIMER_FAILED").get(), mapBuilder().put("processInstanceId", "processInstanceId").put("processDefinitionId", "processDefinitionId").put("entity", new BPMNTimerImpl("timerId")).put("eventType", "TIMER_RETRIES_DECREMENTED").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.CloudBPMNTimerScheduledEvent in project activiti-cloud by Activiti.
the class ToCloudProcessRuntimeTimerEventsConverterTest method shouldConvertBPMNTimerScheduledEventToCloudBPMNTimerScheduledEvent.
@Test
public void shouldConvertBPMNTimerScheduledEventToCloudBPMNTimerScheduledEvent() {
// given
BPMNTimerImpl timer = new BPMNTimerImpl("entityId");
timer.setProcessInstanceId("procInstId");
timer.setProcessDefinitionId("procDefId");
TimerPayload timerPayload = new TimerPayload();
timer.setTimerPayload(timerPayload);
BPMNTimerScheduledEventImpl timerFiredEvent = new BPMNTimerScheduledEventImpl(timer);
// when
CloudBPMNTimerScheduledEvent cloudEvent = converter.from(timerFiredEvent);
assertThat(cloudEvent.getEntity()).isEqualTo(timer);
assertThat(cloudEvent.getProcessDefinitionId()).isEqualTo("procDefId");
assertThat(cloudEvent.getProcessInstanceId()).isEqualTo("procInstId");
// then
verify(runtimeBundleInfoAppender).appendRuntimeBundleInfoTo(any(CloudRuntimeEventImpl.class));
}
use of org.activiti.cloud.api.process.model.events.CloudBPMNTimerScheduledEvent in project activiti-cloud by Activiti.
the class TimerAuditProducerIT method shouldProduceEventsForIntermediateTimerEvent.
@Test
public void shouldProduceEventsForIntermediateTimerEvent() {
logger.info("Async config: " + asyncExecutor.getDefaultTimerJobAcquireWaitTimeInMillis());
// given
Date startTime = new Date();
ResponseEntity<CloudProcessInstance> startProcessEntity = processInstanceRestTemplate.startProcess(new StartProcessPayloadBuilder().withProcessDefinitionKey(PROCESS_INTERMEDIATE_TIMER_EVENT).withName("processInstanceName").withBusinessKey("businessKey").build());
// when
await().untilAsserted(() -> {
assertThat(streamHandler.getReceivedHeaders()).containsKeys(RUNTIME_BUNDLE_INFO_HEADERS);
assertThat(streamHandler.getReceivedHeaders()).containsKeys(ALL_REQUIRED_HEADERS);
List<CloudRuntimeEvent<?, ?>> receivedEvents = streamHandler.getLatestReceivedEvents();
assertThat(receivedEvents).extracting(CloudRuntimeEvent::getEventType, CloudRuntimeEvent::getEntityId).contains(tuple(ACTIVITY_STARTED, "timer"), tuple(BPMNTimerEvent.TimerEvents.TIMER_SCHEDULED, "timer"));
List<CloudBPMNTimerScheduledEvent> timerEvents = receivedEvents.stream().filter(CloudBPMNTimerScheduledEvent.class::isInstance).map(CloudBPMNTimerScheduledEvent.class::cast).collect(Collectors.toList());
assertThat(timerEvents).extracting(CloudRuntimeEvent::getEventType, CloudRuntimeEvent::getBusinessKey, CloudRuntimeEvent::getProcessDefinitionId, CloudRuntimeEvent::getProcessInstanceId, CloudRuntimeEvent::getProcessDefinitionKey, CloudRuntimeEvent::getProcessDefinitionVersion, event -> event.getEntity().getProcessDefinitionId(), event -> event.getEntity().getProcessInstanceId(), event -> event.getEntityId()).contains(tuple(BPMNTimerEvent.TimerEvents.TIMER_SCHEDULED, "businessKey", startProcessEntity.getBody().getProcessDefinitionId(), startProcessEntity.getBody().getId(), startProcessEntity.getBody().getProcessDefinitionKey(), startProcessEntity.getBody().getProcessDefinitionVersion(), startProcessEntity.getBody().getProcessDefinitionId(), startProcessEntity.getBody().getId(), "timer"));
});
// when
long waitTime = 5 * 60 * 1000;
Date dueDate = new Date(startTime.getTime() + waitTime);
// After setting the clock to time '5minutes and 5 seconds', the second timer should fire
processEngineConfiguration.getClock().setCurrentTime(new Date(dueDate.getTime() + 5000));
// when
await().untilAsserted(() -> {
assertThat(streamHandler.getReceivedHeaders()).containsKeys(RUNTIME_BUNDLE_INFO_HEADERS);
assertThat(streamHandler.getReceivedHeaders()).containsKeys(ALL_REQUIRED_HEADERS);
List<CloudRuntimeEvent<?, ?>> receivedEvents = streamHandler.getLatestReceivedEvents();
assertThat(receivedEvents).extracting(CloudRuntimeEvent::getEventType, CloudRuntimeEvent::getEntityId).contains(tuple(BPMNTimerEvent.TimerEvents.TIMER_FIRED, "timer"), tuple(BPMNTimerEvent.TimerEvents.TIMER_EXECUTED, "timer"), tuple(ACTIVITY_COMPLETED, "timer"));
List<CloudBPMNTimerEvent> timerEvents = receivedEvents.stream().filter(event -> (CloudBPMNTimerFiredEvent.class.isInstance(event) || CloudBPMNTimerExecutedEvent.class.isInstance(event))).map(CloudBPMNTimerEvent.class::cast).collect(Collectors.toList());
assertThat(timerEvents).extracting(CloudRuntimeEvent::getEventType, CloudRuntimeEvent::getBusinessKey, CloudRuntimeEvent::getProcessDefinitionId, CloudRuntimeEvent::getProcessInstanceId, CloudRuntimeEvent::getProcessDefinitionKey, CloudRuntimeEvent::getProcessDefinitionVersion, event -> event.getEntity().getProcessDefinitionId(), event -> event.getEntity().getProcessInstanceId(), event -> event.getEntityId()).containsOnly(tuple(BPMNTimerEvent.TimerEvents.TIMER_FIRED, "businessKey", startProcessEntity.getBody().getProcessDefinitionId(), startProcessEntity.getBody().getId(), startProcessEntity.getBody().getProcessDefinitionKey(), startProcessEntity.getBody().getProcessDefinitionVersion(), startProcessEntity.getBody().getProcessDefinitionId(), startProcessEntity.getBody().getId(), "timer"), tuple(BPMNTimerEvent.TimerEvents.TIMER_EXECUTED, "businessKey", startProcessEntity.getBody().getProcessDefinitionId(), startProcessEntity.getBody().getId(), startProcessEntity.getBody().getProcessDefinitionKey(), startProcessEntity.getBody().getProcessDefinitionVersion(), startProcessEntity.getBody().getProcessDefinitionId(), startProcessEntity.getBody().getId(), "timer"));
});
}
Aggregations