use of io.camunda.zeebe.protocol.record.Record in project zeebe by camunda.
the class ParallelGatewayTest method shouldSplitWithUncontrolledFlow.
@Test
public void shouldSplitWithUncontrolledFlow() {
// given
final BpmnModelInstance process = Bpmn.createExecutableProcess(PROCESS_ID).startEvent("start").serviceTask("task1", b -> b.zeebeJobType("type1")).moveToNode("start").serviceTask("task2", b -> b.zeebeJobType("type2")).done();
engine.deployment().withXmlResource(process).deploy();
// when
engine.processInstance().ofBpmnProcessId(PROCESS_ID).create();
// then
final List<Record<ProcessInstanceRecordValue>> taskEvents = RecordingExporter.processInstanceRecords().withIntent(ProcessInstanceIntent.ELEMENT_ACTIVATED).filter(e -> isServiceTaskInProcess(e.getValue().getElementId(), process)).limit(2).collect(Collectors.toList());
assertThat(taskEvents).hasSize(2);
assertThat(taskEvents).extracting(e -> e.getValue().getElementId()).containsExactlyInAnyOrder("task1", "task2");
assertThat(taskEvents.get(0).getKey()).isNotEqualTo(taskEvents.get(1).getKey());
}
use of io.camunda.zeebe.protocol.record.Record in project zeebe-process-test by camunda-cloud.
the class EngineClientTest method shouldReadProcessInstanceRecords.
@Test
void shouldReadProcessInstanceRecords() {
// given
zeebeClient.newDeployCommand().addProcessModel(Bpmn.createExecutableProcess("simpleProcess").startEvent().endEvent().done(), "simpleProcess.bpmn").send().join();
// when
final ProcessInstanceEvent processInstance = zeebeClient.newCreateInstanceCommand().bpmnProcessId("simpleProcess").latestVersion().variables(Map.of("test", 1)).send().join();
// then
Awaitility.await().untilAsserted(() -> {
final List<Record<ProcessInstanceRecordValue>> processRecords = StreamSupport.stream(RecordStream.of(zeebeEngine.getRecordStreamSource()).processInstanceRecords().spliterator(), false).filter(r -> r.getRecordType() == RecordType.EVENT).filter(r -> r.getValue().getBpmnElementType() == BpmnElementType.PROCESS).limit(4).collect(Collectors.toList());
assertThat(processRecords).hasSize(4).extracting(Record::getIntent).contains(ProcessInstanceIntent.ELEMENT_ACTIVATING, ProcessInstanceIntent.ELEMENT_ACTIVATED, ProcessInstanceIntent.ELEMENT_COMPLETING, ProcessInstanceIntent.ELEMENT_COMPLETED);
final ProcessInstanceRecordValue processInstanceRecord = processRecords.get(0).getValue();
assertThat(processInstanceRecord.getProcessDefinitionKey()).isEqualTo(processInstance.getProcessDefinitionKey());
assertThat(processInstanceRecord.getBpmnProcessId()).isEqualTo(processInstance.getBpmnProcessId());
assertThat(processInstanceRecord.getVersion()).isEqualTo(processInstance.getVersion());
assertThat(processInstanceRecord.getBpmnElementType()).isEqualTo(BpmnElementType.PROCESS);
});
}
use of io.camunda.zeebe.protocol.record.Record in project zeebe-process-test by camunda-cloud.
the class EngineClientTest method shouldFailJob.
@Test
void shouldFailJob() {
// given
zeebeClient.newDeployCommand().addProcessModel(Bpmn.createExecutableProcess("simpleProcess").startEvent().serviceTask("task", (task) -> task.zeebeJobType("jobType")).endEvent().done(), "simpleProcess.bpmn").send().join();
zeebeClient.newCreateInstanceCommand().bpmnProcessId("simpleProcess").latestVersion().variables(Map.of("test", 1)).send().join();
Awaitility.await().untilAsserted(() -> {
final ActivateJobsResponse activateJobsResponse = zeebeClient.newActivateJobsCommand().jobType("jobType").maxJobsToActivate(32).timeout(Duration.ofMinutes(1)).workerName("yolo").fetchVariables(List.of("test")).send().join();
final List<ActivatedJob> jobs = activateJobsResponse.getJobs();
assertThat(jobs).isNotEmpty();
final ActivatedJob job = jobs.get(0);
// when - then
zeebeClient.newFailCommand(job.getKey()).retries(0).errorMessage("This failed oops.").send().join();
Awaitility.await().untilAsserted(() -> {
final Optional<Record<JobRecordValue>> failedJob = StreamSupport.stream(RecordStream.of(zeebeEngine.getRecordStreamSource()).jobRecords().spliterator(), false).filter(r -> r.getKey() == job.getKey()).filter(r -> r.getIntent() == JobIntent.FAILED).findFirst();
assertThat(failedJob).isNotEmpty();
});
});
}
use of io.camunda.zeebe.protocol.record.Record in project zeebe-process-test by camunda-cloud.
the class ContainerizedEngine method getRecords.
/**
* Gets a list of all records that have occurred on the test engine.
*
* @return a list of records
*/
public List<Record<?>> getRecords() {
final ManagedChannel channel = getChannel();
final EngineControlBlockingStub stub = getStub(channel);
final ObjectMapper mapper = new ObjectMapper().registerModule(new ZeebeProtocolModule());
final List<Record<?>> mappedRecords = new ArrayList<>();
final GetRecordsRequest request = GetRecordsRequest.newBuilder().build();
final Iterator<RecordResponse> response = stub.getRecords(request);
while (response.hasNext()) {
final RecordResponse recordResponse = response.next();
try {
final Record<?> record = mapper.readValue(recordResponse.getRecordJson(), new TypeReference<Record<?>>() {
});
mappedRecords.add(record);
} catch (final JsonProcessingException e) {
throw new RuntimeException(e);
}
}
closeChannel(channel);
return mappedRecords;
}
use of io.camunda.zeebe.protocol.record.Record in project zeebe by zeebe-io.
the class ExclusiveGatewayTest method shouldSplitIfDefaultFlowIsDeclaredFirst.
@Test
public void shouldSplitIfDefaultFlowIsDeclaredFirst() {
// given
final String processId = Strings.newRandomValidBpmnId();
final BpmnModelInstance processDefinition = Bpmn.createExecutableProcess(processId).startEvent().exclusiveGateway().defaultFlow().endEvent("a").moveToLastExclusiveGateway().conditionExpression("foo < 5").endEvent("b").done();
ENGINE.deployment().withXmlResource(processDefinition).deploy();
// when
final long processInstanceKey = ENGINE.processInstance().ofBpmnProcessId(processId).withVariable("foo", 10).create();
// then
final List<Record<ProcessInstanceRecordValue>> completedEvents = RecordingExporter.processInstanceRecords().withProcessInstanceKey(processInstanceKey).limitToProcessInstanceCompleted().withIntent(ProcessInstanceIntent.ELEMENT_COMPLETED).withElementType(BpmnElementType.END_EVENT).collect(Collectors.toList());
assertThat(completedEvents).extracting(r -> r.getValue().getElementId()).containsExactly("a");
}
Aggregations