Skip to content

Commit e39b359

Browse files
committed
feat: generate integration test in bootstrapper (#2146)
Signed-off-by: Attila Mészáros <csviri@gmail.com>
1 parent 58bd66c commit e39b359

File tree

5 files changed

+74
-2
lines changed

5 files changed

+74
-2
lines changed

bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/Bootstrapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ private void addJavaFiles(File projectDir, String groupId, String artifactId) {
5757
try {
5858
var packages = groupId.replace(".", File.separator);
5959
var targetDir = new File(projectDir, "src/main/java/" + packages);
60+
var targetTestDir = new File(projectDir, "src/test/java/" + packages);
6061
FileUtils.forceMkdir(targetDir);
6162
var classFileNamePrefix = artifactClassId(artifactId);
6263
JAVA_FILES.forEach(f -> addTemplatedFile(projectDir, f, groupId, artifactId, targetDir,
@@ -65,6 +66,9 @@ private void addJavaFiles(File projectDir, String groupId, String artifactId) {
6566
addTemplatedFile(projectDir, "Runner.java", groupId, artifactId, targetDir, null);
6667
addTemplatedFile(projectDir, "ConfigMapDependentResource.java", groupId, artifactId,
6768
targetDir, null);
69+
addTemplatedFile(projectDir, "ReconcilerIntegrationTest.java", groupId,
70+
artifactId,
71+
targetTestDir, artifactClassId(artifactId) + "ReconcilerIntegrationTest.java");
6872
} catch (IOException e) {
6973
throw new RuntimeException(e);
7074
}

bootstrapper-maven-plugin/src/main/resources/templates/ConfigMapDependentResource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
public class ConfigMapDependentResource
1616
extends CRUDKubernetesDependentResource<ConfigMap, {{artifactClassId}}CustomResource> {
1717

18+
public static final String KEY = "key";
19+
1820
public ConfigMapDependentResource() {
1921
super(ConfigMap.class);
2022
}
@@ -28,7 +30,7 @@ protected ConfigMap desired({{artifactClassId}}CustomResource primary,
2830
.withName(primary.getMetadata().getName())
2931
.withNamespace(primary.getMetadata().getNamespace())
3032
.build())
31-
.withData(Map.of("data", primary.getSpec().getValue()))
33+
.withData(Map.of(KEY, primary.getSpec().getValue()))
3234
.build();
3335
}
3436
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package {{groupId}};
2+
3+
import io.fabric8.kubernetes.api.model.ConfigMap;
4+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
5+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
6+
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.extension.RegisterExtension;
8+
9+
import static {{groupId}}.ConfigMapDependentResource.KEY;
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
import static org.awaitility.Awaitility.await;
12+
13+
class {{artifactClassId}}ReconcilerIntegrationTest {
14+
15+
public static final String RESOURCE_NAME = "test1";
16+
public static final String INITIAL_VALUE = "initial value";
17+
public static final String CHANGED_VALUE = "changed value";
18+
19+
@RegisterExtension
20+
LocallyRunOperatorExtension extension =
21+
LocallyRunOperatorExtension.builder()
22+
.withReconciler({{artifactClassId}}Reconciler.class)
23+
.build();
24+
25+
@Test
26+
void testCRUDOperations() {
27+
var cr = extension.create(testResource());
28+
29+
await().untilAsserted(() -> {
30+
var cm = extension.get(ConfigMap.class, RESOURCE_NAME);
31+
assertThat(cm).isNotNull();
32+
assertThat(cm.getData()).containsEntry(KEY, INITIAL_VALUE);
33+
});
34+
35+
cr.getSpec().setValue(CHANGED_VALUE);
36+
cr = extension.replace(cr);
37+
38+
await().untilAsserted(() -> {
39+
var cm = extension.get(ConfigMap.class, RESOURCE_NAME);
40+
assertThat(cm.getData()).containsEntry(KEY, CHANGED_VALUE);
41+
});
42+
43+
extension.delete(cr);
44+
45+
await().untilAsserted(() -> {
46+
var cm = extension.get(ConfigMap.class, RESOURCE_NAME);
47+
assertThat(cm).isNull();
48+
});
49+
}
50+
51+
{{artifactClassId}}CustomResource testResource() {
52+
var resource = new {{artifactClassId}}CustomResource();
53+
resource.setMetadata(new ObjectMetaBuilder()
54+
.withName(RESOURCE_NAME)
55+
.build());
56+
resource.setSpec(new {{artifactClassId}}Spec());
57+
resource.getSpec().setValue(INITIAL_VALUE);
58+
return resource;
59+
}
60+
}

bootstrapper-maven-plugin/src/main/resources/templates/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@
3939
<artifactId>operator-framework</artifactId>
4040
<version>${josdk.version}</version>
4141
</dependency>
42+
<dependency>
43+
<groupId>io.javaoperatorsdk</groupId>
44+
<artifactId>operator-framework-junit-5</artifactId>
45+
<version>${josdk.version}</version>
46+
<scope>test</scope>
47+
</dependency>
4248
<dependency>
4349
<groupId>io.fabric8</groupId>
4450
<artifactId>crd-generator-apt</artifactId>

bootstrapper-maven-plugin/src/test/java/io/javaoperatorsdk/bootstrapper/BootstrapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ void copiesFilesToTarget() {
3131
private void assertProjectCompiles() {
3232
try {
3333
var process = Runtime.getRuntime()
34-
.exec("mvn clean install -f target/test-project/pom.xml");
34+
.exec("mvn clean install -f target/test-project/pom.xml -DskipTests");
3535

3636
BufferedReader stdOut = new BufferedReader(new InputStreamReader(process.getInputStream()));
3737

0 commit comments

Comments
 (0)