This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 88070370bcff5612cf4357527355d99a6cf65c90 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Wed Mar 5 09:39:54 2025 +0000 Adapt Kubernetes extension tests to updates in Camel 4.10.1 Fixes #7011 Fixes #7042 Fixes #7044 --- .../it/KubernetesConfigMapContextReloadIT.java | 6 +- .../it/KubernetesConfigMapContextReloadTest.java | 14 +- .../kubernetes/it/KubernetesConfigMapTest.java | 42 +++--- .../kubernetes/it/KubernetesDeploymentTest.java | 150 ++++++++++----------- .../kubernetes/it/KubernetesPodsTest.java | 3 - .../it/KubernetesSecretContextReloadIT.java | 2 - .../it/KubernetesSecretContextReloadTest.java | 20 ++- 7 files changed, 121 insertions(+), 116 deletions(-) diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadIT.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadIT.java index 696275675d..21ac551915 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadIT.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadIT.java @@ -16,10 +16,8 @@ */ package org.apache.camel.quarkus.component.kubernetes.it; -import io.quarkus.test.junit.QuarkusTest; -import org.junit.jupiter.api.Disabled; +import io.quarkus.test.junit.QuarkusIntegrationTest; -@Disabled("https://github.com/apache/camel-quarkus/issues/7042") -@QuarkusTest +@QuarkusIntegrationTest class KubernetesConfigMapContextReloadIT extends KubernetesConfigMapContextReloadTest { } diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadTest.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadTest.java index 2843c105a4..54f39c10f5 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadTest.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapContextReloadTest.java @@ -26,12 +26,10 @@ import io.restassured.RestAssured; import io.restassured.http.ContentType; import org.awaitility.Awaitility; import org.eclipse.microprofile.config.ConfigProvider; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.hamcrest.Matchers.is; -@Disabled("https://github.com/apache/camel-quarkus/issues/7042") @TestProfile(KubernetesConfigMapContextReloadTest.KubernetesConfigMapContextReloadTestProfile.class) @QuarkusTest class KubernetesConfigMapContextReloadTest { @@ -60,8 +58,16 @@ class KubernetesConfigMapContextReloadTest { "metadata.namespace", is(namespace), "data.foo", is("bar")); - // Need to delay before updating the secret so that the reload trigger task can capture the event - Thread.sleep(500); + // Need to delay before updating the ConfigMap so that the reload trigger task can capture the event + Awaitility.await().pollDelay(Duration.ofSeconds(1)).pollInterval(Duration.ofMillis(250)) + .atMost(Duration.ofMinutes(1)).untilAsserted(() -> { + RestAssured.given() + .when() + .get("/kubernetes/configmap/" + namespace + "/" + name) + .then() + .statusCode(200) + .body("metadata.name", is(name)); + }); // Update to trigger context reload Map<String, String> updatedData = Map.of("bin", "baz"); diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapTest.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapTest.java index 5976c27ed8..a78466c280 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapTest.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesConfigMapTest.java @@ -28,8 +28,6 @@ import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.kubernetes.client.KubernetesTestServer; import io.restassured.RestAssured; import io.restassured.http.ContentType; -import org.apache.camel.quarkus.test.EnabledIf; -import org.apache.camel.quarkus.test.mock.backend.MockBackendEnabled; import org.awaitility.Awaitility; import org.junit.jupiter.api.Test; @@ -137,7 +135,6 @@ class KubernetesConfigMapTest { } } - @EnabledIf(MockBackendEnabled.class) @Test void configMapEvents() throws Exception { try (CamelKubernetesNamespace namespace = new CamelKubernetesNamespace()) { @@ -172,16 +169,18 @@ class KubernetesConfigMapTest { .then() .statusCode(204); - RestAssured.given() - .contentType(ContentType.JSON) - .body(data) - .when() - .post("/kubernetes/configmap/" + namespace.getNamespace() + "/camel-configmap-watched") - .then() - .statusCode(201) - .body("metadata.name", is("camel-configmap-watched"), - "metadata.namespace", is(namespace.getNamespace()), - "data.some", is("data")); + Awaitility.await().pollInterval(Duration.ofMillis(250)).atMost(Duration.ofMinutes(1)).untilAsserted(() -> { + RestAssured.given() + .contentType(ContentType.JSON) + .body(data) + .when() + .post("/kubernetes/configmap/" + namespace.getNamespace() + "/camel-configmap-watched") + .then() + .statusCode(201) + .body("metadata.name", is("camel-configmap-watched"), + "metadata.namespace", is(namespace.getNamespace()), + "data.some", is("data")); + }); RestAssured.given() .when() @@ -189,13 +188,16 @@ class KubernetesConfigMapTest { .then() .statusCode(204); - RestAssured.given() - .get("/kubernetes/configmap/events") - .then() - .statusCode(200) - .body("metadata.name", is("camel-configmap-watched"), - "metadata.namespace", is(namespace.getNamespace()), - "data.some", is("data")); + Awaitility.await().pollInterval(Duration.ofMillis(250)).atMost(Duration.ofMinutes(1)).untilAsserted(() -> { + RestAssured.given() + .get("/kubernetes/configmap/events") + .then() + .statusCode(200) + .body("metadata.name", is("camel-configmap-watched"), + "metadata.namespace", is(namespace.getNamespace()), + "data.some", is("data")); + + }); } finally { RestAssured.given() .when() diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesDeploymentTest.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesDeploymentTest.java index 635b7aceb6..1c456980d6 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesDeploymentTest.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesDeploymentTest.java @@ -31,8 +31,6 @@ import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.kubernetes.client.KubernetesTestServer; import io.restassured.RestAssured; import io.restassured.http.ContentType; -import org.apache.camel.quarkus.test.EnabledIf; -import org.apache.camel.quarkus.test.mock.backend.MockBackendEnabled; import org.awaitility.Awaitility; import org.junit.jupiter.api.Test; @@ -86,100 +84,97 @@ class KubernetesDeploymentTest { .body("metadata.name", is(name), "metadata.namespace", is(namespace.getNamespace())); - // TODO: Remove the if block when 23b7f03878faf906e81932e2c92fd3dceef666a6 is present in camel - // https://github.com/apache/camel-quarkus/issues/7011 - if (false) { - // Read - Deployment currentDeployment = RestAssured.given() - .when() - .get("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name) - .then() - .statusCode(200) - .body("metadata.name", is(name), - "metadata.namespace", is(namespace.getNamespace())) - .extract() - .as(Deployment.class); + // Read + Deployment currentDeployment = RestAssured.given() + .when() + .get("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name) + .then() + .statusCode(200) + .body("metadata.name", is(name), + "metadata.namespace", is(namespace.getNamespace())) + .extract() + .as(Deployment.class); - // Update - int value = 120; - Deployment updatedDeployment = new DeploymentBuilder(currentDeployment) - .editSpec() - .withMinReadySeconds(value) - .endSpec() - .build(); + // Update + int value = 120; + Deployment updatedDeployment = new DeploymentBuilder(currentDeployment) + .editSpec() + .withMinReadySeconds(value) + .endSpec() + .build(); + RestAssured.given() + .contentType(ContentType.JSON) + .body(updatedDeployment) + .when() + .put("/kubernetes/deployment/" + namespace.getNamespace()) + .then() + .statusCode(200) + .body("spec.minReadySeconds", is(value)); + + Awaitility.await().pollInterval(Duration.ofMillis(250)).atMost(Duration.ofMinutes(1)).untilAsserted(() -> { RestAssured.given() - .contentType(ContentType.JSON) - .body(updatedDeployment) .when() - .put("/kubernetes/deployment/" + namespace.getNamespace()) + .get("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name) .then() .statusCode(200) .body("spec.minReadySeconds", is(value)); + }); - Awaitility.await().pollInterval(Duration.ofMillis(250)).atMost(Duration.ofMinutes(1)).untilAsserted(() -> { - RestAssured.given() - .when() - .get("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name) - .then() - .statusCode(200) - .body("spec.minReadySeconds", is(value)); - }); + if (mockServer != null) { + mockServer.expect() + .get() + .withPath("/apis/apps/v1/namespaces/" + namespace.getNamespace() + "/deployments") + .andReturn(200, new DeploymentListBuilder().addAllToItems(List.of(updatedDeployment)).build()) + .once(); - String listNamespace = mockServer == null ? namespace.getNamespace() : "test"; - if (mockServer != null) { - mockServer.expect() - .get() - .withPath("/apis/apps/v1/namespaces/" + listNamespace + "/deployments") - .andReturn(200, new DeploymentListBuilder().addAllToItems(List.of(updatedDeployment)).build()) - .once(); + mockServer.expect() + .get() + .withPath( + "/apis/apps/v1/namespaces/" + namespace.getNamespace() + "/deployments?labelSelector=app%3D" + + name) + .andReturn(200, new DeploymentListBuilder().addAllToItems(List.of(updatedDeployment)).build()) + .once(); + } - mockServer.expect() - .get() - .withPath("/apis/apps/v1/namespaces/" + listNamespace + "/deployments?labelSelector=app%3D" + name) - .andReturn(200, new DeploymentListBuilder().addAllToItems(List.of(updatedDeployment)).build()) - .once(); - } + // List + RestAssured.given() + .when() + .get("/kubernetes/deployment/" + namespace.getNamespace()) + .then() + .statusCode(200) + .body("[0].metadata.name", is(name), + "[0].metadata.namespace", is(namespace.getNamespace())); - // List - RestAssured.given() - .when() - .get("/kubernetes/deployment/" + listNamespace) - .then() - .statusCode(200) - .body("[0].metadata.name", is(name), - "[0].metadata.namespace", is(namespace.getNamespace())); + // List by labels + RestAssured.given() + .contentType(ContentType.JSON) + .body(Map.of("app", name)) + .when() + .get("/kubernetes/deployment/labels/" + namespace.getNamespace()) + .then() + .statusCode(200) + .body("[0].metadata.name", is(name), + "[0].metadata.namespace", is(namespace.getNamespace())); - // List by labels + // Scale + // Requires a real k8s server, as the scale operation returns deployment.getStatus().getReplicas() that is not available in the mock server + if (mockServer == null) { + int scaleReplicas = 1; RestAssured.given() - .contentType(ContentType.JSON) - .body(Map.of("app", name)) .when() - .get("/kubernetes/deployment/labels/" + listNamespace) + .post("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name + "/" + scaleReplicas) .then() - .statusCode(200) - .body("[0].metadata.name", is(name), - "[0].metadata.namespace", is(namespace.getNamespace())); + .statusCode(201); - // Scale - // Requires a real k8s server, as the scale operation returns deployment.getStatus().getReplicas() that is not available in the mock server - if (mockServer == null) { - int scaleReplicas = 1; + Awaitility.await().pollInterval(Duration.ofMillis(250)).atMost(Duration.ofMinutes(1)).untilAsserted(() -> { RestAssured.given() .when() - .post("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name + "/" + scaleReplicas) + .get("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name) .then() - .statusCode(201); - - Awaitility.await().pollInterval(Duration.ofMillis(250)).atMost(Duration.ofMinutes(1)).untilAsserted(() -> { - RestAssured.given() - .when() - .get("/kubernetes/deployment/" + namespace.getNamespace() + "/" + name) - .then() - .statusCode(200) - .body("spec.replicas", is(scaleReplicas)); - }); - } + .statusCode(200) + .body("spec.replicas", is(scaleReplicas)); + }); } // Delete @@ -202,7 +197,6 @@ class KubernetesDeploymentTest { } } - @EnabledIf(MockBackendEnabled.class) @Test void deploymentEvents() throws Exception { try (CamelKubernetesNamespace namespace = new CamelKubernetesNamespace()) { diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesPodsTest.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesPodsTest.java index e405b5adeb..9bd59e2d7a 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesPodsTest.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesPodsTest.java @@ -31,8 +31,6 @@ import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.kubernetes.client.KubernetesTestServer; import io.restassured.RestAssured; import io.restassured.http.ContentType; -import org.apache.camel.quarkus.test.EnabledIf; -import org.apache.camel.quarkus.test.mock.backend.MockBackendEnabled; import org.awaitility.Awaitility; import org.junit.jupiter.api.Test; @@ -211,7 +209,6 @@ class KubernetesPodsTest { } } - @EnabledIf(MockBackendEnabled.class) @Test void podEvents() throws Exception { try (CamelKubernetesNamespace namespace = new CamelKubernetesNamespace()) { diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadIT.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadIT.java index 4bea227c04..aafb47a1b2 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadIT.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadIT.java @@ -17,9 +17,7 @@ package org.apache.camel.quarkus.component.kubernetes.it; import io.quarkus.test.junit.QuarkusIntegrationTest; -import org.junit.jupiter.api.Disabled; -@Disabled("https://github.com/apache/camel-quarkus/issues/7042") @QuarkusIntegrationTest class KubernetesSecretContextReloadIT extends KubernetesSecretContextReloadTest { } diff --git a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadTest.java b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadTest.java index 38c92983e9..71f062b1a6 100644 --- a/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadTest.java +++ b/integration-tests/kubernetes/src/test/java/org/apache/camel/quarkus/component/kubernetes/it/KubernetesSecretContextReloadTest.java @@ -16,7 +16,9 @@ */ package org.apache.camel.quarkus.component.kubernetes.it; +import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Base64; import java.util.Map; import io.fabric8.kubernetes.api.model.Secret; @@ -28,18 +30,17 @@ import io.restassured.RestAssured; import io.restassured.http.ContentType; import org.awaitility.Awaitility; import org.eclipse.microprofile.config.ConfigProvider; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.hamcrest.Matchers.is; -@Disabled("https://github.com/apache/camel-quarkus/issues/7042") @TestProfile(KubernetesSecretContextReloadTest.KubernetesSecretContextReloadTestProfile.class) @QuarkusTest class KubernetesSecretContextReloadTest { @Test void secretTriggersCamelContextReload() throws Exception { - Map<String, String> data = Map.of("project-name", "Camel"); + Map<String, String> data = Map.of("project-name", + Base64.getEncoder().encodeToString("Camel".getBytes(StandardCharsets.UTF_8))); String name = ConfigProvider.getConfig().getValue("camel.vault.kubernetes.secrets", String.class); Secret secret = new SecretBuilder() @@ -72,10 +73,19 @@ class KubernetesSecretContextReloadTest { "data.project-name", is(data.get("project-name"))); // Need to delay before updating the secret so that the reload trigger task can capture the event - Thread.sleep(500); + Awaitility.await().pollDelay(Duration.ofSeconds(1)).pollInterval(Duration.ofMillis(250)) + .atMost(Duration.ofMinutes(1)).untilAsserted(() -> { + RestAssured.given() + .when() + .get("/kubernetes/secret/" + namespace + "/" + name) + .then() + .statusCode(200) + .body("metadata.name", is(name)); + }); // Update to trigger context reload - Map<String, String> newData = Map.of("project-name", "Apache Camel Quarkus"); + Map<String, String> newData = Map.of("project-name", + Base64.getEncoder().encodeToString("Apache Camel Quarkus".getBytes(StandardCharsets.UTF_8))); secret.setData(newData); RestAssured.given() .contentType(ContentType.JSON)