This is an automated email from the ASF dual-hosted git repository.
ricardozanini pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 5396c2c4ec Fix kie-issues-1909: Review usage of Fabric8 and tests,
remove deprecated APIs (#3880)
5396c2c4ec is described below
commit 5396c2c4ecfd9e165a341eeac51a6169a3ba0f08
Author: Ricardo Zanini <[email protected]>
AuthorDate: Fri Apr 4 13:41:46 2025 -0300
Fix kie-issues-1909: Review usage of Fabric8 and tests, remove deprecated
APIs (#3880)
* Fix kie-issues-1909: Review usage of Fabric8 and tests, remove deprecated
APIs
Signed-off-by: Ricardo Zanini <[email protected]>
* Disable kubernetes test devservices
Signed-off-by: Ricardo Zanini <[email protected]>
* Add default namespace; align fabric8 version
Signed-off-by: Ricardo Zanini <[email protected]>
---------
Signed-off-by: Ricardo Zanini <[email protected]>
---
.../catalog/KubernetesServiceCatalogTest.java | 8 +-
kogito-bom/pom.xml | 4 +-
kogito-build/kogito-dependencies-bom/pom.xml | 2 +-
.../fabric8-kubernetes-service-catalog/pom.xml | 1 -
.../runtime/pom.xml | 14 +--
.../catalog/KubernetesResourceDiscovery.java | 3 +
.../k8s/service/catalog/DeploymentUtilsTest.java | 123 ++++++++++-----------
.../Fabric8KubernetesServiceCatalogTest.java | 20 ++--
.../k8s/service/catalog/IngressUtilsTest.java | 46 ++++----
.../catalog/KnativeServiceDiscoveryTest.java | 47 ++++----
.../catalog/KubernetesResourceDiscoveryTest.java | 88 ++++++++-------
.../catalog/OpenShiftServiceDiscoveryTest.java | 110 +++++++++---------
.../fabric8/k8s/service/catalog/PodUtilsTest.java | 92 ++++++++-------
.../k8s/service/catalog/StatefulSetUtilsTest.java | 112 ++++++++++---------
.../src/test/resources/application.properties | 2 +
.../resources/knative/quarkus-greeting-https.yaml | 4 +-
.../knative/quarkus-greeting-kubernetes.yaml | 4 +-
.../knative/quarkus-greeting-openshift.yaml | 4 +-
.../test/resources/knative/quarkus-greeting.yaml | 4 +-
.../utils/KnativeResourceDiscoveryTestUtil.java | 58 ----------
.../KogitoAddOnKnativeEventingProcessor.java | 16 +--
.../KogitoAddOnKnativeEventingProcessorTest.java | 27 ++---
.../src/test/resources/application.properties | 1 +
.../KnativeEventingConfigSourceFactory.java | 4 +-
.../src/test/resources/application.properties | 1 +
.../knative/serving/integration-tests/pom.xml | 9 +-
.../customfunctions/it/KnativeServingAddonIT.java | 30 +++--
quarkus/addons/knative/serving/runtime/pom.xml | 10 --
.../addons/kubernetes/integration-tests/pom.xml | 2 +-
.../quarkus/kubernetes/ConfigValueExpanderIT.java | 4 +-
.../src/test/resources/application.properties | 1 +
quarkus/addons/kubernetes/pom.xml | 1 +
quarkus/addons/kubernetes/runtime/pom.xml | 7 +-
.../k8s/KnativeRouteEndpointDiscoveryTest.java | 25 +++--
.../KubernetesServiceEndpointDiscoveryTest.java | 36 +++---
.../KubeDiscoveryConfigCacheUpdaterTest.java | 24 ++--
.../src/test/resources/application.properties | 1 +
.../test-utils/pom.xml | 22 ++--
.../quarkus/k8s/test/utils/KubeTestUtils.java | 120 ++++++++++++++++++++
.../utils/OpenShiftMockServerTestResource.java | 50 +++++++++
.../src/test/resources/application.properties | 16 +--
quarkus/bom/pom.xml | 3 +-
42 files changed, 634 insertions(+), 522 deletions(-)
diff --git
a/addons/common/kubernetes-service-catalog/src/test/java/org/kie/kogito/addons/k8s/resource/catalog/KubernetesServiceCatalogTest.java
b/addons/common/kubernetes-service-catalog/src/test/java/org/kie/kogito/addons/k8s/resource/catalog/KubernetesServiceCatalogTest.java
index d7a8a26a16..dbdca22379 100644
---
a/addons/common/kubernetes-service-catalog/src/test/java/org/kie/kogito/addons/k8s/resource/catalog/KubernetesServiceCatalogTest.java
+++
b/addons/common/kubernetes-service-catalog/src/test/java/org/kie/kogito/addons/k8s/resource/catalog/KubernetesServiceCatalogTest.java
@@ -36,13 +36,13 @@ import static
org.kie.kogito.addons.k8s.resource.catalog.KubernetesProtocol.OPEN
*/
public abstract class KubernetesServiceCatalogTest {
- private static final String EXPECTED_KNATIVE_URI =
"http://serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io";
+ private static final String EXPECTED_KNATIVE_URI =
"http://serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io";
- private static final String EXPECTED_KUBERNETES_URI =
"http://serverless-workflow-greeting-quarkus-kubernetes.test.10.99.154.147.sslip.io";
+ private static final String EXPECTED_KUBERNETES_URI =
"http://serverless-workflow-greeting-quarkus-kubernetes.default.10.99.154.147.sslip.io";
- private static final String EXPECTED_OPENSHIFT_URI =
"http://serverless-workflow-greeting-quarkus-openshift.test.10.99.154.147.sslip.io";
+ private static final String EXPECTED_OPENSHIFT_URI =
"http://serverless-workflow-greeting-quarkus-openshift.default.10.99.154.147.sslip.io";
- private static final String NAMESPACE = "test";
+ private static final String NAMESPACE = "default";
private static final String KNATIVE_SERVICENAME =
"serverless-workflow-greeting-quarkus";
diff --git a/kogito-bom/pom.xml b/kogito-bom/pom.xml
index 13acf8c512..346809d6d6 100755
--- a/kogito-bom/pom.xml
+++ b/kogito-bom/pom.xml
@@ -465,12 +465,12 @@
</dependency>
<dependency>
<groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
<version>${project.version}</version>
<classifier>sources</classifier>
</dependency>
diff --git a/kogito-build/kogito-dependencies-bom/pom.xml
b/kogito-build/kogito-dependencies-bom/pom.xml
index 94b76364ba..605eca46dc 100644
--- a/kogito-build/kogito-dependencies-bom/pom.xml
+++ b/kogito-build/kogito-dependencies-bom/pom.xml
@@ -81,7 +81,7 @@
Don't add as a management dependency because it will break SpringBoot and
Quarkus
Kubernetes addons since they use a different version.
-->
-
<version.io.fabric8.kubernetes-client>6.13.3</version.io.fabric8.kubernetes-client>
+
<version.io.fabric8.kubernetes-client>6.13.4</version.io.fabric8.kubernetes-client>
<version.io.micrometer>1.12.2</version.io.micrometer>
<version.org.flywaydb>10.17.3</version.org.flywaydb>
<version.org.postgresql>42.7.4</version.org.postgresql>
diff --git a/quarkus/addons/fabric8-kubernetes-service-catalog/pom.xml
b/quarkus/addons/fabric8-kubernetes-service-catalog/pom.xml
index 129e038d7f..b301743c8b 100644
--- a/quarkus/addons/fabric8-kubernetes-service-catalog/pom.xml
+++ b/quarkus/addons/fabric8-kubernetes-service-catalog/pom.xml
@@ -36,6 +36,5 @@
<modules>
<module>deployment</module>
<module>runtime</module>
- <module>test-utils</module>
</modules>
</project>
\ No newline at end of file
diff --git a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/pom.xml
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/pom.xml
index e37281d150..62c6fd99a2 100644
--- a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/pom.xml
+++ b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/pom.xml
@@ -65,14 +65,19 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.kie</groupId>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-test-kubernetes-client</artifactId>
<scope>test</scope>
</dependency>
<dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-test-openshift-client</artifactId>
+ <groupId>io.fabric8</groupId>
+ <artifactId>openshift-server-mock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
@@ -90,11 +95,6 @@
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/main/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscovery.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/main/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscovery.java
index 5a21b1cff0..0ca0067410 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/main/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscovery.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/main/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscovery.java
@@ -78,6 +78,9 @@ class KubernetesResourceDiscovery extends
AbstractResourceDiscovery {
private KubernetesResourceUri resolveNamespace(KubernetesResourceUri uri,
Supplier<String> defaultNamespaceSupplier) {
if (uri.getNamespace() == null) {
String defaultNamespace = defaultNamespaceSupplier.get();
+ if (defaultNamespace == null || defaultNamespace.isEmpty()) {
+ throw new IllegalArgumentException("Can't resolve namespace
for uri " + uri + " using the default namespace supplier: " +
defaultNamespaceSupplier.get());
+ }
logDefaultNamespace(defaultNamespace);
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/DeploymentUtilsTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/DeploymentUtilsTest.java
index a3d2707ee7..14f48f2084 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/DeploymentUtilsTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/DeploymentUtilsTest.java
@@ -22,6 +22,8 @@ import java.net.URI;
import java.util.Optional;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
import io.fabric8.kubernetes.api.model.IntOrString;
@@ -30,38 +32,33 @@ import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.ReplicaSet;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
-/**
- * This tests also covers the queryServiceByLabelOrSelector method from {@link
ServiceUtils}
- * and queryPodByOwnerReference from {@link PodUtils}
- */
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class DeploymentUtilsTest {
- @KubernetesTestServer
- KubernetesServer mockServer;
-
+ private final String namespace = "serverless-workflow-greeting-quarkus";
+ @Inject
+ OpenShiftClient client;
@Inject
KubernetesResourceDiscovery discovery;
- private final String namespace = "serverless-workflow-greeting-quarkus";
-
@Test
public void testNotFoundDeployment() {
- Deployment deployment =
mockServer.getClient().apps().deployments().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment.yaml")).item();
+ Deployment deployment =
client.apps().deployments().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment.yaml")).item();
deployment.getMetadata().setName("test");
-
mockServer.getClient().resource(deployment).inNamespace(namespace).createOrReplace();
+
+ KubeTestUtils.createWithStatusPreserved(client, deployment, namespace,
Deployment.class);
+
assertEquals(Optional.empty(),
discovery.query(KubernetesResourceUri.parse("deployments.v1.apps/" + namespace
+ "/invalid")));
}
@@ -70,13 +67,13 @@ public class DeploymentUtilsTest {
public void testDeploymentWithService() {
var kubeURI = KubernetesResourceUri.parse("deployments.v1.apps/" +
namespace + "/example-deployment-with-service");
- Deployment deployment =
mockServer.getClient().apps().deployments().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment.yaml")).item();
-
mockServer.getClient().resource(deployment).inNamespace(namespace).createOrReplace();
+ Deployment deployment =
client.apps().deployments().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment.yaml")).item();
+ KubeTestUtils.createWithStatusPreserved(client, deployment, namespace,
Deployment.class);
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment-service.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment-service.yaml")).item();
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.11:80", url.get());
@@ -86,21 +83,21 @@ public class DeploymentUtilsTest {
public void testDeploymentWithServiceWithCustomPortName() {
var kubeURI = KubernetesResourceUri.parse("deployments.v1.apps/" +
namespace + "/custom-port-deployment?port-name=my-custom-port");
- Deployment deployment =
mockServer.getClient().apps().deployments().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment.yaml")).item();
+ Deployment deployment =
client.apps().deployments().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment.yaml")).item();
deployment.getMetadata().setName("custom-port-deployment");
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getPorts()
.add(new
ContainerPortBuilder().withName("test-port").withContainerPort(4000).build());
-
mockServer.getClient().resource(deployment).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, deployment, namespace,
Deployment.class);
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment-service.yaml")).item();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment-service.yaml")).item();
service.getMetadata().setName("custom-port-name-service");
service.getSpec().getPorts().add(new ServicePortBuilder()
.withName("my-custom-port")
.withTargetPort(new IntOrString("test-port"))
.withPort(4009).build());
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.11:4009", url.get());
@@ -110,20 +107,20 @@ public class DeploymentUtilsTest {
public void testDeploymentNoService() {
var kubeURI = KubernetesResourceUri.parse("deployments.v1.apps/" +
namespace + "/example-deployment-no-service");
- Deployment deployment =
mockServer.getClient().apps().deployments().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment-no-service.yaml")).item();
- Deployment createdDeployment =
mockServer.getClient().resource(deployment).inNamespace(namespace).createOrReplace();
+ Deployment deployment =
client.apps().deployments().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment-no-service.yaml")).item();
+ deployment = KubeTestUtils.createWithStatusPreserved(client,
deployment, namespace, Deployment.class);
- ReplicaSet rs =
mockServer.getClient().apps().replicaSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/replica-set-deployment-no-service.yaml")).item();
-
rs.getMetadata().getOwnerReferences().get(0).setUid(createdDeployment.getMetadata().getUid());
- ReplicaSet createdRs =
mockServer.getClient().resource(rs).inNamespace(namespace).createOrReplace();
+ ReplicaSet rs = client.apps().replicaSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/replica-set-deployment-no-service.yaml")).item();
+
rs.getMetadata().getOwnerReferences().get(0).setUid(deployment.getMetadata().getUid());
+ rs = KubeTestUtils.createWithStatusPreserved(client, rs, namespace,
ReplicaSet.class);
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/pod-deployment-no-service.yaml")).item();
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/pod-deployment-no-service.yaml")).item();
pod.getMetadata().setName("pod-deployment-no-service");
-
pod.getMetadata().getOwnerReferences().get(0).setUid(createdRs.getMetadata().getUid());
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+
pod.getMetadata().getOwnerReferences().get(0).setUid(rs.getMetadata().getUid());
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.0.11:8080", url.get());
@@ -133,23 +130,23 @@ public class DeploymentUtilsTest {
public void testDeploymentNoService2Replicas() {
var kubeURI = KubernetesResourceUri.parse("deployments.v1.apps/" +
namespace + "/example-deployment-no-service-2-replicas");
- Deployment deployment =
mockServer.getClient().apps().deployments().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment-no-service.yaml")).item();
+ Deployment deployment =
client.apps().deployments().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment-no-service.yaml")).item();
deployment.getMetadata().setName("example-deployment-no-service-2-replicas");
deployment.getStatus().setReplicas(2);
- Deployment createdDeployment =
mockServer.getClient().resource(deployment).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, deployment, namespace,
Deployment.class);
- ReplicaSet rs =
mockServer.getClient().apps().replicaSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/replica-set-deployment-no-service.yaml")).item();
+ ReplicaSet rs = client.apps().replicaSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/replica-set-deployment-no-service.yaml")).item();
rs.getMetadata().setName("rs-2-replicas");
-
rs.getMetadata().getOwnerReferences().get(0).setUid(createdDeployment.getMetadata().getUid());
- ReplicaSet createdRs =
mockServer.getClient().resource(rs).inNamespace(namespace).createOrReplace();
+
rs.getMetadata().getOwnerReferences().get(0).setUid(deployment.getMetadata().getUid());
+ KubeTestUtils.createWithStatusPreserved(client, rs, namespace,
ReplicaSet.class);
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/pod-deployment-no-service.yaml")).item();
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/pod-deployment-no-service.yaml")).item();
pod.getMetadata().setName("pod-2-replicas");
-
pod.getMetadata().getOwnerReferences().get(0).setUid(createdRs.getMetadata().getUid());
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+
pod.getMetadata().getOwnerReferences().get(0).setUid(rs.getMetadata().getUid());
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertTrue(url.isEmpty());
@@ -159,27 +156,25 @@ public class DeploymentUtilsTest {
public void testDeploymentNoServiceCustomPortName() {
var kubeURI = KubernetesResourceUri.parse("deployments.v1.apps/" +
namespace + "/custom-port-deployment-1?port-name=my-custom-port");
- Deployment deployment =
mockServer.getClient().apps().deployments().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/deployment-no-service.yaml")).item();
+ Deployment deployment =
client.apps().deployments().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/deployment-no-service.yaml")).item();
deployment.getMetadata().setName("custom-port-deployment-1");
deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getPorts()
.add(new
ContainerPortBuilder().withName("test-port").withContainerPort(4000).build());
- Deployment createdDeployment =
mockServer.getClient().resource(deployment).inNamespace(namespace).createOrReplace();
+ deployment = KubeTestUtils.createWithStatusPreserved(client,
deployment, namespace, Deployment.class);
- ReplicaSet rs =
mockServer.getClient().apps().replicaSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/replica-set-deployment-no-service.yaml")).item();
+ ReplicaSet rs = client.apps().replicaSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/replica-set-deployment-no-service.yaml")).item();
rs.getMetadata().setName("custom-port-rs");
-
rs.getMetadata().getOwnerReferences().get(0).setUid(createdDeployment.getMetadata().getUid());
- ReplicaSet createdRs =
mockServer.getClient().resource(rs).inNamespace(namespace).createOrReplace();
+
rs.getMetadata().getOwnerReferences().get(0).setUid(deployment.getMetadata().getUid());
+ rs = KubeTestUtils.createWithStatusPreserved(client, rs, namespace,
ReplicaSet.class);
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deployment/pod-deployment-no-service.yaml")).item();
-
pod.getMetadata().getOwnerReferences().get(0).setUid(createdRs.getMetadata().getUid());
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deployment/pod-deployment-no-service.yaml")).item();
+
pod.getMetadata().getOwnerReferences().get(0).setUid(rs.getMetadata().getUid());
pod.getSpec().getContainers().get(0).getPorts()
- .add(new ContainerPortBuilder()
- .withName("my-custom-port")
- .withContainerPort(4009).build());
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+ .add(new
ContainerPortBuilder().withName("my-custom-port").withContainerPort(4009).build());
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.0.11:4009", url.get());
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/Fabric8KubernetesServiceCatalogTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/Fabric8KubernetesServiceCatalogTest.java
index 54bc48295f..549cbdfd45 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/Fabric8KubernetesServiceCatalogTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/Fabric8KubernetesServiceCatalogTest.java
@@ -20,28 +20,28 @@ package
org.kie.kogito.addons.quarkus.fabric8.k8s.service.catalog;
import org.junit.jupiter.api.BeforeEach;
import org.kie.kogito.addons.k8s.resource.catalog.KubernetesServiceCatalogTest;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
-import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KnativeResourceDiscoveryTestUtil.createServiceIfNotExists;
+import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils.createKnativeServiceIfNotExists;
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
class Fabric8KubernetesServiceCatalogTest extends KubernetesServiceCatalogTest
{
- @KubernetesTestServer
- KubernetesServer mockServer;
+ @Inject
+ OpenShiftClient client;
@BeforeEach
void beforeEach() {
- createServiceIfNotExists(mockServer, "knative/quarkus-greeting.yaml",
getNamespace(), getKnativeServiceName());
- createServiceIfNotExists(mockServer,
"knative/quarkus-greeting-kubernetes.yaml", getNamespace(),
getKubernetesServiceName());
- createServiceIfNotExists(mockServer,
"knative/quarkus-greeting-openshift.yaml", getNamespace(),
getOpenshiftServicename());
+ createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting.yaml", getNamespace(), getKnativeServiceName());
+ createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting-kubernetes.yaml", getNamespace(),
getKubernetesServiceName());
+ createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting-openshift.yaml", getNamespace(),
getOpenshiftServicename());
}
@Inject
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/IngressUtilsTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/IngressUtilsTest.java
index 7542569f57..e42fec0c99 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/IngressUtilsTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/IngressUtilsTest.java
@@ -22,12 +22,13 @@ import java.net.URI;
import java.util.Optional;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
@@ -37,50 +38,55 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
* This test covers the queryIngressByName method from {@link IngressUtils}
*/
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class IngressUtilsTest {
- @KubernetesTestServer
- KubernetesServer mockServer;
+ private final String namespace = "serverless-workflow-greeting-quarkus";
@Inject
KubernetesResourceDiscovery discovery;
- private final String namespace = "serverless-workflow-greeting-quarkus";
+ @Inject
+ OpenShiftClient client;
@Test
- public void testIngressNotFound() {
- Ingress ingress = mockServer.getClient()
- .network().v1().ingresses()
+ void testIngressNotFound() {
+ Ingress ingress = client.network().v1().ingresses()
.inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("ingress/ingress-with-ip.yaml")).item();
-
mockServer.getClient().resource(ingress).inNamespace(namespace).createOrReplace();
+
.load(getClass().getClassLoader().getResourceAsStream("ingress/ingress-with-ip.yaml"))
+ .item();
+
+ KubeTestUtils.createWithStatusPreserved(client, ingress, namespace,
Ingress.class);
assertEquals(Optional.empty(),
discovery.query(KubernetesResourceUri.parse("ingresses.v1.networking.k8s.io/" +
namespace + "/invalid")));
}
@Test
- public void testIngressWithIP() {
+ void testIngressWithIP() {
var kubeURI =
KubernetesResourceUri.parse("ingresses.v1.networking.k8s.io/" + namespace +
"/process-quarkus-ingress");
- Ingress ingress =
mockServer.getClient().network().v1().ingresses().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("ingress/ingress-with-ip.yaml")).item();
+ Ingress ingress = client.network().v1().ingresses()
+ .inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("ingress/ingress-with-ip.yaml"))
+ .item();
-
mockServer.getClient().resource(ingress).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, ingress, namespace,
Ingress.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://80.80.25.9:80", url.get());
}
@Test
- public void testIngressWithTLS() {
+ void testIngressWithTLS() {
var kubeURI =
KubernetesResourceUri.parse("ingresses.v1.networking.k8s.io/" + namespace +
"/hello-app-ingress-tls");
- Ingress ingress =
mockServer.getClient().network().v1().ingresses().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("ingress/ingress-with-tls-and-host.yaml")).item();
+ Ingress ingress = client.network().v1().ingresses()
+ .inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("ingress/ingress-with-tls-and-host.yaml"))
+ .item();
-
mockServer.getClient().resource(ingress).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, ingress, namespace,
Ingress.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("https://80.80.25.9:443", url.get());
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KnativeServiceDiscoveryTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KnativeServiceDiscoveryTest.java
index c048fed5a3..cd9864bc8e 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KnativeServiceDiscoveryTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KnativeServiceDiscoveryTest.java
@@ -22,25 +22,26 @@ import java.net.URI;
import java.util.Optional;
import org.junit.jupiter.api.Test;
-import
org.kie.kogito.addons.quarkus.k8s.test.utils.KnativeResourceDiscoveryTestUtil;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
class KnativeServiceDiscoveryTest {
- private static final String REMOTE_SERVICE_HOST =
"serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io";
+ private static final String REMOTE_SERVICE_HOST =
"serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io";
+ private static final String NAMESPACE = "default";
- @KubernetesTestServer
- KubernetesServer mockServer;
+ @Inject
+ OpenShiftClient client;
@Inject
KnativeServiceDiscovery knativeServiceDiscovery;
@@ -48,34 +49,26 @@ class KnativeServiceDiscoveryTest {
@Test
void queryService() {
String remoteServiceUrl = "http://" + REMOTE_SERVICE_HOST;
- KnativeResourceDiscoveryTestUtil.createServiceIfNotExists(mockServer,
"knative/quarkus-greeting.yaml", "test",
"serverless-workflow-greeting-quarkus", remoteServiceUrl);
-
- Optional<URI> uri = knativeServiceDiscovery.query(new
KnativeServiceUri("test", "serverless-workflow-greeting-quarkus"));
- assertThat(uri).map(URI::getHost)
- .hasValue(REMOTE_SERVICE_HOST);
+ KubeTestUtils.createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting.yaml", NAMESPACE,
"serverless-workflow-greeting-quarkus", remoteServiceUrl);
- assertThat(uri).map(URI::getPort)
- .hasValue(-1);
+ Optional<URI> uri = knativeServiceDiscovery.query(new
KnativeServiceUri(NAMESPACE, "serverless-workflow-greeting-quarkus"));
- assertThat(uri).map(URI::getScheme)
- .hasValue("http");
+ assertThat(uri).map(URI::getHost).hasValue(REMOTE_SERVICE_HOST);
+ assertThat(uri).map(URI::getPort).hasValue(-1);
+ assertThat(uri).map(URI::getScheme).hasValue("http");
}
@Test
void https() {
String remoteServiceUrl = "https://" + REMOTE_SERVICE_HOST;
- KnativeResourceDiscoveryTestUtil.createServiceIfNotExists(mockServer,
"knative/quarkus-greeting-https.yaml", "test",
"serverless-workflow-greeting-quarkus-https", remoteServiceUrl);
-
- Optional<URI> url = knativeServiceDiscovery.query(new
KnativeServiceUri("test", "serverless-workflow-greeting-quarkus-https"));
- assertThat(url).map(URI::getHost)
- .hasValue(REMOTE_SERVICE_HOST);
+ KubeTestUtils.createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting-https.yaml", NAMESPACE,
"serverless-workflow-greeting-quarkus-https", remoteServiceUrl);
- assertThat(url).map(URI::getPort)
- .hasValue(-1);
+ Optional<URI> url = knativeServiceDiscovery.query(new
KnativeServiceUri(NAMESPACE, "serverless-workflow-greeting-quarkus-https"));
- assertThat(url).map(URI::getScheme)
- .hasValue("https");
+ assertThat(url).map(URI::getHost).hasValue(REMOTE_SERVICE_HOST);
+ assertThat(url).map(URI::getPort).hasValue(-1);
+ assertThat(url).map(URI::getScheme).hasValue("https");
}
}
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscoveryTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscoveryTest.java
index 01f250e0b5..94b4994381 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscoveryTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/KubernetesResourceDiscoveryTest.java
@@ -22,41 +22,42 @@ import java.net.URI;
import java.util.Optional;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.knative.client.KnativeClient;
import io.fabric8.kubernetes.api.model.Service;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
- * This tests also covers the queryServiceByName method from {@link
ServiceUtils}
+ * This test also covers the queryServiceByName method from {@link
ServiceUtils}
*/
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class KubernetesResourceDiscoveryTest {
- @KubernetesTestServer
- KubernetesServer mockServer;
+ private final String namespace = "serverless-workflow-greeting-quarkus";
@Inject
- KubernetesResourceDiscovery kubernetesResourceDiscovery;
+ OpenShiftClient client;
- private final String namespace = "serverless-workflow-greeting-quarkus";
+ @Inject
+ KubernetesResourceDiscovery kubernetesResourceDiscovery;
@Test
public void testServiceNodePort() {
var kubeURI = KubernetesResourceUri.parse("services.v1/" + namespace +
"/process-quarkus-example-pod-service");
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-node-port.yaml")).item();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-node-port.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url =
kubernetesResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.10:80", url.get());
@@ -66,12 +67,13 @@ public class KubernetesResourceDiscoveryTest {
public void testServiceNodePortCustomPortName() {
var kubeURI = KubernetesResourceUri.parse("services.v1/" + namespace +
"/custom-port-name-service?port-name=my-custom-port");
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-node-port.yaml")).item();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-node-port.yaml")).item();
service.getMetadata().setName("custom-port-name-service");
service.getSpec().getPorts().get(0).setName("my-custom-port");
service.getSpec().getPorts().get(0).setPort(8089);
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url =
kubernetesResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.10:8089", url.get());
@@ -81,9 +83,10 @@ public class KubernetesResourceDiscoveryTest {
public void testServiceClusterIP() {
var kubeURI = KubernetesResourceUri.parse("services.v1/" + namespace +
"/process-quarkus-example-pod-clusterip-svc");
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url =
kubernetesResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.10:80", url.get());
@@ -93,9 +96,10 @@ public class KubernetesResourceDiscoveryTest {
public void testServiceExternalName() {
var kubeURI = KubernetesResourceUri.parse("services.v1/" + namespace +
"/process-quarkus-example-pod");
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-external-name.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-external-name.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url =
kubernetesResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://my-public.domain.org:80", url.get());
@@ -103,9 +107,10 @@ public class KubernetesResourceDiscoveryTest {
@Test
public void testNotFoundService() {
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
assertEquals(Optional.empty(),
kubernetesResourceDiscovery.query(KubernetesResourceUri.parse("services.v1/" +
namespace + "/service-1")));
@@ -113,10 +118,11 @@ public class KubernetesResourceDiscoveryTest {
@Test
public void testNotSupportedTypeService() {
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
service.getSpec().setType(KubeConstants.LOAD_BALANCER_TYPE);
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
assertEquals(Optional.empty(),
kubernetesResourceDiscovery.query(KubernetesResourceUri.parse("services.v1/" +
namespace + "/process-quarkus-example-pod-clusterip-svc")));
@@ -124,11 +130,13 @@ public class KubernetesResourceDiscoveryTest {
@Test
public void testServiceWithoutNamespace() {
- var kubeURI =
KubernetesResourceUri.parse("services.v1/process-quarkus-example-pod-service");
+ var kubeURI = KubernetesResourceUri.parse("services.v1/svc-no-port");
+
+ Service service = client.services().inNamespace("default")
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-node-port.yaml")).item();
+ service.getMetadata().setName("svc-no-port");
- Service service = mockServer.getClient().services().inNamespace("test")
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-node-port.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace("test").createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, service, "default",
Service.class);
Optional<String> url =
kubernetesResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.10:80", url.get());
@@ -136,13 +144,13 @@ public class KubernetesResourceDiscoveryTest {
@Test
public void testNotFoundKnativeService() {
- KnativeClient knativeClient =
mockServer.getClient().adapt(KnativeClient.class);
+ KnativeClient knativeClient = client.adapt(KnativeClient.class);
+
io.fabric8.knative.serving.v1.Service service =
knativeClient.services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("knative/quarkus-greeting.yaml")).item();
+
.load(getClass().getClassLoader().getResourceAsStream("knative/quarkus-greeting.yaml")).item();
service.getMetadata().setName("test");
- // ItemWritableOperation#create is deprecated. However, we can't use
the new method while Quarkus LTS is not greater than 2.16.
- knativeClient.services().inNamespace(namespace).create(service);
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
io.fabric8.knative.serving.v1.Service.class);
assertEquals(Optional.empty(),
kubernetesResourceDiscovery.query(KubernetesResourceUri.parse("services.v1.serving.knative.dev/"
+ namespace + "/invalid")));
@@ -152,14 +160,12 @@ public class KubernetesResourceDiscoveryTest {
public void testKnativeService() {
var kubeURI =
KubernetesResourceUri.parse("services.v1.serving.knative.dev/" + namespace +
"/serverless-workflow-greeting-quarkus");
- KnativeClient knativeClient =
mockServer.getClient().adapt(KnativeClient.class);
- io.fabric8.knative.serving.v1.Service kService =
knativeClient.services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("knative/quarkus-greeting.yaml")).item();
+ io.fabric8.knative.serving.v1.Service kService =
client.adapt(KnativeClient.class).services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("knative/quarkus-greeting.yaml")).item();
- // ItemWritableOperation#create is deprecated. However, we can't use
the new method while Quarkus LTS is not greater than 2.16.
- knativeClient.services().inNamespace(namespace).create(kService);
+ KubeTestUtils.createWithStatusPreserved(client, kService, namespace,
io.fabric8.knative.serving.v1.Service.class);
Optional<String> url =
kubernetesResourceDiscovery.query(kubeURI).map(URI::toString);
-
assertEquals("http://serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io",
url.get());
+
assertEquals("http://serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io",
url.get());
}
}
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/OpenShiftServiceDiscoveryTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/OpenShiftServiceDiscoveryTest.java
index e27d9107c0..4b6a124384 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/OpenShiftServiceDiscoveryTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/OpenShiftServiceDiscoveryTest.java
@@ -22,127 +22,117 @@ import java.net.URI;
import java.util.Optional;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.ReplicationController;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.openshift.api.model.DeploymentConfig;
import io.fabric8.openshift.api.model.Route;
-import io.fabric8.openshift.client.server.mock.OpenShiftServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.OpenShiftTestServer;
-import io.quarkus.test.kubernetes.client.WithOpenShiftTestServer;
import jakarta.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
@QuarkusTest
-@WithOpenShiftTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class OpenShiftServiceDiscoveryTest {
- @OpenShiftTestServer
- OpenShiftServer mockServer;
+ private final String namespace = "serverless-workflow-greeting-quarkus";
@Inject
OpenShiftResourceDiscovery kubeResourceDiscovery;
- private final String namespace = "serverless-workflow-greeting-quarkus";
+ @Inject
+ OpenShiftClient client;
@Test
- public void testNotFoundDeploymentConfig() {
- DeploymentConfig deploymentConfig =
mockServer.getOpenshiftClient().deploymentConfigs().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config.yaml")).item();
+ void testNotFoundDeploymentConfig() {
+ DeploymentConfig deploymentConfig =
client.deploymentConfigs().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config.yaml")).item();
deploymentConfig.getMetadata().setName("test");
-
mockServer.getOpenshiftClient().resource(deploymentConfig).inNamespace(namespace).createOrReplace();
+
+ KubeTestUtils.createWithStatusPreserved(client, deploymentConfig,
namespace, DeploymentConfig.class);
+
assertEquals(Optional.empty(),
kubeResourceDiscovery.query(KubernetesResourceUri.parse("deploymentconfigs.v1.apps.openshift.io/"
+ namespace + "/invalid")));
}
@Test
- public void testDeploymentConfigWithService() {
+ void testDeploymentConfigWithService() {
var kubeURI =
KubernetesResourceUri.parse("deploymentconfigs.v1.apps.openshift.io/" +
namespace + "/example-dc-with-service");
- DeploymentConfig deploymentConfig = mockServer.getOpenshiftClient()
- .deploymentConfigs()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config.yaml")).item();
-
mockServer.getOpenshiftClient().resource(deploymentConfig).inNamespace(namespace).createOrReplace();
+ DeploymentConfig deploymentConfig =
client.deploymentConfigs().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config.yaml")).item();
+ KubeTestUtils.createWithStatusPreserved(client, deploymentConfig,
namespace, DeploymentConfig.class);
- Service service = mockServer.getOpenshiftClient()
- .services()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config-service.yaml")).item();
-
mockServer.getOpenshiftClient().resource(service).inNamespace(namespace).createOrReplace();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config-service.yaml")).item();
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url =
kubeResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.12:80", url.get());
}
@Test
- public void testDeploymentConfigWithoutService() {
+ void testDeploymentConfigWithoutService() {
var kubeURI =
KubernetesResourceUri.parse("deploymentconfigs.v1.apps.openshift.io/" +
namespace + "/example-dc-no-service");
- DeploymentConfig deploymentConfig = mockServer.getOpenshiftClient()
- .deploymentConfigs()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config-no-service.yaml")).item();
- DeploymentConfig createdDc =
mockServer.getOpenshiftClient().resource(deploymentConfig).inNamespace(namespace).createOrReplace();
-
- ReplicationController rc = mockServer.getOpenshiftClient()
- .replicationControllers()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deploymentConfig/replication-controller-dc-no-svc.yaml")).item();
-
rc.getMetadata().getOwnerReferences().get(0).setUid(createdDc.getMetadata().getUid());
- ReplicationController createdRc =
mockServer.getOpenshiftClient().resource(rc).inNamespace(namespace).createOrReplace();
-
- Pod pod = mockServer.getOpenshiftClient()
- .pods()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("deploymentConfig/pod-deployment-config-no-service.yaml")).item();
+ DeploymentConfig deploymentConfig =
client.deploymentConfigs().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deploymentConfig/deployment-config-no-service.yaml")).item();
+ deploymentConfig = KubeTestUtils.createWithStatusPreserved(client,
deploymentConfig, namespace, DeploymentConfig.class);
+
+ ReplicationController rc =
client.replicationControllers().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deploymentConfig/replication-controller-dc-no-svc.yaml")).item();
+
rc.getMetadata().getOwnerReferences().get(0).setUid(deploymentConfig.getMetadata().getUid());
+ rc = KubeTestUtils.createWithStatusPreserved(client, rc, namespace,
ReplicationController.class);
+
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("deploymentConfig/pod-deployment-config-no-service.yaml")).item();
pod.getMetadata().setName("example-dc-no-service-1-phlx4");
-
pod.getMetadata().getOwnerReferences().get(0).setUid(createdRc.getMetadata().getUid());
-
mockServer.getOpenshiftClient().resource(pod).inNamespace(namespace).createOrReplace();
+
pod.getMetadata().getOwnerReferences().get(0).setUid(rc.getMetadata().getUid());
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url =
kubeResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.25.190:8080", url.get());
}
@Test
- public void testNotFoundRoute() {
- Route route = mockServer.getOpenshiftClient()
- .routes()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("route/route.yaml")).item();
-
mockServer.getOpenshiftClient().resource(route).inNamespace(namespace).createOrReplace();
+ void testNotFoundRoute() {
+ Route route = client.routes().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("route/route.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, route, namespace,
Route.class);
assertEquals(Optional.empty(),
kubeResourceDiscovery.query(KubernetesResourceUri.parse("routes.v1.route.openshift.io/"
+ namespace + "/invalid")));
}
@Test
- public void testRoute() {
+ void testRoute() {
var kubeURI =
KubernetesResourceUri.parse("routes.v1.route.openshift.io/" + namespace +
"/test-route");
- Route route = mockServer.getOpenshiftClient()
- .routes()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("route/route.yaml")).item();
-
mockServer.getOpenshiftClient().resource(route).inNamespace(namespace).createOrReplace();
+ Route route = client.routes().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("route/route.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, route, namespace,
Route.class);
Optional<String> url =
kubeResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("http://test-route.org:80", url.get());
}
@Test
- public void testRouteTLS() {
+ void testRouteTLS() {
var kubeURI =
KubernetesResourceUri.parse("routes.v1.route.openshift.io/" + namespace +
"/test-route-tls");
- Route route = mockServer.getOpenshiftClient()
- .routes()
- .inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("route/route-tls.yaml")).item();
-
mockServer.getOpenshiftClient().resource(route).inNamespace(namespace).createOrReplace();
+ Route route = client.routes().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("route/route-tls.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, route, namespace,
Route.class);
Optional<String> url =
kubeResourceDiscovery.query(kubeURI).map(URI::toString);
assertEquals("https://secure-test-route-tls:443", url.get());
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/PodUtilsTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/PodUtilsTest.java
index bacdf675d0..4ca9858aa9 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/PodUtilsTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/PodUtilsTest.java
@@ -23,107 +23,115 @@ import java.util.Map;
import java.util.Optional;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Service;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
-/**
- * This tests also covers the queryServiceByLabelOrSelector method from {@link
ServiceUtils}
- */
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class PodUtilsTest {
- @KubernetesTestServer
- KubernetesServer mockServer;
+ private final String namespace = "serverless-workflow-greeting-quarkus";
@Inject
- KubernetesResourceDiscovery discovery;
+ OpenShiftClient client;
- private final String namespace = "serverless-workflow-greeting-quarkus";
+ @Inject
+ KubernetesResourceDiscovery discovery;
@Test
- public void testPodNotFound() {
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
+ void testPodNotFound() {
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
pod.getMetadata().setName("test-pod");
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
+
assertEquals(Optional.empty(),
discovery.query(KubernetesResourceUri.parse("pods.v1/" +
namespace + "/hello")));
}
@Test
- public void testPodWithNoService() {
- var kubeURI = KubernetesResourceUri.parse("pods.v1/" + namespace +
"/process-quarkus-example-pod-no-service");
+ void testPodWithNoService() {
+ final String tempNamespace = "temp-namespace";
+ var kubeURI = KubernetesResourceUri.parse("pods.v1/" + tempNamespace +
"/test-pod-no-svc");
+
+ Pod pod = client.pods().inNamespace(tempNamespace)
+
.load(getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
+ pod.getMetadata().setName("test-pod-no-svc");
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, pod, tempNamespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.0.21:8080", url.get());
}
@Test
- public void testPodWithNoServiceCustomPortName() {
+ void testPodWithNoServiceCustomPortName() {
var kubeURI = KubernetesResourceUri.parse("pods.v1/" + namespace +
"/pod-no-service-custom-port?port-name=my-custom-port");
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("pod/pod-no-service-custom-port-name.yaml")).item();
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("pod/pod-no-service-custom-port-name.yaml")).item();
+
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.0.22:52485", url.get());
}
@Test
- public void testPodWithService() {
+ void testPodWithService() {
var kubeURI = KubernetesResourceUri.parse("pods.v1/" + namespace +
"/test-pod-with-service");
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
pod.getMetadata().setName("test-pod-with-service");
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
+
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.10:80", url.get());
}
@Test
- public void testPodWithServiceWithCustomLabel() {
+ void testPodWithServiceWithCustomLabel() {
var kubeURI = KubernetesResourceUri.parse("pods.v1/" + namespace +
"/test-pod-with-service-custom-label?labels=label-name=test-label;other-label=other-value");
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("pod/pod-no-service.yaml")).item();
pod.getMetadata().setName("test-pod-with-service-custom-label");
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
- service.getMetadata().setName("
process-quarkus-example-pod-clusterip-svc-custom-label");
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
- Service service1 =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
+
service.getMetadata().setName("process-quarkus-example-pod-clusterip-svc-custom-label");
+
+ KubeTestUtils.createWithStatusPreserved(client, service, namespace,
Service.class);
+
+ Service service1 = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("service/service-clusterip.yaml")).item();
Map<String, String> labels = service1.getMetadata().getLabels();
labels.put("label-name", "test-label");
service1.getMetadata().setLabels(labels);
service1.getMetadata().setName("second-service");
service1.getSpec().setClusterIP("20.20.20.20");
-
mockServer.getClient().resource(service1).inNamespace(namespace).createOrReplace();
+
+ KubeTestUtils.createWithStatusPreserved(client, service1, namespace,
Service.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://20.20.20.20:80", url.get());
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/StatefulSetUtilsTest.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/StatefulSetUtilsTest.java
index c39d6eccbb..26440a09a6 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/StatefulSetUtilsTest.java
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/java/org/kie/kogito/addons/quarkus/fabric8/k8s/service/catalog/StatefulSetUtilsTest.java
@@ -23,6 +23,8 @@ import java.util.Optional;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
import io.fabric8.kubernetes.api.model.IntOrString;
@@ -30,44 +32,41 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.apps.StatefulSet;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
-/**
- * This tests also covers the queryServiceByLabelOrSelector method from {@link
ServiceUtils}
- * and queryPodByOwnerReference from {@link PodUtils}
- */
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class StatefulSetUtilsTest {
- @KubernetesTestServer
- KubernetesServer mockServer;
+ private final String namespace = "serverless-workflow-greeting-quarkus";
@Inject
- KubernetesResourceDiscovery discovery;
+ OpenShiftClient client;
- private final String namespace = "serverless-workflow-greeting-quarkus";
+ @Inject
+ KubernetesResourceDiscovery discovery;
@BeforeEach
public void removeResources() {
-
mockServer.getClient().apps().statefulSets().inNamespace(namespace).delete();
- mockServer.getClient().services().inNamespace(namespace).delete();
+ client.apps().statefulSets().inNamespace(namespace).delete();
+ client.services().inNamespace(namespace).delete();
}
@Test
public void testNotFoundStatefulSet() {
- StatefulSet statefulSet =
mockServer.getClient().apps().statefulSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
+ StatefulSet statefulSet =
client.apps().statefulSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
statefulSet.getMetadata().setName("test");
-
mockServer.getClient().resource(statefulSet).inNamespace(namespace).createOrReplace();
+
+ client.resource(statefulSet).inNamespace(namespace).createOr(existing
-> client.resource(statefulSet).inNamespace(namespace).update());
+
assertEquals(Optional.empty(),
discovery.query(KubernetesResourceUri.parse("statefulsets.v1.apps/" + namespace
+ "/invalid")));
}
@@ -76,13 +75,15 @@ public class StatefulSetUtilsTest {
public void testStatefulSetWithService() {
var kubeURI = KubernetesResourceUri.parse("statefulsets.v1.apps/" +
namespace + "/example-statefulset-with-service");
- StatefulSet statefulSet =
mockServer.getClient().apps().statefulSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset.yaml")).item();
-
mockServer.getClient().resource(statefulSet).inNamespace(namespace).createOrReplace();
+ StatefulSet statefulSet =
client.apps().statefulSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset.yaml")).item();
+
+ client.resource(statefulSet).inNamespace(namespace).createOr(existing
-> client.resource(statefulSet).inNamespace(namespace).update());
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-service.yaml")).item();
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-service.yaml")).item();
+
+ client.resource(service).inNamespace(namespace).createOr(existing ->
client.resource(service).inNamespace(namespace).update());
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.11:80", url.get());
@@ -91,17 +92,19 @@ public class StatefulSetUtilsTest {
@Test
public void testStatefulSetWithServiceWithCustomPortName() {
var kubeURI = KubernetesResourceUri.parse("statefulsets.v1.apps/" +
namespace + "/custom-port-statefulset?port-name=my-custom-port-stateful");
- StatefulSet statefulSet =
mockServer.getClient().apps().statefulSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset.yaml")).item();
+
+ StatefulSet statefulSet =
client.apps().statefulSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset.yaml")).item();
statefulSet.getMetadata().setName("custom-port-statefulset");
statefulSet.getSpec().getTemplate().getSpec().getContainers().get(0).getPorts()
.add(new
ContainerPortBuilder().withName("test-port").withContainerPort(4000).build());
statefulSet.getMetadata().getLabels().put("app-custom",
"custom-port-statefulset");
statefulSet.getMetadata().getLabels().remove("app");
-
mockServer.getClient().resource(statefulSet).inNamespace(namespace).createOrReplace();
- Service service =
mockServer.getClient().services().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-service.yaml")).item();
+ client.resource(statefulSet).inNamespace(namespace).createOr(existing
-> client.resource(statefulSet).inNamespace(namespace).update());
+
+ Service service = client.services().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-service.yaml")).item();
service.getMetadata().setName("custom-port-name-service-statefulset");
service.getSpec().getPorts().add(new ServicePortBuilder()
.withName("my-custom-port-stateful")
@@ -109,7 +112,8 @@ public class StatefulSetUtilsTest {
.withPort(4009).build());
service.getSpec().getSelector().put("app-custom",
"custom-port-statefulset");
service.getSpec().getSelector().remove("app");
-
mockServer.getClient().resource(service).inNamespace(namespace).createOrReplace();
+
+ client.resource(service).inNamespace(namespace).createOr(existing ->
client.resource(service).inNamespace(namespace).update());
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://10.10.10.11:4009", url.get());
@@ -119,15 +123,16 @@ public class StatefulSetUtilsTest {
public void testStatefulSetNoService() {
var kubeURI = KubernetesResourceUri.parse("statefulsets.v1.apps/" +
namespace + "/process-quarkus-example-statefulset-no-service");
- StatefulSet statefulSet =
mockServer.getClient().apps().statefulSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
- StatefulSet createdDeployment =
mockServer.getClient().resource(statefulSet).inNamespace(namespace).createOrReplace();
+ StatefulSet statefulSet =
client.apps().statefulSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
+
+ statefulSet = KubeTestUtils.createWithStatusPreserved(client,
statefulSet, namespace, StatefulSet.class);
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-pod-no-service.yaml")).item();
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-pod-no-service.yaml")).item();
pod.getMetadata().setName("pod-deployment-no-service");
-
pod.getMetadata().getOwnerReferences().get(0).setUid(createdDeployment.getMetadata().getUid());
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+
pod.getMetadata().getOwnerReferences().get(0).setUid(statefulSet.getMetadata().getUid());
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.0.11:8080", url.get());
@@ -137,17 +142,19 @@ public class StatefulSetUtilsTest {
public void testStatefulSetNoService2Replicas() {
var kubeURI = KubernetesResourceUri.parse("statefulsets.v1.apps/" +
namespace + "/example-statefulset-no-service-2-replicas");
- StatefulSet statefulSet =
mockServer.getClient().apps().statefulSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
+ StatefulSet statefulSet =
client.apps().statefulSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
statefulSet.getMetadata().setName("example-statefulset-no-service-2-replicas");
statefulSet.getStatus().setReplicas(2);
- StatefulSet createdstatefulSet =
mockServer.getClient().resource(statefulSet).inNamespace(namespace).createOrReplace();
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-pod-no-service.yaml")).item();
+ statefulSet = KubeTestUtils.createWithStatusPreserved(client,
statefulSet, namespace, StatefulSet.class);
+
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-pod-no-service.yaml")).item();
pod.getMetadata().setName("pod-2-replicas");
-
pod.getMetadata().getOwnerReferences().get(0).setUid(createdstatefulSet.getMetadata().getUid());
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+
pod.getMetadata().getOwnerReferences().get(0).setUid(statefulSet.getMetadata().getUid());
+
+ KubeTestUtils.createWithStatusPreserved(client, pod, namespace,
Pod.class);
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertTrue(url.isEmpty());
@@ -157,21 +164,22 @@ public class StatefulSetUtilsTest {
public void testStatefulSetNoServiceCustomPortName() {
var kubeURI = KubernetesResourceUri.parse("statefulsets.v1.apps/" +
namespace + "/custom-port-statefulset-1?port-name=my-custom-port");
- StatefulSet statefulSet =
mockServer.getClient().apps().statefulSets().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
+ StatefulSet statefulSet =
client.apps().statefulSets().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-no-service.yaml")).item();
statefulSet.getMetadata().setName("custom-port-statefulset-1");
statefulSet.getSpec().getTemplate().getSpec().getContainers().get(0).getPorts()
.add(new
ContainerPortBuilder().withName("test-port").withContainerPort(4000).build());
- StatefulSet createdStatefulSet =
mockServer.getClient().resource(statefulSet).inNamespace(namespace).createOrReplace();
- Pod pod = mockServer.getClient().pods().inNamespace(namespace)
-
.load(this.getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-pod-no-service.yaml")).item();
+ StatefulSet createdStatefulSet =
+
client.resource(statefulSet).inNamespace(namespace).createOr(existing ->
client.resource(statefulSet).inNamespace(namespace).update());
+
+ Pod pod = client.pods().inNamespace(namespace)
+
.load(getClass().getClassLoader().getResourceAsStream("statefulset/statefulset-pod-no-service.yaml")).item();
pod.getMetadata().getOwnerReferences().get(0).setUid(createdStatefulSet.getMetadata().getUid());
pod.getSpec().getContainers().get(0).getPorts()
- .add(new ContainerPortBuilder()
- .withName("my-custom-port")
- .withContainerPort(4010).build());
-
mockServer.getClient().resource(pod).inNamespace(namespace).createOrReplace();
+ .add(new
ContainerPortBuilder().withName("my-custom-port").withContainerPort(4010).build());
+
+ client.resource(pod).inNamespace(namespace).createOr(existing ->
client.resource(pod).inNamespace(namespace).update());
Optional<String> url = discovery.query(kubeURI).map(URI::toString);
assertEquals("http://172.17.0.11:4010", url.get());
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/application.properties
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/application.properties
new file mode 100644
index 0000000000..3a22304f56
--- /dev/null
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/application.properties
@@ -0,0 +1,2 @@
+quarkus.devservices.enabled=false
+quarkus.kubernetes-client.namespace=default
\ No newline at end of file
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-https.yaml
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-https.yaml
index 50c124a0dd..20cad62212 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-https.yaml
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-https.yaml
@@ -52,7 +52,7 @@ spec:
percent: 100
status:
address:
- url: http://serverless-workflow-greeting-quarkus.test.svc.cluster.local
+ url: http://serverless-workflow-greeting-quarkus.default.svc.cluster.local
conditions:
- lastTransitionTime: '2022-08-17T13:59:00Z'
status: 'True'
@@ -70,4 +70,4 @@ status:
- latestRevision: true
percent: 100
revisionName: serverless-workflow-greeting-quarkus-00001
- url: https://serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io
+ url:
https://serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-kubernetes.yaml
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-kubernetes.yaml
index 255e9cd085..0d06b493d7 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-kubernetes.yaml
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-kubernetes.yaml
@@ -52,7 +52,7 @@ spec:
percent: 100
status:
address:
- url: http://serverless-workflow-greeting-quarkus.test.svc.cluster.local
+ url: http://serverless-workflow-greeting-quarkus.default.svc.cluster.local
conditions:
- lastTransitionTime: '2022-08-17T13:59:00Z'
status: 'True'
@@ -70,4 +70,4 @@ status:
- latestRevision: true
percent: 100
revisionName: serverless-workflow-greeting-quarkus-00001
- url:
http://serverless-workflow-greeting-quarkus-kubernetes.test.10.99.154.147.sslip.io
+ url:
http://serverless-workflow-greeting-quarkus-kubernetes.default.10.99.154.147.sslip.io
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-openshift.yaml
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-openshift.yaml
index 4967f91e87..f8ef98956d 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-openshift.yaml
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting-openshift.yaml
@@ -52,7 +52,7 @@ spec:
percent: 100
status:
address:
- url: http://serverless-workflow-greeting-quarkus.test.svc.cluster.local
+ url: http://serverless-workflow-greeting-quarkus.default.svc.cluster.local
conditions:
- lastTransitionTime: '2022-08-17T13:59:00Z'
status: 'True'
@@ -70,4 +70,4 @@ status:
- latestRevision: true
percent: 100
revisionName: serverless-workflow-greeting-quarkus-00001
- url:
http://serverless-workflow-greeting-quarkus-openshift.test.10.99.154.147.sslip.io
+ url:
http://serverless-workflow-greeting-quarkus-openshift.default.10.99.154.147.sslip.io
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting.yaml
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting.yaml
index cd9993e400..96e7dd0ee3 100644
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting.yaml
+++
b/quarkus/addons/fabric8-kubernetes-service-catalog/runtime/src/test/resources/knative/quarkus-greeting.yaml
@@ -52,7 +52,7 @@ spec:
percent: 100
status:
address:
- url: http://serverless-workflow-greeting-quarkus.test.svc.cluster.local
+ url: http://serverless-workflow-greeting-quarkus.default.svc.cluster.local
conditions:
- lastTransitionTime: '2022-08-17T13:59:00Z'
status: 'True'
@@ -70,4 +70,4 @@ status:
- latestRevision: true
percent: 100
revisionName: serverless-workflow-greeting-quarkus-00001
- url: http://serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io
+ url:
http://serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KnativeResourceDiscoveryTestUtil.java
b/quarkus/addons/fabric8-kubernetes-service-catalog/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KnativeResourceDiscoveryTestUtil.java
deleted file mode 100644
index 4ab6754563..0000000000
---
a/quarkus/addons/fabric8-kubernetes-service-catalog/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KnativeResourceDiscoveryTestUtil.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 org.kie.kogito.addons.quarkus.k8s.test.utils;
-
-import java.io.InputStream;
-
-import io.fabric8.knative.client.KnativeClient;
-import io.fabric8.knative.serving.v1.Service;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
-public final class KnativeResourceDiscoveryTestUtil {
-
- private KnativeResourceDiscoveryTestUtil() {
- }
-
- public static void createServiceIfNotExists(KubernetesServer k8sServer,
String knativeYaml, String namespace, String serviceName) {
- createServiceIfNotExists(k8sServer, knativeYaml, namespace,
serviceName, null);
- }
-
- @SuppressWarnings("deprecation") // Quarkus LTS 2.13 compatibility
- public static void createServiceIfNotExists(KubernetesServer k8sServer,
String knativeYaml, String namespace, String serviceName, String
remoteServiceUrl) {
- if
(k8sServer.getClient().services().inNamespace(namespace).withName(serviceName).get()
== null) {
- KnativeClient knativeClient =
k8sServer.getClient().adapt(KnativeClient.class);
-
- Service service = knativeClient.services()
- .inNamespace(namespace)
- .load(getResourceAsStream(knativeYaml))
- .item();
-
- if (remoteServiceUrl != null) {
- service.getStatus().setUrl(remoteServiceUrl);
- }
-
- // ItemWritableOperation#create is deprecated. However, we can't
use the new method while Quarkus LTS is not greater than 2.16.
- knativeClient.services().inNamespace(namespace).create(service);
- }
- }
-
- private static InputStream getResourceAsStream(String knativeYaml) {
- return
KnativeResourceDiscoveryTestUtil.class.getClassLoader().getResourceAsStream(knativeYaml);
- }
-}
diff --git
a/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessor.java
b/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessor.java
index 1587962ba3..69d8142658 100644
---
a/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessor.java
+++
b/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessor.java
@@ -18,7 +18,6 @@
*/
package org.kie.kogito.addons.quarkus.knative.eventing.deployment;
-import java.nio.file.Path;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -48,9 +47,8 @@ import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
-import io.quarkus.deployment.builditem.GeneratedFileSystemResourceBuildItem;
+import io.quarkus.deployment.builditem.GeneratedResourceBuildItem;
import io.quarkus.deployment.builditem.SystemPropertyBuildItem;
-import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
import io.quarkus.smallrye.health.deployment.spi.HealthBuildItem;
import static
org.kie.kogito.addons.quarkus.knative.eventing.KnativeEventingConfigSourceFactory.INCLUDE_PROCESS_EVENTS;
@@ -94,14 +92,12 @@ public class KogitoAddOnKnativeEventingProcessor extends
AnyEngineKogitoAddOnPro
* This conditional was added in favor of the kogito serverless workflow
operator dev mode image, since in dev
* mode no Broker, nor Sink Binding is generated.
*
- * @param outputTarget Build item created by the quarkus deployment
infrastructure with information about the current output target directory to
generate the files
* @param resourcesMetadata Build item generated by other processors (e.g.
{@link KogitoProcessKnativeEventingProcessor})
* @param generatedResources outcome of this build step with the contents
of the `kogito.yml` file
*/
@BuildStep(onlyIfNot = { IsTest.class, IsDevelopment.class })
- void generate(OutputTargetBuildItem outputTarget,
- Optional<KogitoKnativeResourcesMetadataBuildItem>
resourcesMetadata,
- BuildProducer<GeneratedFileSystemResourceBuildItem>
generatedResources) {
+ void generate(Optional<KogitoKnativeResourcesMetadataBuildItem>
resourcesMetadata,
+ BuildProducer<GeneratedResourceBuildItem> generatedResources) {
if (resourcesMetadata.isPresent()) {
final List<Trigger> triggers =
this.generateTriggers(resourcesMetadata.get());
final Optional<KogitoSource> kogitoSource =
this.generateKogitoSource(resourcesMetadata.get());
@@ -112,7 +108,6 @@ public class KogitoAddOnKnativeEventingProcessor extends
AnyEngineKogitoAddOnPro
if (sinkBinding.isPresent() || kogitoSource.isPresent() ||
!triggers.isEmpty()) {
final Optional<Broker> broker = this.generateBroker();
- final Path outputDir =
outputTarget.getOutputDirectory().resolve(TARGET_KUBERNETES);
final byte[] resourcesBytes =
new KogitoKnativeGenerator()
.addResources(triggers)
@@ -123,8 +118,9 @@ public class KogitoAddOnKnativeEventingProcessor extends
AnyEngineKogitoAddOnPro
if (resourcesBytes == null || resourcesBytes.length == 0) {
LOGGER.warn("Couldn't generate Kogito Knative resources
for service {}", resourcesMetadata.get().getDeployment().getName());
} else {
- generatedResources.produce(new
GeneratedFileSystemResourceBuildItem(Path.of(TARGET_KUBERNETES,
FILE_NAME).toString(), resourcesBytes));
- LOGGER.info("Generated Knative resources for Kogito
Service {} in {}", resourcesMetadata.get().getDeployment().getName(),
outputDir.resolve(FILE_NAME));
+ generatedResources.produce(new
GeneratedResourceBuildItem(TARGET_KUBERNETES + "/" + FILE_NAME,
resourcesBytes));
+ LOGGER.info("Generated Knative resources for Kogito
Service {} in {}/{}",
+ resourcesMetadata.get().getDeployment().getName(),
TARGET_KUBERNETES, FILE_NAME);
}
} else {
LOGGER.info("No events found in the Kogito resources defined
in the project. Skipping Kogito Knative resources generation.");
diff --git
a/quarkus/addons/knative/eventing/deployment/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessorTest.java
b/quarkus/addons/knative/eventing/deployment/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessorTest.java
index b194995fd5..6fa69b5c39 100644
---
a/quarkus/addons/knative/eventing/deployment/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessorTest.java
+++
b/quarkus/addons/knative/eventing/deployment/src/test/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/KogitoAddOnKnativeEventingProcessorTest.java
@@ -18,7 +18,6 @@
*/
package org.kie.kogito.addons.quarkus.knative.eventing.deployment;
-import java.nio.file.Paths;
import java.util.Collections;
import java.util.HashSet;
import java.util.Optional;
@@ -35,9 +34,8 @@ import org.mockito.ArgumentCaptor;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
-import io.quarkus.deployment.builditem.GeneratedFileSystemResourceBuildItem;
+import io.quarkus.deployment.builditem.GeneratedResourceBuildItem;
import io.quarkus.deployment.builditem.SystemPropertyBuildItem;
-import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
import io.quarkus.smallrye.health.deployment.spi.HealthBuildItem;
import static org.assertj.core.api.Assertions.assertThat;
@@ -56,7 +54,6 @@ class KogitoAddOnKnativeEventingProcessorTest {
@Test
void checkKogitoFileIsGeneratedWithDefaultConfig() {
- final OutputTargetBuildItem outputTargetBuildItem = new
OutputTargetBuildItem(Paths.get("/"), "", false, null, Optional.empty());
final Set<CloudEventMeta> ces = new HashSet<>();
ces.add(new CloudEventMeta("myProducedEvent", "/local/test",
EventKind.PRODUCED));
ces.add(new CloudEventMeta("myConsumedEvent", "/local/test",
EventKind.CONSUMED));
@@ -66,7 +63,7 @@ class KogitoAddOnKnativeEventingProcessorTest {
final KogitoAddOnKnativeEventingProcessor eventingProcessor =
buildTestProcessorWithDefaultConfig();
final MockGeneratedFSProducer producer = new MockGeneratedFSProducer();
- eventingProcessor.generate(outputTargetBuildItem,
Optional.of(resourcesMetadataBuildItem), producer);
+ eventingProcessor.generate(Optional.of(resourcesMetadataBuildItem),
producer);
assertNotNull(producer.getItem().getData());
assertTrue(producer.getItem().getData().length > 0);
@@ -78,7 +75,6 @@ class KogitoAddOnKnativeEventingProcessorTest {
@Test
void checkKogitoFileIsGeneratedOnlyProduced() {
- final OutputTargetBuildItem outputTargetBuildItem = new
OutputTargetBuildItem(Paths.get("/"), "", false, null, Optional.empty());
final Set<CloudEventMeta> ces = new HashSet<>();
ces.add(new CloudEventMeta("myProducedEvent", "/local/test",
EventKind.PRODUCED));
final KogitoServiceDeploymentTarget deploymentTarget = new
KogitoServiceDeploymentTarget("apps", "v1", "Deployment", "kogito-service");
@@ -87,7 +83,7 @@ class KogitoAddOnKnativeEventingProcessorTest {
final KogitoAddOnKnativeEventingProcessor eventingProcessor =
buildTestProcessorWithDefaultConfig();
final MockGeneratedFSProducer producer = new MockGeneratedFSProducer();
- eventingProcessor.generate(outputTargetBuildItem,
Optional.of(resourcesMetadataBuildItem), producer);
+ eventingProcessor.generate(Optional.of(resourcesMetadataBuildItem),
producer);
assertNotNull(producer.getItem().getData());
assertTrue(producer.getItem().getData().length > 0);
@@ -99,7 +95,6 @@ class KogitoAddOnKnativeEventingProcessorTest {
@Test
void checkKogitoFileIsGeneratedWithKogitoSource() {
- final OutputTargetBuildItem outputTargetBuildItem = new
OutputTargetBuildItem(Paths.get("/"), "", false, null, Optional.empty());
final Set<CloudEventMeta> ces = new HashSet<>();
ces.add(new CloudEventMeta("myProducedEvent", "/local/test",
EventKind.PRODUCED));
final KogitoServiceDeploymentTarget deploymentTarget = new
KogitoServiceDeploymentTarget("apps", "v1", "Deployment", "kogito-service");
@@ -109,7 +104,7 @@ class KogitoAddOnKnativeEventingProcessorTest {
eventingProcessor.config.generateKogitoSource = true;
final MockGeneratedFSProducer producer = new MockGeneratedFSProducer();
- eventingProcessor.generate(outputTargetBuildItem,
Optional.of(resourcesMetadataBuildItem), producer);
+ eventingProcessor.generate(Optional.of(resourcesMetadataBuildItem),
producer);
assertNotNull(producer.getItem().getData());
assertTrue(producer.getItem().getData().length > 0);
@@ -121,7 +116,6 @@ class KogitoAddOnKnativeEventingProcessorTest {
@Test
void checkKogitoFileIsGeneratedOnlyConsumed() {
- final OutputTargetBuildItem outputTargetBuildItem = new
OutputTargetBuildItem(Paths.get("/"), "", false, null, Optional.empty());
final Set<CloudEventMeta> ces = new HashSet<>();
ces.add(new CloudEventMeta("myConsumedEvent", "/local/test",
EventKind.CONSUMED));
final KogitoServiceDeploymentTarget deploymentTarget = new
KogitoServiceDeploymentTarget("apps", "v1", "Deployment", "kogito-service");
@@ -130,7 +124,7 @@ class KogitoAddOnKnativeEventingProcessorTest {
final KogitoAddOnKnativeEventingProcessor eventingProcessor =
buildTestProcessorWithDefaultConfig();
final MockGeneratedFSProducer producer = new MockGeneratedFSProducer();
- eventingProcessor.generate(outputTargetBuildItem,
Optional.of(resourcesMetadataBuildItem), producer);
+ eventingProcessor.generate(Optional.of(resourcesMetadataBuildItem),
producer);
assertNotNull(producer.getItem().getData());
assertTrue(producer.getItem().getData().length > 0);
@@ -142,7 +136,6 @@ class KogitoAddOnKnativeEventingProcessorTest {
@Test
void checkNotProducedIfNoCEs() {
- final OutputTargetBuildItem outputTargetBuildItem = new
OutputTargetBuildItem(Paths.get("/"), "", false, null, Optional.empty());
final Set<CloudEventMeta> ces = new HashSet<>();
final KogitoServiceDeploymentTarget deploymentTarget = new
KogitoServiceDeploymentTarget("apps", "v1", "Deployment", "kogito-service");
final KogitoKnativeResourcesMetadataBuildItem
resourcesMetadataBuildItem =
@@ -150,7 +143,7 @@ class KogitoAddOnKnativeEventingProcessorTest {
final KogitoAddOnKnativeEventingProcessor eventingProcessor =
buildTestProcessorWithDefaultConfig();
final MockGeneratedFSProducer producer = new MockGeneratedFSProducer();
- eventingProcessor.generate(outputTargetBuildItem,
Optional.of(resourcesMetadataBuildItem), producer);
+ eventingProcessor.generate(Optional.of(resourcesMetadataBuildItem),
producer);
assertNull(producer.getItem());
}
@@ -224,16 +217,16 @@ class KogitoAddOnKnativeEventingProcessorTest {
return eventingProcessor;
}
- private static final class MockGeneratedFSProducer implements
BuildProducer<GeneratedFileSystemResourceBuildItem> {
+ private static final class MockGeneratedFSProducer implements
BuildProducer<GeneratedResourceBuildItem> {
- private GeneratedFileSystemResourceBuildItem item;
+ private GeneratedResourceBuildItem item;
@Override
- public void produce(GeneratedFileSystemResourceBuildItem item) {
+ public void produce(GeneratedResourceBuildItem item) {
this.item = item;
}
- public GeneratedFileSystemResourceBuildItem getItem() {
+ public GeneratedResourceBuildItem getItem() {
return item;
}
}
diff --git
a/quarkus/addons/knative/eventing/deployment/src/test/resources/application.properties
b/quarkus/addons/knative/eventing/deployment/src/test/resources/application.properties
new file mode 100644
index 0000000000..b1970efd7d
--- /dev/null
+++
b/quarkus/addons/knative/eventing/deployment/src/test/resources/application.properties
@@ -0,0 +1 @@
+quarkus.kubernetes-client.devservices.enabled=false
\ No newline at end of file
diff --git
a/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java
b/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java
index 088e353ba9..5a72079fa1 100644
---
a/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java
+++
b/quarkus/addons/knative/eventing/runtime/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/KnativeEventingConfigSourceFactory.java
@@ -79,8 +79,8 @@ public final class KnativeEventingConfigSourceFactory
implements ConfigSourceFac
}
final String sinkUrl = context.getValue(K_SINK).getValue();
- if (sinkUrl == null || "".equals(sinkUrl)) {
- LOGGER.warn("{} variable is empty or doesn't exist. Please make
sure that this service is a Knative Source or has a SinkBinding bound to it.",
K_SINK);
+ if (sinkUrl == null || sinkUrl.isEmpty()) {
+ LOGGER.debug("{} variable is empty or doesn't exist. Please make
sure that this service is a Knative Source or has a SinkBinding bound to it.",
K_SINK);
}
configuration.forEach((key, value) -> LOGGER.debug("Adding connector
-> {} = {}", key, value));
diff --git
a/quarkus/addons/knative/eventing/runtime/src/test/resources/application.properties
b/quarkus/addons/knative/eventing/runtime/src/test/resources/application.properties
new file mode 100644
index 0000000000..b1970efd7d
--- /dev/null
+++
b/quarkus/addons/knative/eventing/runtime/src/test/resources/application.properties
@@ -0,0 +1 @@
+quarkus.kubernetes-client.devservices.enabled=false
\ No newline at end of file
diff --git a/quarkus/addons/knative/serving/integration-tests/pom.xml
b/quarkus/addons/knative/serving/integration-tests/pom.xml
index 30ab460c3a..3dac05dcff 100644
--- a/quarkus/addons/knative/serving/integration-tests/pom.xml
+++ b/quarkus/addons/knative/serving/integration-tests/pom.xml
@@ -75,6 +75,7 @@
<groupId>org.kie</groupId>
<artifactId>kie-addons-quarkus-kubernetes</artifactId>
</dependency>
+
<dependency>
<groupId>org.kie</groupId>
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog</artifactId>
@@ -110,12 +111,16 @@
<artifactId>quarkus-test-kubernetes-client</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>io.fabric8</groupId>
+ <artifactId>openshift-server-mock</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
<scope>test</scope>
</dependency>
-
<dependency>
<groupId>org.apache.kie.sonataflow</groupId>
<artifactId>sonataflow-quarkus-deployment</artifactId>
diff --git
a/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
b/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
index fd48c99774..0e8686197e 100644
---
a/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
+++
b/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
@@ -48,21 +48,17 @@ import static
com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
-import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KnativeResourceDiscoveryTestUtil.createServiceIfNotExists;
+import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils.createKnativeServiceIfNotExists;
import static
org.kie.kogito.addons.quarkus.knative.serving.customfunctions.KnativeWorkItemHandler.APPLICATION_CLOUDEVENTS_JSON_CHARSET_UTF_8;
@QuarkusTest
@WithKubernetesTestServer
class KnativeServingAddonIT {
+ public static final String AT_LEAST_ONE_NON_WHITE_CHARACTER_REGEX =
".*\\S.*";
private static final String NAMESPACE = "default";
-
private static final String SERVICENAME =
"serverless-workflow-greeting-quarkus";
-
private static final String CLOUD_EVENT_PATH = "/cloud-event";
-
- public static final String AT_LEAST_ONE_NON_WHITE_CHARACTER_REGEX =
".*\\S.*";
-
private static WireMockServer wireMockServer;
private static String remoteServiceUrl;
@@ -78,11 +74,6 @@ class KnativeServingAddonIT {
createWiremockServer();
}
- @BeforeEach
- void beforeEach() {
- createServiceIfNotExists(mockServer, "knative/quarkus-greeting.yaml",
NAMESPACE, SERVICENAME, remoteServiceUrl);
- }
-
@AfterAll
static void afterAll() {
if (wireMockServer != null) {
@@ -90,6 +81,17 @@ class KnativeServingAddonIT {
}
}
+ private static void createWiremockServer() {
+ wireMockServer = new
WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort());
+ wireMockServer.start();
+ remoteServiceUrl = wireMockServer.baseUrl();
+ }
+
+ @BeforeEach
+ void beforeEach() {
+ createKnativeServiceIfNotExists(mockServer.getClient(),
"knative/quarkus-greeting.yaml", NAMESPACE, SERVICENAME, remoteServiceUrl);
+ }
+
@Test
void executeHttpGet() {
mockExecuteHttpGetEndpoint();
@@ -347,10 +349,4 @@ class KnativeServingAddonIT {
.withJsonBody(JsonNodeFactory.instance.objectNode()
.put("message",
JsonNodeFactory.instance.arrayNode().add(23).add(24).toPrettyString()))));
}
-
- private static void createWiremockServer() {
- wireMockServer = new
WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort());
- wireMockServer.start();
- remoteServiceUrl = wireMockServer.baseUrl();
- }
}
diff --git a/quarkus/addons/knative/serving/runtime/pom.xml
b/quarkus/addons/knative/serving/runtime/pom.xml
index fc784c365a..8f6b478585 100644
--- a/quarkus/addons/knative/serving/runtime/pom.xml
+++ b/quarkus/addons/knative/serving/runtime/pom.xml
@@ -88,16 +88,6 @@
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
- <scope>test</scope>
- </dependency>
<!-- this is used implicitly by Maven parallel builds so let's make
Maven aware of it -->
<dependency>
<groupId>org.kie</groupId>
diff --git a/quarkus/addons/kubernetes/integration-tests/pom.xml
b/quarkus/addons/kubernetes/integration-tests/pom.xml
index 462229b7d3..dc51c40578 100644
--- a/quarkus/addons/kubernetes/integration-tests/pom.xml
+++ b/quarkus/addons/kubernetes/integration-tests/pom.xml
@@ -98,7 +98,7 @@
</dependency>
<dependency>
<groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
<scope>test</scope>
</dependency>
diff --git
a/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
b/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
index bf1560edec..a82716419d 100644
---
a/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
+++
b/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
@@ -28,7 +28,7 @@ import
io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;
-import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KnativeResourceDiscoveryTestUtil.createServiceIfNotExists;
+import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils.createKnativeServiceIfNotExists;
@QuarkusIntegrationTest
@WithKubernetesTestServer
@@ -43,7 +43,7 @@ class ConfigValueExpanderIT {
@BeforeEach
void beforeEach() {
- createServiceIfNotExists(mockServer, "knative/quarkus-greeting.yaml",
NAMESPACE, SERVICENAME);
+ createKnativeServiceIfNotExists(mockServer.getClient(),
"knative/quarkus-greeting.yaml", NAMESPACE, SERVICENAME);
}
@Test
diff --git
a/quarkus/addons/kubernetes/integration-tests/src/test/resources/application.properties
b/quarkus/addons/kubernetes/integration-tests/src/test/resources/application.properties
new file mode 100644
index 0000000000..b1970efd7d
--- /dev/null
+++
b/quarkus/addons/kubernetes/integration-tests/src/test/resources/application.properties
@@ -0,0 +1 @@
+quarkus.kubernetes-client.devservices.enabled=false
\ No newline at end of file
diff --git a/quarkus/addons/kubernetes/pom.xml
b/quarkus/addons/kubernetes/pom.xml
index af741a3122..508620154f 100644
--- a/quarkus/addons/kubernetes/pom.xml
+++ b/quarkus/addons/kubernetes/pom.xml
@@ -37,6 +37,7 @@
<module>runtime</module>
<module>deployment</module>
<module>integration-tests</module>
+ <module>test-utils</module>
</modules>
diff --git a/quarkus/addons/kubernetes/runtime/pom.xml
b/quarkus/addons/kubernetes/runtime/pom.xml
index 2447f4b5d8..0e0ab7f800 100644
--- a/quarkus/addons/kubernetes/runtime/pom.xml
+++ b/quarkus/addons/kubernetes/runtime/pom.xml
@@ -65,11 +65,6 @@
<artifactId>quarkus-test-kubernetes-client</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-test-openshift-client</artifactId>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
@@ -87,7 +82,7 @@
</dependency>
<dependency>
<groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
<scope>test</scope>
</dependency>
<dependency>
diff --git
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
index 8bb2ccc044..c2ff5ad565 100644
---
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
+++
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
@@ -65,8 +65,12 @@ public class KnativeRouteEndpointDiscoveryTest {
// configure mock
final RouteStatus status = new RouteStatus();
status.setUrl("http://192.168.2.32");
- final Route route = new
RouteBuilder().withNewMetadata().withName("ksvc1").withNamespace("test").and().withStatus(status).build();
- knativeClient.routes().create(route);
+ final Route route = new RouteBuilder()
+
.withNewMetadata().withName("ksvc1").withNamespace("test").endMetadata()
+ .withStatus(status)
+ .build();
+
+ knativeClient.routes().resource(route).create();
final Optional<Endpoint> endpoint =
endpointDiscovery.findEndpoint("test", "ksvc1");
assertTrue(endpoint.isPresent());
@@ -74,7 +78,7 @@ public class KnativeRouteEndpointDiscoveryTest {
try {
new URL(endpoint.get().getUrl());
} catch (MalformedURLException e) {
- fail("The generated URL " + endpoint.get().getUrl() + " is
invalid"); //verbose
+ fail("The generated URL " + endpoint.get().getUrl() + " is
invalid");
}
}
@@ -91,9 +95,11 @@ public class KnativeRouteEndpointDiscoveryTest {
.withNewMetadata()
.withLabels(labels)
.withName("ksvc2").withNamespace("test")
- .and().withStatus(status)
+ .endMetadata()
+ .withStatus(status)
.build();
- knativeClient.routes().create(route);
+
+ knativeClient.routes().resource(route).create();
final List<Endpoint> endpoint = endpointDiscovery.findEndpoint("test",
labels);
assertFalse(endpoint.isEmpty());
@@ -101,7 +107,7 @@ public class KnativeRouteEndpointDiscoveryTest {
try {
new URL(endpoint.get(0).getUrl());
} catch (MalformedURLException e) {
- fail("The generated URL " + endpoint.get(0).getUrl() + " is
invalid"); //verbose
+ fail("The generated URL " + endpoint.get(0).getUrl() + " is
invalid");
}
}
@@ -111,8 +117,11 @@ public class KnativeRouteEndpointDiscoveryTest {
endpointDiscovery.setKnativeClient(knativeClient);
// configure mock
- final Route route = new
RouteBuilder().withNewMetadata().withName("ksvc3").withNamespace("test").and().build();
- knativeClient.routes().create(route);
+ final Route route = new RouteBuilder()
+
.withNewMetadata().withName("ksvc3").withNamespace("test").endMetadata()
+ .build();
+
+ knativeClient.routes().resource(route).create();
final Optional<Endpoint> endpoint =
endpointDiscovery.findEndpoint("test", "ksvc3");
assertTrue(endpoint.isEmpty());
diff --git
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KubernetesServiceEndpointDiscoveryTest.java
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KubernetesServiceEndpointDiscoveryTest.java
index 98c38f833d..ad7acb6f94 100644
---
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KubernetesServiceEndpointDiscoveryTest.java
+++
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KubernetesServiceEndpointDiscoveryTest.java
@@ -29,15 +29,15 @@ import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.kie.kogito.addons.k8s.Endpoint;
import org.kie.kogito.addons.k8s.EndpointDiscovery;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceBuilder;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServiceSpec;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
import jakarta.inject.Named;
@@ -47,35 +47,43 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
public class KubernetesServiceEndpointDiscoveryTest {
- @KubernetesTestServer
- KubernetesServer mockServer;
+ @Inject
+ OpenShiftClient client;
@Named("default")
@Inject
EndpointDiscovery endpointDiscovery;
private void createServiceIfNotExist(final String name, Map<String,
String> labels, Integer... ports) {
- if
(mockServer.getClient().services().inNamespace("test").withName(name).get() !=
null) {
+ if (client.services().inNamespace("test").withName(name).get() !=
null) {
return;
}
+
final List<ServicePort> sPorts = new ArrayList<>();
- for (Integer integer : ports) {
+ for (Integer portNumber : ports) {
final ServicePort port = new ServicePort();
- port.setPort(integer);
+ port.setPort(portNumber);
sPorts.add(port);
}
+
final Service svc = new ServiceBuilder()
.withNewMetadata()
- .withName(name).withNamespace("test")
+ .withName(name)
+ .withNamespace("test")
.withLabels(labels)
- .and().withSpec(new ServiceSpec()).build();
+ .endMetadata()
+ .withSpec(new ServiceSpec())
+ .build();
+
svc.getSpec().setClusterIP("127.0.0.1");
svc.getSpec().setPorts(sPorts);
- mockServer.getClient().resource(svc).createOrReplace();
+ client.resource(svc)
+ .inNamespace("test")
+ .createOr(existing ->
client.resource(svc).inNamespace("test").update());
}
@Test
@@ -87,7 +95,7 @@ public class KubernetesServiceEndpointDiscoveryTest {
try {
new URL(endpoint.get().getUrl());
} catch (MalformedURLException e) {
- fail("The generated URL " + endpoint.get().getUrl() + " is
invalid"); //verbose
+ fail("The generated URL " + endpoint.get().getUrl() + " is
invalid");
}
}
@@ -100,7 +108,7 @@ public class KubernetesServiceEndpointDiscoveryTest {
try {
new URL(endpoints.get(0).getUrl());
} catch (MalformedURLException e) {
- fail("The generated URL " + endpoints.get(0).getUrl() + " is
invalid"); //verbose
+ fail("The generated URL " + endpoints.get(0).getUrl() + " is
invalid");
}
}
}
diff --git
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
index f19c12b145..175bffa6b6 100644
---
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
+++
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
@@ -23,34 +23,34 @@ import java.net.URI;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.kie.kogito.addons.k8s.resource.catalog.KubernetesServiceCatalog;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.OpenShiftMockServerTestResource;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.openshift.client.OpenShiftClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
import static org.assertj.core.api.Assertions.assertThat;
-import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KnativeResourceDiscoveryTestUtil.createServiceIfNotExists;
+import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils.createKnativeServiceIfNotExists;
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(OpenShiftMockServerTestResource.class)
class KubeDiscoveryConfigCacheUpdaterTest {
- @KubernetesTestServer
- static KubernetesServer mockServer;
-
- KubeDiscoveryConfigCacheUpdater kubeDiscoveryConfigCacheUpdater;
-
- final String remoteServiceUrl =
"http://serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io";
+ private static final String remoteServiceUrl =
"http://serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io";
@Inject
KubernetesServiceCatalog kubernetesServiceCatalog;
+ @Inject
+ OpenShiftClient client;
+
+ KubeDiscoveryConfigCacheUpdater kubeDiscoveryConfigCacheUpdater;
+
@BeforeEach
void beforeEach() {
- createServiceIfNotExists(mockServer, "knative/quarkus-greeting.yaml",
"test", "serverless-workflow-greeting-quarkus", remoteServiceUrl);
+ createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting.yaml", "test",
"serverless-workflow-greeting-quarkus", remoteServiceUrl);
kubeDiscoveryConfigCacheUpdater = new
KubeDiscoveryConfigCacheUpdater(kubernetesServiceCatalog);
}
diff --git
a/quarkus/addons/kubernetes/runtime/src/test/resources/application.properties
b/quarkus/addons/kubernetes/runtime/src/test/resources/application.properties
index aaca2db7c0..e894d463d1 100644
---
a/quarkus/addons/kubernetes/runtime/src/test/resources/application.properties
+++
b/quarkus/addons/kubernetes/runtime/src/test/resources/application.properties
@@ -18,3 +18,4 @@
#
quarkus.tls.trust-all=true
+quarkus.kubernetes-client.devservices.enabled=false
\ No newline at end of file
diff --git
a/quarkus/addons/fabric8-kubernetes-service-catalog/test-utils/pom.xml
b/quarkus/addons/kubernetes/test-utils/pom.xml
similarity index 77%
rename from quarkus/addons/fabric8-kubernetes-service-catalog/test-utils/pom.xml
rename to quarkus/addons/kubernetes/test-utils/pom.xml
index 86a2acc9ed..1bca46f194 100644
--- a/quarkus/addons/fabric8-kubernetes-service-catalog/test-utils/pom.xml
+++ b/quarkus/addons/kubernetes/test-utils/pom.xml
@@ -25,11 +25,11 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.kie</groupId>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-parent</artifactId>
+ <artifactId>kie-addons-quarkus-kubernetes-parent</artifactId>
<version>999-SNAPSHOT</version>
</parent>
-
<artifactId>kogito-addons-quarkus-fabric8-kubernetes-service-catalog-test-utils</artifactId>
- <name>Kogito Add-On Fabric8 Kubernetes Service Catalog Tests Utils</name>
+ <artifactId>kie-addons-quarkus-kubernetes-test-utils</artifactId>
+ <name>KIE Add-On Kubernetes Tests Utils</name>
<description>Util classes intended to be used in test scope.</description>
<properties>
@@ -41,10 +41,6 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kubernetes-client</artifactId>
</dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-cache</artifactId>
- </dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>knative-client</artifactId>
@@ -53,6 +49,10 @@
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.fabric8</groupId>
+ <artifactId>openshift-server-mock</artifactId>
+ </dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-kubernetes</artifactId>
@@ -61,17 +61,9 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-test-kubernetes-client</artifactId>
</dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-test-openshift-client</artifactId>
- </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
</dependency>
- <dependency>
- <groupId>com.github.tomakehurst</groupId>
- <artifactId>wiremock-jre8</artifactId>
- </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
new file mode 100644
index 0000000000..1926189ab2
--- /dev/null
+++
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.kie.kogito.addons.quarkus.k8s.test.utils;
+
+import java.io.InputStream;
+import java.lang.reflect.Method;
+
+import io.fabric8.knative.client.KnativeClient;
+import io.fabric8.knative.serving.v1.Service;
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.KubernetesClientException;
+import io.fabric8.kubernetes.client.dsl.Resource;
+
+public final class KubeTestUtils {
+
+ private KubeTestUtils() {
+ }
+
+ public static <T extends HasMetadata> T
createWithStatusPreserved(KubernetesClient client, T resource, String
namespace, Class<T> resourceType) {
+ T created = null;
+ try {
+ created =
client.resources(resourceType).inNamespace(namespace).resource(resource).createOr(existing
-> {
+ // Reload latest version to avoid 409 conflict
+ T latest =
client.resources(resourceType).inNamespace(namespace).withName(resource.getMetadata().getName()).get();
+
+ if (latest != null) {
+ // Overwrite with user-defined spec but preserve
server-assigned fields
+
resource.getMetadata().setResourceVersion(latest.getMetadata().getResourceVersion());
+ return
client.resources(resourceType).inNamespace(namespace).resource(resource).update();
+ }
+ return resource; // fallback
+ });
+ } catch (KubernetesClientException e) {
+ throw new RuntimeException("Unable to create or update resource: "
+ resource.getMetadata().getName(), e);
+ }
+
+ Object status = extractStatus(resource);
+ if (status != null) {
+ applyStatus(client, created, namespace, resourceType, status);
+ }
+
+ return created;
+ }
+
+ private static <T extends HasMetadata> void applyStatus(KubernetesClient
client, T resource, String namespace, Class<T> resourceType, Object status) {
+ try {
+ Resource<T> resourceHandle =
client.resources(resourceType).inNamespace(namespace).withName(resource.getMetadata().getName());
+
+ T latest = resourceHandle.get();
+ if (latest != null && status != null) {
+ Method setStatusMethod =
latest.getClass().getMethod("setStatus", status.getClass());
+ setStatusMethod.invoke(latest, status);
+
client.resources(resourceType).inNamespace(namespace).resource(latest).patchStatus();
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to set status on resource", e);
+ }
+ }
+
+ private static <T> Object extractStatus(T resource) {
+ try {
+ return resource.getClass().getMethod("getStatus").invoke(resource);
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to get status from resource",
e);
+ }
+ }
+
+ public static void createKnativeServiceIfNotExists(KubernetesClient
client, String yamlPath, String namespace, String serviceName) {
+ createKnativeServiceIfNotExists(client, yamlPath, namespace,
serviceName, null);
+ }
+
+ public static void createKnativeServiceIfNotExists(KubernetesClient
client, String yamlPath, String namespace, String serviceName, String
remoteServiceUrl) {
+ if
(client.services().inNamespace(namespace).withName(serviceName).get() == null) {
+ KnativeClient knativeClient = client.adapt(KnativeClient.class);
+
+ Service service =
knativeClient.services().inNamespace(namespace).load(getResourceAsStream(yamlPath)).item();
+
+ if (remoteServiceUrl != null) {
+ service.getStatus().setUrl(remoteServiceUrl);
+ }
+
+
knativeClient.services().inNamespace(namespace).resource(service).createOr(existing
-> knativeClient.services().inNamespace(namespace).resource(service).update());
+
+ Object status = extractStatus(service);
+ if (status != null) {
+ try {
+ Service latest =
knativeClient.services().inNamespace(namespace).withName(service.getMetadata().getName()).get();
+
+ if (latest != null && latest.getStatus() == null) {
+ latest.getClass().getMethod("setStatus",
status.getClass()).invoke(latest, status);
+
knativeClient.services().inNamespace(namespace).resource(latest).patchStatus();
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to patch Knative
service status", e);
+ }
+ }
+ }
+ }
+
+ private static InputStream getResourceAsStream(String yamlPath) {
+ return
KubeTestUtils.class.getClassLoader().getResourceAsStream(yamlPath);
+ }
+}
diff --git
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
new file mode 100644
index 0000000000..cc308cffd0
--- /dev/null
+++
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.kie.kogito.addons.quarkus.k8s.test.utils;
+
+import java.util.Map;
+
+import io.fabric8.openshift.client.server.mock.OpenShiftServer;
+import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+
+public class OpenShiftMockServerTestResource implements
QuarkusTestResourceLifecycleManager {
+
+ private OpenShiftServer server;
+
+ @Override
+ public Map<String, String> start() {
+ server = new OpenShiftServer(true, true);
+ server.before(); // Start mock server
+
+ return Map.of(
+ "quarkus.kubernetes-client.master-url",
server.getOpenshiftClient().getMasterUrl().toString(),
+ "quarkus.kubernetes-client.trust-certs", "true");
+ }
+
+ @Override
+ public void stop() {
+ if (server != null) {
+ server.after(); // Stop mock server
+ }
+ }
+
+ public OpenShiftServer getServer() {
+ return server;
+ }
+}
diff --git
a/quarkus/addons/microprofile-config-service-catalog/runtime/src/test/resources/application.properties
b/quarkus/addons/microprofile-config-service-catalog/runtime/src/test/resources/application.properties
index 0f4c3394f4..c6ba0dc979 100644
---
a/quarkus/addons/microprofile-config-service-catalog/runtime/src/test/resources/application.properties
+++
b/quarkus/addons/microprofile-config-service-catalog/runtime/src/test/resources/application.properties
@@ -17,13 +17,13 @@
# under the License.
#
-org.kie.kogito.addons.discovery.knative\:serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.knative\:test\/serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.knative\:services.v1.serving.knative.dev\/serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.knative\:services.v1.serving.knative.dev\/test\/serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.test.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.knative\:serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.knative\:default\/serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.knative\:services.v1.serving.knative.dev\/serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.knative\:services.v1.serving.knative.dev\/default\/serverless-workflow-greeting-quarkus
= http\:\/\/serverless-workflow-greeting-quarkus.default.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.kubernetes\:services.v1.serving.knative.dev\/serverless-workflow-greeting-quarkus-kubernetes
=
http\:\/\/serverless-workflow-greeting-quarkus-kubernetes.test.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.kubernetes\:services.v1.serving.knative.dev\/test\/serverless-workflow-greeting-quarkus-kubernetes
=
http\:\/\/serverless-workflow-greeting-quarkus-kubernetes.test.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.kubernetes\:services.v1.serving.knative.dev\/serverless-workflow-greeting-quarkus-kubernetes
=
http\:\/\/serverless-workflow-greeting-quarkus-kubernetes.default.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.kubernetes\:services.v1.serving.knative.dev\/default\/serverless-workflow-greeting-quarkus-kubernetes
=
http\:\/\/serverless-workflow-greeting-quarkus-kubernetes.default.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.openshift\:services.v1.serving.knative.dev\/serverless-workflow-greeting-quarkus-openshift
=
http\:\/\/serverless-workflow-greeting-quarkus-openshift.test.10.99.154.147.sslip.io
-org.kie.kogito.addons.discovery.openshift\:services.v1.serving.knative.dev\/test\/serverless-workflow-greeting-quarkus-openshift
=
http\:\/\/serverless-workflow-greeting-quarkus-openshift.test.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.openshift\:services.v1.serving.knative.dev\/serverless-workflow-greeting-quarkus-openshift
=
http\:\/\/serverless-workflow-greeting-quarkus-openshift.default.10.99.154.147.sslip.io
+org.kie.kogito.addons.discovery.openshift\:services.v1.serving.knative.dev\/default\/serverless-workflow-greeting-quarkus-openshift
=
http\:\/\/serverless-workflow-greeting-quarkus-openshift.default.10.99.154.147.sslip.io
diff --git a/quarkus/bom/pom.xml b/quarkus/bom/pom.xml
index fe3db0e497..981fa6edc2 100755
--- a/quarkus/bom/pom.xml
+++ b/quarkus/bom/pom.xml
@@ -37,7 +37,8 @@
<description>Internal BOM descriptor for Kogito modules targeting Quarkus
use-cases. Specific dependencies targeting the Quarkus platform must be added
here.</description>
<properties>
-
<version.io.fabric8.kubernetes-client>6.13.3</version.io.fabric8.kubernetes-client>
+ <!-- Keep it aligned with
https://github.com/quarkusio/quarkus/blob/3.15/pom.xml#L72 -->
+
<version.io.fabric8.kubernetes-client>6.13.4</version.io.fabric8.kubernetes-client>
</properties>
<dependencyManagement>
<dependencies>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]