Search in sources :

Example 26 with Record

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());
}
Also used : Assertions.tuple(org.assertj.core.api.Assertions.tuple) ProcessInstanceIntent(io.camunda.zeebe.protocol.record.intent.ProcessInstanceIntent) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Bpmn(io.camunda.zeebe.model.bpmn.Bpmn) Test(org.junit.Test) Collectors(java.util.stream.Collectors) RecordingExporter(io.camunda.zeebe.test.util.record.RecordingExporter) Record(io.camunda.zeebe.protocol.record.Record) ServiceTask(io.camunda.zeebe.model.bpmn.instance.ServiceTask) List(java.util.List) Rule(org.junit.Rule) ProcessInstanceRecordValue(io.camunda.zeebe.protocol.record.value.ProcessInstanceRecordValue) BpmnElementType(io.camunda.zeebe.protocol.record.value.BpmnElementType) EngineRule(io.camunda.zeebe.engine.util.EngineRule) BpmnModelInstance(io.camunda.zeebe.model.bpmn.BpmnModelInstance) Record(io.camunda.zeebe.protocol.record.Record) BpmnModelInstance(io.camunda.zeebe.model.bpmn.BpmnModelInstance) Test(org.junit.Test)

Example 27 with Record

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);
    });
}
Also used : PartitionBrokerRole(io.camunda.zeebe.client.api.response.PartitionBrokerRole) TimerIntent(io.camunda.zeebe.protocol.record.intent.TimerIntent) BeforeEach(org.junit.jupiter.api.BeforeEach) RecordType(io.camunda.zeebe.protocol.record.RecordType) ClientException(io.camunda.zeebe.client.api.command.ClientException) ProcessInstanceIntent(io.camunda.zeebe.protocol.record.intent.ProcessInstanceIntent) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) JobRecordValue(io.camunda.zeebe.protocol.record.value.JobRecordValue) Bpmn(io.camunda.zeebe.model.bpmn.Bpmn) TimerRecordValue(io.camunda.zeebe.protocol.record.value.TimerRecordValue) ZeebeTestEngine(io.camunda.zeebe.process.test.api.ZeebeTestEngine) DeploymentEvent(io.camunda.zeebe.client.api.response.DeploymentEvent) Record(io.camunda.zeebe.protocol.record.Record) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) PartitionInfo(io.camunda.zeebe.client.api.response.PartitionInfo) Duration(java.time.Duration) Map(java.util.Map) ActivatedJob(io.camunda.zeebe.client.api.response.ActivatedJob) Process(io.camunda.zeebe.client.api.response.Process) ProcessInstanceResult(io.camunda.zeebe.client.api.response.ProcessInstanceResult) StreamSupport(java.util.stream.StreamSupport) PartitionBrokerHealth(io.camunda.zeebe.client.api.response.PartitionBrokerHealth) VersionUtil(io.camunda.zeebe.util.VersionUtil) Topology(io.camunda.zeebe.client.api.response.Topology) ProcessInstanceEvent(io.camunda.zeebe.client.api.response.ProcessInstanceEvent) ZeebeFuture(io.camunda.zeebe.client.api.ZeebeFuture) BrokerInfo(io.camunda.zeebe.client.api.response.BrokerInfo) Collectors(java.util.stream.Collectors) Test(org.junit.jupiter.api.Test) List(java.util.List) AfterEach(org.junit.jupiter.api.AfterEach) ProcessInstanceRecordValue(io.camunda.zeebe.protocol.record.value.ProcessInstanceRecordValue) BpmnElementType(io.camunda.zeebe.protocol.record.value.BpmnElementType) ZeebeClient(io.camunda.zeebe.client.ZeebeClient) SetVariablesResponse(io.camunda.zeebe.client.api.response.SetVariablesResponse) Optional(java.util.Optional) ActivateJobsResponse(io.camunda.zeebe.client.api.response.ActivateJobsResponse) Awaitility(org.awaitility.Awaitility) RecordStream(io.camunda.zeebe.process.test.filters.RecordStream) JobIntent(io.camunda.zeebe.protocol.record.intent.JobIntent) ProcessInstanceRecordValue(io.camunda.zeebe.protocol.record.value.ProcessInstanceRecordValue) Record(io.camunda.zeebe.protocol.record.Record) ProcessInstanceEvent(io.camunda.zeebe.client.api.response.ProcessInstanceEvent) Test(org.junit.jupiter.api.Test)

