Skip to content

Commit 1d079d0

Browse files
committed
Add new CDI test module and add tests for conditions injections
Signed-off-by: xstefank <[email protected]>
1 parent bd0e63e commit 1d079d0

File tree

15 files changed

+526
-0
lines changed

15 files changed

+526
-0
lines changed

integration-tests/cdi/pom.xml

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>io.quarkiverse.operatorsdk</groupId>
6+
<artifactId>quarkus-operator-sdk-integration-tests-parent</artifactId>
7+
<version>7.3.1-SNAPSHOT</version>
8+
<relativePath>../pom.xml</relativePath>
9+
</parent>
10+
<artifactId>quarkus-operator-sdk-integration-tests-cdi</artifactId>
11+
<name>Quarkus - Operator SDK - Integration Tests - CDI</name>
12+
<dependencies>
13+
<dependency>
14+
<groupId>io.quarkus</groupId>
15+
<artifactId>quarkus-resteasy</artifactId>
16+
</dependency>
17+
<dependency>
18+
<groupId>io.quarkiverse.operatorsdk</groupId>
19+
<artifactId>quarkus-operator-sdk</artifactId>
20+
</dependency>
21+
<dependency>
22+
<groupId>io.quarkus</groupId>
23+
<artifactId>quarkus-junit5</artifactId>
24+
<scope>test</scope>
25+
</dependency>
26+
<dependency>
27+
<groupId>io.quarkus</groupId>
28+
<artifactId>quarkus-test-kubernetes-client</artifactId>
29+
<scope>test</scope>
30+
</dependency>
31+
<dependency>
32+
<groupId>io.quarkus</groupId>
33+
<artifactId>quarkus-resteasy-jackson</artifactId>
34+
</dependency>
35+
<dependency>
36+
<groupId>io.rest-assured</groupId>
37+
<artifactId>rest-assured</artifactId>
38+
<scope>test</scope>
39+
</dependency>
40+
<dependency>
41+
<groupId>org.awaitility</groupId>
42+
<artifactId>awaitility</artifactId>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.bouncycastle</groupId>
46+
<artifactId>bcpkix-jdk18on</artifactId>
47+
<optional>true</optional>
48+
</dependency>
49+
</dependencies>
50+
<build>
51+
<plugins>
52+
<plugin>
53+
<groupId>io.quarkus</groupId>
54+
<artifactId>quarkus-maven-plugin</artifactId>
55+
<executions>
56+
<execution>
57+
<goals>
58+
<goal>build</goal>
59+
</goals>
60+
</execution>
61+
</executions>
62+
</plugin>
63+
<plugin>
64+
<groupId>org.apache.maven.plugins</groupId>
65+
<artifactId>maven-jar-plugin</artifactId>
66+
<executions>
67+
<execution>
68+
<goals>
69+
<goal>test-jar</goal>
70+
</goals>
71+
</execution>
72+
</executions>
73+
</plugin>
74+
<plugin>
75+
<artifactId>maven-surefire-plugin</artifactId>
76+
<configuration>
77+
<environmentVariables>
78+
<NAMESPACE_FROM_ENV>fromEnvVarNS</NAMESPACE_FROM_ENV>
79+
<QUARKUS_OPERATOR_SDK_CONTROLLERS_EMPTY_NAMESPACES>fromEnv1,fromEnv2
80+
</QUARKUS_OPERATOR_SDK_CONTROLLERS_EMPTY_NAMESPACES>
81+
<VARIABLE_NS_ENV>variableNSFromEnv</VARIABLE_NS_ENV>
82+
<QUARKUS_OPERATOR_SDK_CONTROLLERS_KEYCLOAKCONTROLLER_NAMESPACES>JOSDK_ALL_NAMESPACES
83+
</QUARKUS_OPERATOR_SDK_CONTROLLERS_KEYCLOAKCONTROLLER_NAMESPACES>
84+
</environmentVariables>
85+
</configuration>
86+
</plugin>
87+
</plugins>
88+
</build>
89+
<profiles>
90+
<profile>
91+
<id>native-image</id>
92+
<activation>
93+
<property>
94+
<name>native</name>
95+
</property>
96+
</activation>
97+
<build>
98+
<plugins>
99+
<plugin>
100+
<artifactId>maven-surefire-plugin</artifactId>
101+
<configuration>
102+
<skipTests>${native.surefire.skip}</skipTests>
103+
<systemPropertyVariables>
104+
<java.util.logging.manager>org.jboss.logmanager.LogManager
105+
</java.util.logging.manager>
106+
<maven.home>${maven.home}</maven.home>
107+
</systemPropertyVariables>
108+
<environmentVariables>
109+
<NAMESPACE_FROM_ENV>fromEnvVarNS</NAMESPACE_FROM_ENV>
110+
<QUARKUS_OPERATOR_SDK_CONTROLLERS_EMPTY_NAMESPACES>fromEnv1,fromEnv2
111+
</QUARKUS_OPERATOR_SDK_CONTROLLERS_EMPTY_NAMESPACES>
112+
<VARIABLE_NS_ENV>variableNSFromEnv</VARIABLE_NS_ENV>
113+
<QUARKUS_OPERATOR_SDK_CONTROLLERS_KEYCLOAKCONTROLLER_NAMESPACES>JOSDK_ALL_NAMESPACES
114+
</QUARKUS_OPERATOR_SDK_CONTROLLERS_KEYCLOAKCONTROLLER_NAMESPACES>
115+
</environmentVariables>
116+
</configuration>
117+
</plugin>
118+
<plugin>
119+
<artifactId>maven-failsafe-plugin</artifactId>
120+
<executions>
121+
<execution>
122+
<goals>
123+
<goal>integration-test</goal>
124+
<goal>verify</goal>
125+
</goals>
126+
<configuration>
127+
<systemPropertyVariables>
128+
<native.image.path>
129+
${project.build.directory}/${project.build.finalName}-runner
130+
</native.image.path>
131+
<java.util.logging.manager>org.jboss.logmanager.LogManager
132+
</java.util.logging.manager>
133+
<maven.home>${maven.home}</maven.home>
134+
</systemPropertyVariables>
135+
<environmentVariables>
136+
<NAMESPACE_FROM_ENV>fromEnvVarNS</NAMESPACE_FROM_ENV>
137+
<QUARKUS_OPERATOR_SDK_CONTROLLERS_EMPTY_NAMESPACES>fromEnv1,fromEnv2
138+
</QUARKUS_OPERATOR_SDK_CONTROLLERS_EMPTY_NAMESPACES>
139+
<VARIABLE_NS_ENV>variableNSFromEnv</VARIABLE_NS_ENV>
140+
<QUARKUS_OPERATOR_SDK_CONTROLLERS_KEYCLOAKCONTROLLER_NAMESPACES>JOSDK_ALL_NAMESPACES
141+
</QUARKUS_OPERATOR_SDK_CONTROLLERS_KEYCLOAKCONTROLLER_NAMESPACES>
142+
</environmentVariables>
143+
</configuration>
144+
</execution>
145+
</executions>
146+
</plugin>
147+
</plugins>
148+
</build>
149+
<properties>
150+
<quarkus.package.type>native</quarkus.package.type>
151+
</properties>
152+
</profile>
153+
</profiles>
154+
</project>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package io.quarkiverse.operatorsdk.it.cdi;
2+
3+
import java.util.Map;
4+
import java.util.Optional;
5+
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
8+
9+
import io.fabric8.kubernetes.api.model.ConfigMap;
10+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
11+
import io.javaoperatorsdk.operator.api.reconciler.Context;
12+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
13+
import io.javaoperatorsdk.operator.processing.event.ResourceID;
14+
15+
public class ConfigMapDependent extends CRUDKubernetesDependentResource<ConfigMap, TestResource> {
16+
17+
private static final Logger log = LoggerFactory.getLogger(ConfigMapDependent.class);
18+
19+
@Override
20+
protected ConfigMap desired(TestResource primary, Context<TestResource> context) {
21+
Optional<ConfigMap> optionalConfigMap = getConfigMap(primary, context);
22+
if (!optionalConfigMap.isPresent()) {
23+
ConfigMap configMap = new ConfigMap();
24+
configMap.setMetadata(
25+
new ObjectMetaBuilder()
26+
.withName(primary.getMetadata().getName() + "-cm")
27+
.withNamespace(primary.getMetadata().getNamespace())
28+
.build());
29+
configMap.setData(Map.of("key", "data"));
30+
return configMap;
31+
}
32+
return optionalConfigMap.get();
33+
}
34+
35+
@Override
36+
public void delete(TestResource primary, Context<TestResource> context) {
37+
Optional<ConfigMap> optionalConfigMap = getConfigMap(primary, context);
38+
if (optionalConfigMap == null)
39+
return;
40+
optionalConfigMap.ifPresent(
41+
(configMap -> {
42+
if (configMap.getMetadata().getAnnotations() != null) {
43+
context.getClient().resource(configMap).delete();
44+
}
45+
}));
46+
47+
}
48+
49+
private static Optional<ConfigMap> getConfigMap(TestResource primary, Context<TestResource> context) {
50+
Optional<ConfigMap> optionalConfigMap = context.getSecondaryResource(ConfigMap.class);
51+
if (optionalConfigMap.isEmpty()) {
52+
log.debug("Config Map not found for primary: {}", ResourceID.fromResource(primary));
53+
return Optional.empty();
54+
}
55+
return optionalConfigMap;
56+
}
57+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.quarkiverse.operatorsdk.it.cdi;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.inject.Inject;
5+
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.api.reconciler.Context;
8+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
9+
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
10+
import io.quarkus.arc.Unremovable;
11+
12+
@ApplicationScoped
13+
@Unremovable
14+
public class CustomActionvationCondition implements Condition {
15+
16+
@Inject
17+
TestUUIDBean testUUIDBean;
18+
19+
private String uuid;
20+
21+
@Override
22+
public boolean isMet(DependentResource dependentResource, HasMetadata primary, Context context) {
23+
uuid = testUUIDBean.uuid();
24+
return true;
25+
}
26+
27+
public String getUuid() {
28+
return uuid;
29+
}
30+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.quarkiverse.operatorsdk.it.cdi;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.inject.Inject;
5+
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.api.reconciler.Context;
8+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
9+
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
10+
import io.quarkus.arc.Unremovable;
11+
12+
@ApplicationScoped
13+
@Unremovable
14+
public class DeletePostCondition implements Condition {
15+
16+
@Inject
17+
TestUUIDBean testUUIDBean;
18+
19+
private String uuid;
20+
21+
@Override
22+
public boolean isMet(DependentResource dependentResource, HasMetadata primary, Context context) {
23+
this.uuid = testUUIDBean.uuid();
24+
return true;
25+
}
26+
27+
public String getUuid() {
28+
return uuid;
29+
}
30+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.quarkiverse.operatorsdk.it.cdi;
2+
3+
import java.util.Map;
4+
5+
import org.jboss.logging.Logger;
6+
7+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
8+
import io.fabric8.kubernetes.api.model.apps.Deployment;
9+
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
10+
import io.javaoperatorsdk.operator.api.reconciler.Context;
11+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource;
12+
13+
public class DeploymentDependent extends CRUDNoGCKubernetesDependentResource<Deployment, TestResource> {
14+
15+
private static final Logger LOG = Logger.getLogger(DeploymentDependent.class);
16+
17+
@Override
18+
protected Deployment desired(TestResource primary, Context<TestResource> context) {
19+
return new DeploymentBuilder()
20+
.withMetadata(new ObjectMetaBuilder()
21+
.withName(primary.getMetadata().getName() + "-deployment")
22+
.withNamespace("default")
23+
.withLabels(Map.of("app", primary.getMetadata().getName()))
24+
.build())
25+
.withNewSpec()
26+
.withNewSelector().withMatchLabels(Map.of("app", primary.getMetadata().getName())).endSelector()
27+
.withNewTemplate().withNewMetadata().withLabels(Map.of("app", primary.getMetadata().getName())).endMetadata()
28+
.withNewSpec().addNewContainer()
29+
.withName("nginx").withImage("nginx:1.14.2")
30+
.addNewPort().withName("http").withProtocol("TCP").withContainerPort(8080).endPort()
31+
.endContainer()
32+
.endSpec()
33+
.endTemplate()
34+
.endSpec()
35+
.build();
36+
}
37+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.quarkiverse.operatorsdk.it.cdi;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.inject.Inject;
5+
6+
import io.fabric8.kubernetes.api.model.apps.Deployment;
7+
import io.javaoperatorsdk.operator.api.reconciler.Context;
8+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
9+
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
10+
import io.quarkus.arc.Unremovable;
11+
12+
@ApplicationScoped
13+
@Unremovable
14+
public class ReadyPostCondition implements Condition<Deployment, TestResource> {
15+
16+
@Inject
17+
TestUUIDBean testUUIDBean;
18+
19+
private String uuid;
20+
21+
@Override
22+
public boolean isMet(DependentResource<Deployment, TestResource> dependentResource, TestResource primary,
23+
Context<TestResource> context) {
24+
uuid = testUUIDBean.uuid();
25+
return dependentResource
26+
.getSecondaryResource(primary, context)
27+
.map(deployment -> deployment.getSpec().getReplicas().equals(1))
28+
.orElse(false);
29+
}
30+
31+
public String getUuid() {
32+
return uuid;
33+
}
34+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.quarkiverse.operatorsdk.it.cdi;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import jakarta.inject.Inject;
5+
6+
import io.fabric8.kubernetes.api.model.HasMetadata;
7+
import io.javaoperatorsdk.operator.api.reconciler.Context;
8+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
9+
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
10+
import io.quarkus.arc.Unremovable;
11+
12+
@ApplicationScoped
13+
@Unremovable
14+
public class ReconcilePrecondition implements Condition {
15+
16+
@Inject
17+
TestUUIDBean testUUIDBean;
18+
19+
private String uuid;
20+
21+
@Override
22+
23+
public boolean isMet(DependentResource dependentResource, HasMetadata primary, Context context) {
24+
uuid = testUUIDBean.uuid();
25+
return true;
26+
}
27+
28+
public String getUuid() {
29+
return uuid;
30+
}
31+
}

0 commit comments

Comments
 (0)