forked from camunda-community-hub/zeebe-test-container
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReusableVolumeExampleTest.java
82 lines (72 loc) · 2.92 KB
/
ReusableVolumeExampleTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
* Copyright © 2019 camunda services GmbH ([email protected])
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.zeebe.containers.examples;
import static org.assertj.core.api.Assertions.assertThat;
import io.camunda.zeebe.client.ZeebeClient;
import io.camunda.zeebe.client.api.response.ProcessInstanceEvent;
import io.camunda.zeebe.model.bpmn.Bpmn;
import io.camunda.zeebe.model.bpmn.BpmnModelInstance;
import io.zeebe.containers.ZeebeContainer;
import io.zeebe.containers.ZeebeVolume;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
/**
* This example showcases how to create a simple test against a single node broker where data is
* kept across restarts.
*
* <p>To validate this, we deploy a process, restart the node, and then create an instance. If the
* data was not kept, then the original process wouldn't have been deployed.
*/
@Testcontainers
final class ReusableVolumeExampleTest {
private final ZeebeVolume volume = ZeebeVolume.newVolume();
@Container
private final ZeebeContainer zeebeContainer = new ZeebeContainer().withZeebeData(volume);
@Test
@Timeout(value = 5, unit = TimeUnit.MINUTES)
void shouldReuseVolume() {
// given
final BpmnModelInstance process =
Bpmn.createExecutableProcess("process").startEvent().endEvent().done();
// when
try (final ZeebeClient client = newZeebeClient(zeebeContainer)) {
client.newDeployCommand().addProcessModel(process, "process.bpmn").send().join();
}
// restart
zeebeContainer.stop();
zeebeContainer.start();
// create a process instance from the one we previously deployed - this would fail if we hadn't
// previously deployed our process model
final ProcessInstanceEvent processInstance;
try (final ZeebeClient client = newZeebeClient(zeebeContainer)) {
processInstance =
client.newCreateInstanceCommand().bpmnProcessId("process").latestVersion().send().join();
}
// then
assertThat(processInstance.getProcessInstanceKey())
.as("a process instance was successfully created")
.isPositive();
}
private ZeebeClient newZeebeClient(final ZeebeContainer node) {
return ZeebeClient.newClientBuilder()
.gatewayAddress(node.getExternalGatewayAddress())
.usePlaintext()
.build();
}
}