Example 28 with Record

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();
        });
    });
}
Also used : PartitionBrokerRole(io.camunda.zeebe.client.api.response.PartitionBrokerRole) TimerIntent(io.camunda.zeebe.protocol.record.intent.TimerIntent) BeforeEach(org.junit.jupiter.api.BeforeEach) RecordType(io.camunda.zeebe.protocol.record.RecordType) ClientException(io.camunda.zeebe.client.api.command.ClientException) ProcessInstanceIntent(io.camunda.zeebe.protocol.record.intent.ProcessInstanceIntent) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) JobRecordValue(io.camunda.zeebe.protocol.record.value.JobRecordValue) Bpmn(io.camunda.zeebe.model.bpmn.Bpmn) TimerRecordValue(io.camunda.zeebe.protocol.record.value.TimerRecordValue) ZeebeTestEngine(io.camunda.zeebe.process.test.api.ZeebeTestEngine) DeploymentEvent(io.camunda.zeebe.client.api.response.DeploymentEvent) Record(io.camunda.zeebe.protocol.record.Record) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) PartitionInfo(io.camunda.zeebe.client.api.response.PartitionInfo) Duration(java.time.Duration) Map(java.util.Map) ActivatedJob(io.camunda.zeebe.client.api.response.ActivatedJob) Process(io.camunda.zeebe.client.api.response.Process) ProcessInstanceResult(io.camunda.zeebe.client.api.response.ProcessInstanceResult) StreamSupport(java.util.stream.StreamSupport) PartitionBrokerHealth(io.camunda.zeebe.client.api.response.PartitionBrokerHealth) VersionUtil(io.camunda.zeebe.util.VersionUtil) Topology(io.camunda.zeebe.client.api.response.Topology) ProcessInstanceEvent(io.camunda.zeebe.client.api.response.ProcessInstanceEvent) ZeebeFuture(io.camunda.zeebe.client.api.ZeebeFuture) BrokerInfo(io.camunda.zeebe.client.api.response.BrokerInfo) Collectors(java.util.stream.Collectors) Test(org.junit.jupiter.api.Test) List(java.util.List) AfterEach(org.junit.jupiter.api.AfterEach) ProcessInstanceRecordValue(io.camunda.zeebe.protocol.record.value.ProcessInstanceRecordValue) BpmnElementType(io.camunda.zeebe.protocol.record.value.BpmnElementType) ZeebeClient(io.camunda.zeebe.client.ZeebeClient) SetVariablesResponse(io.camunda.zeebe.client.api.response.SetVariablesResponse) Optional(java.util.Optional) ActivateJobsResponse(io.camunda.zeebe.client.api.response.ActivateJobsResponse) Awaitility(org.awaitility.Awaitility) RecordStream(io.camunda.zeebe.process.test.filters.RecordStream) JobIntent(io.camunda.zeebe.protocol.record.intent.JobIntent) ActivatedJob(io.camunda.zeebe.client.api.response.ActivatedJob) ActivateJobsResponse(io.camunda.zeebe.client.api.response.ActivateJobsResponse) Record(io.camunda.zeebe.protocol.record.Record) Test(org.junit.jupiter.api.Test)

Example 29 with Record

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;
}
Also used : ArrayList(java.util.ArrayList) RecordResponse(io.camunda.zeebe.process.test.engine.protocol.EngineControlOuterClass.RecordResponse) EngineControlBlockingStub(io.camunda.zeebe.process.test.engine.protocol.EngineControlGrpc.EngineControlBlockingStub) GetRecordsRequest(io.camunda.zeebe.process.test.engine.protocol.EngineControlOuterClass.GetRecordsRequest) ZeebeProtocolModule(io.camunda.zeebe.protocol.jackson.ZeebeProtocolModule) StatusRuntimeException(io.grpc.StatusRuntimeException) ManagedChannel(io.grpc.ManagedChannel) Record(io.camunda.zeebe.protocol.record.Record) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 30 with Record

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");
}
Also used : Arrays(java.util.Arrays) Assertions.tuple(org.assertj.core.api.Assertions.tuple) ProcessInstanceIntent(io.camunda.zeebe.protocol.record.intent.ProcessInstanceIntent) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Bpmn(io.camunda.zeebe.model.bpmn.Bpmn) Test(org.junit.Test) RecordingExporterTestWatcher(io.camunda.zeebe.test.util.record.RecordingExporterTestWatcher) Collectors(java.util.stream.Collectors) RecordingExporter(io.camunda.zeebe.test.util.record.RecordingExporter) Record(io.camunda.zeebe.protocol.record.Record) Strings(io.camunda.zeebe.test.util.Strings) List(java.util.List) Rule(org.junit.Rule) ProcessInstanceRecordValue(io.camunda.zeebe.protocol.record.value.ProcessInstanceRecordValue) BpmnElementType(io.camunda.zeebe.protocol.record.value.BpmnElementType) IncidentIntent(io.camunda.zeebe.protocol.record.intent.IncidentIntent) EngineRule(io.camunda.zeebe.engine.util.EngineRule) BpmnModelInstance(io.camunda.zeebe.model.bpmn.BpmnModelInstance) ClassRule(org.junit.ClassRule) Record(io.camunda.zeebe.protocol.record.Record) BpmnModelInstance(io.camunda.zeebe.model.bpmn.BpmnModelInstance) Test(org.junit.Test)

Aggregations

Record (io.camunda.zeebe.protocol.record.Record)184 Test (org.junit.Test)157 Bpmn (io.camunda.zeebe.model.bpmn.Bpmn)121 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)121 BpmnModelInstance (io.camunda.zeebe.model.bpmn.BpmnModelInstance)120 ProcessInstanceIntent (io.camunda.zeebe.protocol.record.intent.ProcessInstanceIntent)109 RecordingExporter (io.camunda.zeebe.test.util.record.RecordingExporter)109 List (java.util.List)109 Rule (org.junit.Rule)106 EngineRule (io.camunda.zeebe.engine.util.EngineRule)103 BpmnElementType (io.camunda.zeebe.protocol.record.value.BpmnElementType)103 ProcessInstanceRecordValue (io.camunda.zeebe.protocol.record.value.ProcessInstanceRecordValue)91 Assertions.tuple (org.assertj.core.api.Assertions.tuple)91 Collectors (java.util.stream.Collectors)87 ClassRule (org.junit.ClassRule)79 JobIntent (io.camunda.zeebe.protocol.record.intent.JobIntent)73 Map (java.util.Map)67 Duration (java.time.Duration)64 RecordingExporterTestWatcher (io.camunda.zeebe.test.util.record.RecordingExporterTestWatcher)63 TimerIntent (io.camunda.zeebe.protocol.record.intent.TimerIntent)55