From 6d507424b0e656bbf3203bcfb8407abc31f184fc Mon Sep 17 00:00:00 2001 From: wind57 Date: Fri, 28 Mar 2025 14:56:12 +0200 Subject: [PATCH 01/10] first Signed-off-by: wind57 --- .../watcher/ActuatorRefreshIT.java | 4 +- .../ActuatorRefreshMultipleNamespacesIT.java | 4 +- .../it/DiscoveryServerClientBase.java | 4 +- .../it/DiscoveryServerClientIT.java | 8 +- .../KubernetesClientDiscoverySimpleIT.java | 4 +- .../apps/ConfigurationWatcherBusKafkaIT.java | 12 +- .../src/test/resources/app/app-service.yaml | 3 +- .../src/test/resources/ingress/ingress.yaml | 16 -- .../apps/ConfigurationWatcherBusAmqpIT.java | 11 +- .../config-watcher/watcher-service.yaml | 3 +- .../src/test/resources/ingress/ingress.yaml | 16 -- .../client/reload/it/K8sClientReloadBase.java | 8 +- .../tests/commons/native_client/Util.java | 140 ++---------------- .../resources/wiremock/wiremock-ingress.yaml | 17 --- 14 files changed, 42 insertions(+), 208 deletions(-) delete mode 100644 spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml delete mode 100644 spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/ingress/ingress.yaml delete mode 100644 spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-ingress.yaml diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java index da62ad2a..fa3660fd 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java @@ -114,10 +114,10 @@ class ActuatorRefreshIT { deployment.getSpec().getTemplate().getSpec().getContainers().get(0).setEnv(envVars); if (phase.equals(Phase.CREATE)) { - util.createAndWait(NAMESPACE, null, deployment, service, null, true); + util.createAndWait(NAMESPACE, null, deployment, service, true); } else { - util.deleteAndWait(NAMESPACE, deployment, service, null); + util.deleteAndWait(NAMESPACE, deployment, service); } } diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java index b74dbc03..df642892 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java @@ -128,10 +128,10 @@ class ActuatorRefreshMultipleNamespacesIT { .yaml("config-watcher/spring-cloud-kubernetes-configuration-watcher-service.yaml"); if (phase.equals(Phase.CREATE)) { - util.createAndWait(DEFAULT_NAMESPACE, null, deployment, service, null, true); + util.createAndWait(DEFAULT_NAMESPACE, null, deployment, service, true); } else { - util.deleteAndWait(DEFAULT_NAMESPACE, deployment, service, null); + util.deleteAndWait(DEFAULT_NAMESPACE, deployment, service); } } diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientBase.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientBase.java index 5506d4b3..cbbf11ea 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientBase.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientBase.java @@ -93,10 +93,10 @@ abstract class DiscoveryServerClientBase { V1Service service = (V1Service) util.yaml("manifests/discoveryserver-service.yaml"); if (phase.equals(Phase.CREATE)) { - util.createAndWait(NAMESPACE, null, deployment, service, null, true); + util.createAndWait(NAMESPACE, null, deployment, service, true); } else { - util.deleteAndWait(NAMESPACE, deployment, service, null); + util.deleteAndWait(NAMESPACE, deployment, service); } } diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java index ab3de7a6..42818b30 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java @@ -78,8 +78,8 @@ class DiscoveryServerClientIT extends DiscoveryServerClientBase { discoveryServer(Phase.CREATE); Images.loadWiremock(K3S); - util.wiremock(NAMESPACE_LEFT, "/wiremock-" + NAMESPACE_LEFT, Phase.CREATE, false); - util.wiremock(NAMESPACE_RIGHT, "/wiremock-" + NAMESPACE_RIGHT, Phase.CREATE, false); + util.wiremock(NAMESPACE_LEFT, Phase.CREATE); + util.wiremock(NAMESPACE_RIGHT, Phase.CREATE); } @AfterAll @@ -87,8 +87,8 @@ class DiscoveryServerClientIT extends DiscoveryServerClientBase { serviceAccount(Phase.DELETE); discoveryServer(Phase.DELETE); - util.wiremock(NAMESPACE_LEFT, "/wiremock-" + NAMESPACE_LEFT, Phase.DELETE, false); - util.wiremock(NAMESPACE_RIGHT, "/wiremock-" + NAMESPACE_RIGHT, Phase.DELETE, false); + util.wiremock(NAMESPACE_LEFT, Phase.DELETE); + util.wiremock(NAMESPACE_RIGHT, Phase.DELETE); util.deleteNamespace(NAMESPACE_LEFT); util.deleteNamespace(NAMESPACE_RIGHT); diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoverySimpleIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoverySimpleIT.java index e00c3b01..472fcd6b 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoverySimpleIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoverySimpleIT.java @@ -64,13 +64,13 @@ class KubernetesClientDiscoverySimpleIT extends KubernetesClientDiscoveryBase { util.busybox(NAMESPACE, Phase.CREATE); externalNameService = (V1Service) util.yaml("external-name-service.yaml"); - util.createAndWait(NAMESPACE, null, null, externalNameService, null, true); + util.createAndWait(NAMESPACE, null, null, externalNameService, true); } @AfterEach void afterEach() { util.busybox(NAMESPACE, Phase.DELETE); - util.deleteAndWait(NAMESPACE, null, externalNameService, null); + util.deleteAndWait(NAMESPACE, null, externalNameService); } @Test diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusKafkaIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusKafkaIT.java index 7361bf5a..72a09967 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusKafkaIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusKafkaIT.java @@ -22,7 +22,6 @@ import java.util.Objects; import io.kubernetes.client.openapi.models.V1ConfigMap; import io.kubernetes.client.openapi.models.V1ConfigMapBuilder; import io.kubernetes.client.openapi.models.V1Deployment; -import io.kubernetes.client.openapi.models.V1Ingress; import io.kubernetes.client.openapi.models.V1Service; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; @@ -153,7 +152,7 @@ class ConfigurationWatcherBusKafkaIT { util.createAndWait(NAMESPACE, configMap, null); WebClient.Builder builder = builder(); - WebClient serviceClient = builder.baseUrl("http://localhost:80/app").build(); + WebClient serviceClient = builder.baseUrl("http://localhost:32321/app").build(); Boolean[] value = new Boolean[1]; await().pollInterval(Duration.ofSeconds(3)).atMost(Duration.ofSeconds(240)).until(() -> { @@ -173,13 +172,12 @@ class ConfigurationWatcherBusKafkaIT { private void app(Phase phase) { V1Deployment deployment = (V1Deployment) util.yaml("app/app-deployment.yaml"); V1Service service = (V1Service) util.yaml("app/app-service.yaml"); - V1Ingress ingress = (V1Ingress) util.yaml("ingress/ingress.yaml"); if (phase.equals(Phase.CREATE)) { - util.createAndWait(NAMESPACE, null, deployment, service, ingress, true); + util.createAndWait(NAMESPACE, null, deployment, service, true); } else if (phase.equals(Phase.DELETE)) { - util.deleteAndWait(NAMESPACE, deployment, service, ingress); + util.deleteAndWait(NAMESPACE, deployment, service); } } @@ -188,10 +186,10 @@ class ConfigurationWatcherBusKafkaIT { V1Service service = (V1Service) util.yaml("config-watcher/watcher-kus-kafka-service.yaml"); if (phase.equals(Phase.CREATE)) { - util.createAndWait(NAMESPACE, null, deployment, service, null, true); + util.createAndWait(NAMESPACE, null, deployment, service, true); } else if (phase.equals(Phase.DELETE)) { - util.deleteAndWait(NAMESPACE, deployment, service, null); + util.deleteAndWait(NAMESPACE, deployment, service); } } diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml index f9cb695f..3be7e66c 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/app/app-service.yaml @@ -9,6 +9,7 @@ spec: - name: http port: 8081 targetPort: 8081 + nodePort: 32321 selector: app: app - type: ClusterIP + type: NodePort diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml deleted file mode 100644 index faa02ba6..00000000 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/ingress/ingress.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: it-ingress-app - namespace: default -spec: - rules: - - http: - paths: - - path: /app - pathType: Prefix - backend: - service: - name: app - port: - number: 8081 diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java index 2d9a764f..041bcf56 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java @@ -103,7 +103,7 @@ class ConfigurationWatcherBusAmqpIT { util.createAndWait(NAMESPACE, null, secret); WebClient.Builder builder = builder(); - WebClient serviceClient = builder.baseUrl("http://localhost:80/app").build(); + WebClient serviceClient = builder.baseUrl("http://localhost:32321/app").build(); Boolean[] value = new Boolean[1]; await().pollInterval(Duration.ofSeconds(3)).atMost(Duration.ofSeconds(240)).until(() -> { @@ -122,13 +122,12 @@ class ConfigurationWatcherBusAmqpIT { private void appA(Phase phase) { V1Deployment deployment = (V1Deployment) util.yaml("app/app-deployment.yaml"); V1Service service = (V1Service) util.yaml("app/app-service.yaml"); - V1Ingress ingress = (V1Ingress) util.yaml("ingress/ingress.yaml"); if (phase.equals(Phase.CREATE)) { - util.createAndWait(NAMESPACE, null, deployment, service, ingress, true); + util.createAndWait(NAMESPACE, null, deployment, service, true); } else if (phase.equals(Phase.DELETE)) { - util.deleteAndWait(NAMESPACE, deployment, service, ingress); + util.deleteAndWait(NAMESPACE, deployment, service); } } @@ -137,10 +136,10 @@ class ConfigurationWatcherBusAmqpIT { V1Service service = (V1Service) util.yaml("config-watcher/watcher-service.yaml"); if (phase.equals(Phase.CREATE)) { - util.createAndWait(NAMESPACE, null, deployment, service, null, true); + util.createAndWait(NAMESPACE, null, deployment, service, true); } else if (phase.equals(Phase.DELETE)) { - util.deleteAndWait(NAMESPACE, deployment, service, null); + util.deleteAndWait(NAMESPACE, deployment, service); } } diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml index 3ab3a8ec..8428eede 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml @@ -9,6 +9,7 @@ spec: - name: http port: 8888 targetPort: 8888 + nodePort: 32321 selector: app: configuration-watcher - type: ClusterIP + type: NodePort diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/ingress/ingress.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/ingress/ingress.yaml deleted file mode 100644 index 46ea6693..00000000 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/ingress/ingress.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: it-ingress - namespace: default -spec: - rules: - - http: - paths: - - path: /app - pathType: Prefix - backend: - service: - name: app - port: - number: 8080 diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientReloadBase.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientReloadBase.java index cc91acce..6cbcefbf 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientReloadBase.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientReloadBase.java @@ -105,11 +105,11 @@ abstract class K8sClientReloadBase { if (phase.equals(Phase.CREATE)) { util.createAndWait(namespace, configMap, null); - util.createAndWait(namespace, imageName, deployment, service, null, true); + util.createAndWait(namespace, imageName, deployment, service, true); } else { util.deleteAndWait(namespace, configMap, null); - util.deleteAndWait(namespace, deployment, service, null); + util.deleteAndWait(namespace, deployment, service); } } @@ -122,11 +122,11 @@ abstract class K8sClientReloadBase { if (phase.equals(Phase.CREATE)) { util.createAndWait(namespace, null, secret); - util.createAndWait(namespace, imageName, deployment, service, null, true); + util.createAndWait(namespace, imageName, deployment, service, true); } else { util.deleteAndWait(namespace, null, secret); - util.deleteAndWait(namespace, deployment, service, null); + util.deleteAndWait(namespace, deployment, service); } } diff --git a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java index 7d3607b2..9ef42492 100644 --- a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java +++ b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java @@ -35,7 +35,6 @@ import io.kubernetes.client.openapi.Configuration; import io.kubernetes.client.openapi.apis.ApiregistrationV1Api; import io.kubernetes.client.openapi.apis.AppsV1Api; import io.kubernetes.client.openapi.apis.CoreV1Api; -import io.kubernetes.client.openapi.apis.NetworkingV1Api; import io.kubernetes.client.openapi.apis.RbacAuthorizationV1Api; import io.kubernetes.client.openapi.models.V1APIService; import io.kubernetes.client.openapi.models.V1ClusterRole; @@ -43,9 +42,6 @@ import io.kubernetes.client.openapi.models.V1ConfigMap; import io.kubernetes.client.openapi.models.V1Deployment; import io.kubernetes.client.openapi.models.V1DeploymentCondition; import io.kubernetes.client.openapi.models.V1DeploymentList; -import io.kubernetes.client.openapi.models.V1Ingress; -import io.kubernetes.client.openapi.models.V1IngressLoadBalancerIngress; -import io.kubernetes.client.openapi.models.V1IngressLoadBalancerStatus; import io.kubernetes.client.openapi.models.V1NamespaceBuilder; import io.kubernetes.client.openapi.models.V1Role; import io.kubernetes.client.openapi.models.V1RoleBinding; @@ -79,8 +75,6 @@ public final class Util { private final AppsV1Api appsV1Api; - private final NetworkingV1Api networkingV1Api; - private final RbacAuthorizationV1Api rbacApi; private final K3sContainer container; @@ -101,7 +95,6 @@ public final class Util { this.container = container; this.coreV1Api = new CoreV1Api(); this.appsV1Api = new AppsV1Api(); - this.networkingV1Api = new NetworkingV1Api(); rbacApi = new RbacAuthorizationV1Api(); } @@ -113,7 +106,7 @@ public final class Util { * */ public void createAndWait(String namespace, String name, V1Deployment deployment, V1Service service, - @Nullable V1Ingress ingress, boolean changeVersion) { + boolean changeVersion) { try { coreV1Api.createNamespacedService(namespace, service, null, null, null, null); @@ -143,10 +136,6 @@ public final class Util { waitForDeployment(namespace, deployment); } - if (ingress != null) { - networkingV1Api.createNamespacedIngress(namespace, ingress, null, null, null, null); - waitForIngress(namespace, ingress); - } } catch (Exception e) { if (e instanceof ApiException apiException) { @@ -204,8 +193,7 @@ public final class Util { } } - public void deleteAndWait(String namespace, V1Deployment deployment, V1Service service, - @Nullable V1Ingress ingress) { + public void deleteAndWait(String namespace, V1Deployment deployment, V1Service service) { if (deployment != null) { try { @@ -226,20 +214,6 @@ public final class Util { } } - - String serviceName = serviceName(service); - try { - coreV1Api.deleteNamespacedService(serviceName, namespace, null, null, null, null, null, null); - if (ingress != null) { - String ingressName = ingressName(ingress); - networkingV1Api.deleteNamespacedIngress(ingressName, namespace, null, null, null, null, null, null); - waitForIngressToBeDeleted(ingressName, namespace); - } - - } - catch (ApiException e) { - throw new RuntimeException(e); - } } public void busybox(String namespace, Phase phase) { @@ -251,10 +225,10 @@ public final class Util { V1Service service = (V1Service) yaml("busybox/service.yaml"); if (phase.equals(Phase.CREATE)) { - createAndWait(namespace, "busybox", deployment, service, null, false); + createAndWait(namespace, "busybox", deployment, service, false); } else if (phase.equals(Phase.DELETE)) { - deleteAndWait(namespace, deployment, service, null); + deleteAndWait(namespace, deployment, service); } } @@ -268,10 +242,10 @@ public final class Util { V1Service service = (V1Service) yaml("kafka/kafka-service.yaml"); if (phase.equals(Phase.CREATE)) { - createAndWait(namespace, "kafka", deployment, service, null, false); + createAndWait(namespace, "kafka", deployment, service, false); } else if (phase.equals(Phase.DELETE)) { - deleteAndWait(namespace, deployment, service, null); + deleteAndWait(namespace, deployment, service); } } @@ -285,10 +259,10 @@ public final class Util { V1Service service = (V1Service) yaml("rabbitmq/rabbitmq-service.yaml"); if (phase.equals(Phase.CREATE)) { - createAndWait(namespace, "rabbitmq", deployment, service, null, false); + createAndWait(namespace, "rabbitmq", deployment, service, false); } else if (phase.equals(Phase.DELETE)) { - deleteAndWait(namespace, deployment, service, null); + deleteAndWait(namespace, deployment, service); } } @@ -436,10 +410,10 @@ public final class Util { } public void wiremock(String namespace, String path, Phase phase) { - wiremock(namespace, path, phase, true); + wiremock(namespace, phase); } - public void wiremock(String namespace, String path, Phase phase, boolean withIngress) { + public void wiremock(String namespace, Phase phase) { V1Deployment deployment = (V1Deployment) yaml("wiremock/wiremock-deployment.yaml"); String imageWithoutVersion = deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getImage(); @@ -448,25 +422,13 @@ public final class Util { V1Service service = (V1Service) yaml("wiremock/wiremock-service.yaml"); - V1Ingress ingress = null; - if (phase.equals(Phase.CREATE)) { - - if (withIngress) { - ingress = (V1Ingress) yaml("wiremock/wiremock-ingress.yaml"); - ingress.getMetadata().setNamespace(namespace); - ingress.getSpec().getRules().get(0).getHttp().getPaths().get(0).setPath(path); - } - deployment.getMetadata().setNamespace(namespace); service.getMetadata().setNamespace(namespace); - createAndWait(namespace, "wiremock", deployment, service, ingress, false); + createAndWait(namespace, "wiremock", deployment, service, false); } else { - if (withIngress) { - ingress = (V1Ingress) yaml("wiremock/wiremock-ingress.yaml"); - } - deleteAndWait(namespace, deployment, service, ingress); + deleteAndWait(namespace, deployment, service); } } @@ -475,14 +437,6 @@ public final class Util { return deployment.getMetadata().getName(); } - private String serviceName(V1Service service) { - return service.getMetadata().getName(); - } - - private String ingressName(V1Ingress ingress) { - return ingress.getMetadata().getName(); - } - private String configMapName(V1ConfigMap configMap) { return configMap.getMetadata().getName(); } @@ -532,43 +486,6 @@ public final class Util { }); } - private void waitForIngress(String namespace, V1Ingress ingress) { - String ingressName = ingressName(ingress); - await().timeout(Duration.ofSeconds(90)).pollInterval(Duration.ofSeconds(3)).until(() -> { - try { - V1IngressLoadBalancerStatus status = networkingV1Api.readNamespacedIngress(ingressName, namespace, null) - .getStatus() - .getLoadBalancer(); - - if (status == null) { - LOG.info("ingress : " + ingressName + " not ready yet (loadbalancer not yet present)"); - return false; - } - - List loadBalancerIngress = status.getIngress(); - if (loadBalancerIngress == null) { - LOG.info("ingress : " + ingressName + " not ready yet (loadbalancer ingress not yet present)"); - return false; - } - - String ip = loadBalancerIngress.get(0).getIp(); - if (ip == null) { - LOG.info("ingress : " + ingressName + " not ready yet"); - return false; - } - - LOG.info("ingress : " + ingressName + " ready with ip : " + ip); - return true; - } - catch (ApiException e) { - if (e.getCode() == HttpURLConnection.HTTP_NOT_FOUND) { - return false; - } - throw new RuntimeException(e); - } - }); - } - private void waitForDeploymentToBeDeleted(String deploymentName, String namespace) { await().timeout(Duration.ofSeconds(180)).until(() -> { try { @@ -603,21 +520,6 @@ public final class Util { }); } - private void waitForIngressToBeDeleted(String ingressName, String namespace) { - await().timeout(Duration.ofSeconds(90)).until(() -> { - try { - networkingV1Api.readNamespacedIngress(ingressName, namespace, null); - return false; - } - catch (ApiException e) { - if (e.getCode() == HttpURLConnection.HTTP_NOT_FOUND) { - return true; - } - throw new RuntimeException(e); - } - }); - } - private boolean isDeploymentReady(String deploymentName, String namespace) throws ApiException { V1DeploymentList deployments = appsV1Api.listNamespacedDeployment(namespace, null, null, null, "metadata.name=" + deploymentName, null, null, null, null, null, null, null); @@ -648,24 +550,6 @@ public final class Util { } } - private static void waitForDeploymentAfterPatch(String deploymentName, String namespace, - Map podLabels) { - try { - await().pollDelay(Duration.ofSeconds(4)) - .pollInterval(Duration.ofSeconds(3)) - .atMost(60, TimeUnit.SECONDS) - .until(() -> isDeploymentReadyAfterPatch(deploymentName, namespace, podLabels)); - } - catch (Exception e) { - if (e instanceof ApiException apiException) { - LOG.error("Error: "); - LOG.error(apiException.getResponseBody()); - } - throw new RuntimeException(e); - } - - } - private static boolean isDeploymentReadyAfterPatch(String deploymentName, String namespace, Map podLabels) throws ApiException { diff --git a/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-ingress.yaml b/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-ingress.yaml deleted file mode 100644 index 18d50519..00000000 --- a/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-ingress.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: wiremock-ingress - namespace: default -spec: - rules: - - http: - paths: - - path: /wiremock/ - pathType: Prefix - backend: - service: - name: service-wiremock - port: - number: 8080 - From 8ce9256e37303434624e42e9a4cfb0012ec76238 Mon Sep 17 00:00:00 2001 From: wind57 Date: Fri, 28 Mar 2025 15:00:38 +0200 Subject: [PATCH 02/10] checkstyle Signed-off-by: wind57 --- .../watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java index 041bcf56..3a5da266 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/multiple/apps/ConfigurationWatcherBusAmqpIT.java @@ -20,7 +20,6 @@ import java.time.Duration; import java.util.Objects; import io.kubernetes.client.openapi.models.V1Deployment; -import io.kubernetes.client.openapi.models.V1Ingress; import io.kubernetes.client.openapi.models.V1Secret; import io.kubernetes.client.openapi.models.V1SecretBuilder; import io.kubernetes.client.openapi.models.V1Service; From e0a5629cb2ea4173076e0f5009cb3bb0cb08546d Mon Sep 17 00:00:00 2001 From: wind57 Date: Fri, 28 Mar 2025 17:02:24 +0200 Subject: [PATCH 03/10] fix test Signed-off-by: wind57 --- .../kubernetes/configuration/watcher/ActuatorRefreshIT.java | 6 ++---- .../watcher/ActuatorRefreshMultipleNamespacesIT.java | 4 ++-- .../cloud/kubernetes/configuration/watcher/TestUtil.java | 4 ++-- .../integration/tests/commons/native_client/Util.java | 4 ---- .../src/main/resources/wiremock/wiremock-service.yaml | 3 ++- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java index fa3660fd..000c9ba8 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java @@ -44,8 +44,6 @@ import static org.springframework.cloud.kubernetes.configuration.watcher.TestUti */ class ActuatorRefreshIT { - private static final String WIREMOCK_PATH = "/"; - private static final String NAMESPACE = "default"; private static final K3sContainer K3S = Commons.container(); @@ -72,12 +70,12 @@ class ActuatorRefreshIT { @BeforeEach void setup() { - util.wiremock(NAMESPACE, WIREMOCK_PATH, Phase.CREATE); + util.wiremock(NAMESPACE, Phase.CREATE); } @AfterEach void after() { - util.wiremock(NAMESPACE, WIREMOCK_PATH, Phase.DELETE); + util.wiremock(NAMESPACE, Phase.DELETE); } /* diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java index df642892..266aa3aa 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java @@ -60,7 +60,7 @@ class ActuatorRefreshMultipleNamespacesIT { util = new Util(K3S); util.createNamespace(LEFT_NAMESPACE); util.createNamespace(RIGHT_NAMESPACE); - util.wiremock(DEFAULT_NAMESPACE, "/", Phase.CREATE); + util.wiremock(DEFAULT_NAMESPACE, Phase.CREATE); util.setUpClusterWide(DEFAULT_NAMESPACE, Set.of(DEFAULT_NAMESPACE, LEFT_NAMESPACE, RIGHT_NAMESPACE)); configWatcher(Phase.CREATE); } @@ -68,7 +68,7 @@ class ActuatorRefreshMultipleNamespacesIT { @AfterAll static void afterAll() { configWatcher(Phase.DELETE); - util.wiremock(DEFAULT_NAMESPACE, "/", Phase.DELETE); + util.wiremock(DEFAULT_NAMESPACE, Phase.DELETE); util.deleteClusterWide(DEFAULT_NAMESPACE, Set.of(DEFAULT_NAMESPACE, LEFT_NAMESPACE, RIGHT_NAMESPACE)); util.deleteNamespace(LEFT_NAMESPACE); util.deleteNamespace(RIGHT_NAMESPACE); diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/TestUtil.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/TestUtil.java index 1eb5ad82..7a3a995b 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/TestUtil.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/TestUtil.java @@ -46,7 +46,7 @@ final class TestUtil { private static final String WIREMOCK_HOST = "localhost"; - private static final int WIREMOCK_PORT = 80; + private static final int WIREMOCK_PORT = 32321; static final String SPRING_CLOUD_K8S_CONFIG_WATCHER_APP_NAME = "spring-cloud-kubernetes-configuration-watcher"; @@ -60,7 +60,7 @@ final class TestUtil { // is ready to take a request via 'Wiremock::stubFor' (because sometimes it fails) // As such, get the existing mappings and retrySpec() makes sure we retry until // we get a response back. - WebClient client = builder().baseUrl("http://localhost:80/__admin/mappings").build(); + WebClient client = builder().baseUrl("http://localhost:32321/__admin/mappings").build(); client.method(HttpMethod.GET).retrieve().bodyToMono(String.class).retryWhen(retrySpec()).block(); StubMapping stubMapping = WireMock.stubFor(WireMock.post(WireMock.urlEqualTo("/actuator/refresh")) diff --git a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java index 9ef42492..86c8b24f 100644 --- a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java +++ b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java @@ -409,10 +409,6 @@ public final class Util { .noneMatch(x -> x.getMetadata().getName().equals(name))); } - public void wiremock(String namespace, String path, Phase phase) { - wiremock(namespace, phase); - } - public void wiremock(String namespace, Phase phase) { V1Deployment deployment = (V1Deployment) yaml("wiremock/wiremock-deployment.yaml"); diff --git a/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-service.yaml b/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-service.yaml index af4d4e00..57b31e31 100644 --- a/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-service.yaml +++ b/spring-cloud-kubernetes-test-support/src/main/resources/wiremock/wiremock-service.yaml @@ -9,6 +9,7 @@ spec: - name: http port: 8080 targetPort: 8080 + nodePort: 32321 selector: app: service-wiremock - type: ClusterIP + type: NodePort From 629ceaa9ac1f980dcadc1c3aa4cac71493778c1e Mon Sep 17 00:00:00 2001 From: wind57 Date: Fri, 28 Mar 2025 17:42:39 +0200 Subject: [PATCH 04/10] fix compilation Signed-off-by: wind57 --- .../k8s/client/discovery/KubernetesClientReactiveIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java index 2f00f4f1..c24af79b 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java @@ -60,12 +60,12 @@ class KubernetesClientReactiveIT extends KubernetesClientDiscoveryBase { @BeforeEach void beforeEach() { Images.loadWiremock(K3S); - util.wiremock(NAMESPACE, "/", Phase.CREATE); + util.wiremock(NAMESPACE, Phase.CREATE); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE, "/", Phase.DELETE); + util.wiremock(NAMESPACE, Phase.DELETE); } /** From 63f119cd26599b5f1c3d94869c6a44a711dfebc0 Mon Sep 17 00:00:00 2001 From: wind57 Date: Fri, 28 Mar 2025 18:27:29 +0200 Subject: [PATCH 05/10] fix compilation Signed-off-by: wind57 --- .../k8s/client/discovery/KubernetesClientBlockingIT.java | 4 ++-- .../discovery/KubernetesClientDiscoveryFilterIT.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java index 7ff34634..6d75d346 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java @@ -60,12 +60,12 @@ class KubernetesClientBlockingIT extends KubernetesClientDiscoveryBase { @BeforeEach void beforeEach() { Images.loadWiremock(K3S); - util.wiremock(NAMESPACE, "/", Phase.CREATE); + util.wiremock(NAMESPACE, Phase.CREATE); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE, "/", Phase.DELETE); + util.wiremock(NAMESPACE, Phase.DELETE); } /** diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java index 189dd3d7..2cfb3a40 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java @@ -63,14 +63,14 @@ class KubernetesClientDiscoveryFilterIT extends KubernetesClientDiscoveryBase { util.createNamespace(NAMESPACE_B_UAT); Images.loadWiremock(K3S); - util.wiremock(NAMESPACE_A_UAT, "/", Phase.CREATE); - util.wiremock(NAMESPACE_B_UAT, "/", Phase.CREATE); + util.wiremock(NAMESPACE_A_UAT, Phase.CREATE); + util.wiremock(NAMESPACE_B_UAT, Phase.CREATE); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE_A_UAT, "/", Phase.DELETE); - util.wiremock(NAMESPACE_B_UAT, "/", Phase.DELETE); + util.wiremock(NAMESPACE_A_UAT, Phase.DELETE); + util.wiremock(NAMESPACE_B_UAT, Phase.DELETE); util.deleteNamespace(NAMESPACE_A_UAT); util.deleteNamespace(NAMESPACE_B_UAT); From 05859a328b4ab4c6d099ba79adff94b10e2e5cbe Mon Sep 17 00:00:00 2001 From: wind57 Date: Sun, 30 Mar 2025 17:43:20 +0300 Subject: [PATCH 06/10] fix tests Signed-off-by: wind57 --- .../cloud/kubernetes/k8s/client/discovery/TestAssertions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java index 8c0a8c62..f00bf32a 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java @@ -133,7 +133,7 @@ final class TestAssertions { assertThat(wiremockInstance.getServiceId()).isEqualTo("service-wiremock"); assertThat(wiremockInstance.getInstanceId()).isNotNull(); assertThat(wiremockInstance.getHost()).isNotNull(); - assertThat(wiremockInstance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "default", "type", "ClusterIP", + assertThat(wiremockInstance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "default", "type", "NodePort", "port.http", "8080", "app", "service-wiremock")); } @@ -147,7 +147,7 @@ final class TestAssertions { assertThat(wiremockInstance.getServiceId()).isEqualTo("service-wiremock"); assertThat(wiremockInstance.getInstanceId()).isNotNull(); assertThat(wiremockInstance.getHost()).isNotNull(); - assertThat(wiremockInstance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "default", "type", "ClusterIP", + assertThat(wiremockInstance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "default", "type", "NodePort", "port.http", "8080", "app", "service-wiremock")); } From 8bfbfa7dbe52e6885d07a226da0b6bba36bb328f Mon Sep 17 00:00:00 2001 From: wind57 Date: Sun, 30 Mar 2025 18:26:48 +0300 Subject: [PATCH 07/10] fix tests Signed-off-by: wind57 --- .../client/discovery/Fabric8DiscoveryFilterIT.java | 8 ++++---- .../tests/commons/fabric8_client/Util.java | 12 +++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryFilterIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryFilterIT.java index dfbe1ad2..2bdf0a24 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryFilterIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryFilterIT.java @@ -51,16 +51,16 @@ class Fabric8DiscoveryFilterIT extends Fabric8DiscoveryBase { util.createNamespace(NAMESPACE_A_UAT); util.createNamespace(NAMESPACE_B_UAT); - util.wiremock(NAMESPACE_A_UAT, Phase.CREATE); - util.wiremock(NAMESPACE_B_UAT, Phase.CREATE); + util.wiremock(NAMESPACE_A_UAT, Phase.CREATE, false); + util.wiremock(NAMESPACE_B_UAT, Phase.CREATE, false); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE_A_UAT, Phase.DELETE); - util.wiremock(NAMESPACE_B_UAT, Phase.DELETE); + util.wiremock(NAMESPACE_A_UAT, Phase.DELETE, false); + util.wiremock(NAMESPACE_B_UAT, Phase.DELETE, false); util.deleteNamespace(NAMESPACE_A_UAT); util.deleteNamespace(NAMESPACE_B_UAT); diff --git a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/fabric8_client/Util.java b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/fabric8_client/Util.java index e47f04c6..d8e0a81f 100644 --- a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/fabric8_client/Util.java +++ b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/fabric8_client/Util.java @@ -295,7 +295,12 @@ public final class Util { }); } - public void wiremock(String namespace, Phase phase) { + /** + * 'withNodePort' specifies if we add the NodePort or not. It is needed because we + * sometimes deploy two instances of wiremock, and they can't have the same NodePort + * exposed + */ + public void wiremock(String namespace, Phase phase, boolean withNodePort) { InputStream deploymentStream = inputStream("wiremock/wiremock-deployment.yaml"); InputStream serviceStream = inputStream("wiremock/wiremock-service.yaml"); @@ -305,6 +310,11 @@ public final class Util { deployment.getSpec().getTemplate().getSpec().getContainers().get(0).setImage(imageWithVersion); Service service = client.services().load(serviceStream).item(); + if (!withNodePort) { + // we assume we only have one 'http' port + service.getSpec().getPorts().get(0).setNodePort(null); + service.getSpec().setType("ClusterIP"); + } if (phase.equals(Phase.CREATE)) { deployment.getMetadata().setNamespace(namespace); From a0d2ab4ed9b52d1258ae77976a02e5d6ace0b961 Mon Sep 17 00:00:00 2001 From: wind57 Date: Sun, 30 Mar 2025 19:14:46 +0300 Subject: [PATCH 08/10] fix tests Signed-off-by: wind57 --- .../configuration/watcher/ActuatorRefreshIT.java | 4 ++-- .../watcher/ActuatorRefreshMultipleNamespacesIT.java | 4 ++-- .../discoveryclient/it/DiscoveryServerClientIT.java | 8 ++++---- .../client/discovery/KubernetesClientBlockingIT.java | 4 ++-- .../discovery/KubernetesClientDiscoveryFilterIT.java | 8 ++++---- .../k8s/client/discovery/TestAssertions.java | 8 ++++---- .../tests/commons/native_client/Util.java | 12 +++++++++++- 7 files changed, 29 insertions(+), 19 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java index 000c9ba8..83c825dd 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java @@ -70,12 +70,12 @@ class ActuatorRefreshIT { @BeforeEach void setup() { - util.wiremock(NAMESPACE, Phase.CREATE); + util.wiremock(NAMESPACE, Phase.CREATE, true); } @AfterEach void after() { - util.wiremock(NAMESPACE, Phase.DELETE); + util.wiremock(NAMESPACE, Phase.DELETE, true); } /* diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java index 266aa3aa..54e602ee 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java @@ -60,7 +60,7 @@ class ActuatorRefreshMultipleNamespacesIT { util = new Util(K3S); util.createNamespace(LEFT_NAMESPACE); util.createNamespace(RIGHT_NAMESPACE); - util.wiremock(DEFAULT_NAMESPACE, Phase.CREATE); + util.wiremock(DEFAULT_NAMESPACE, Phase.CREATE, true); util.setUpClusterWide(DEFAULT_NAMESPACE, Set.of(DEFAULT_NAMESPACE, LEFT_NAMESPACE, RIGHT_NAMESPACE)); configWatcher(Phase.CREATE); } @@ -68,7 +68,7 @@ class ActuatorRefreshMultipleNamespacesIT { @AfterAll static void afterAll() { configWatcher(Phase.DELETE); - util.wiremock(DEFAULT_NAMESPACE, Phase.DELETE); + util.wiremock(DEFAULT_NAMESPACE, Phase.DELETE, true); util.deleteClusterWide(DEFAULT_NAMESPACE, Set.of(DEFAULT_NAMESPACE, LEFT_NAMESPACE, RIGHT_NAMESPACE)); util.deleteNamespace(LEFT_NAMESPACE); util.deleteNamespace(RIGHT_NAMESPACE); diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java index 42818b30..3dd8cab7 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java @@ -78,8 +78,8 @@ class DiscoveryServerClientIT extends DiscoveryServerClientBase { discoveryServer(Phase.CREATE); Images.loadWiremock(K3S); - util.wiremock(NAMESPACE_LEFT, Phase.CREATE); - util.wiremock(NAMESPACE_RIGHT, Phase.CREATE); + util.wiremock(NAMESPACE_LEFT, Phase.CREATE, false); + util.wiremock(NAMESPACE_RIGHT, Phase.CREATE, false); } @AfterAll @@ -87,8 +87,8 @@ class DiscoveryServerClientIT extends DiscoveryServerClientBase { serviceAccount(Phase.DELETE); discoveryServer(Phase.DELETE); - util.wiremock(NAMESPACE_LEFT, Phase.DELETE); - util.wiremock(NAMESPACE_RIGHT, Phase.DELETE); + util.wiremock(NAMESPACE_LEFT, Phase.DELETE, false); + util.wiremock(NAMESPACE_RIGHT, Phase.DELETE, false); util.deleteNamespace(NAMESPACE_LEFT); util.deleteNamespace(NAMESPACE_RIGHT); diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java index 6d75d346..2ca22a60 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java @@ -60,12 +60,12 @@ class KubernetesClientBlockingIT extends KubernetesClientDiscoveryBase { @BeforeEach void beforeEach() { Images.loadWiremock(K3S); - util.wiremock(NAMESPACE, Phase.CREATE); + util.wiremock(NAMESPACE, Phase.CREATE, true); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE, Phase.DELETE); + util.wiremock(NAMESPACE, Phase.DELETE, true); } /** diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java index 2cfb3a40..31e61c80 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java @@ -63,14 +63,14 @@ class KubernetesClientDiscoveryFilterIT extends KubernetesClientDiscoveryBase { util.createNamespace(NAMESPACE_B_UAT); Images.loadWiremock(K3S); - util.wiremock(NAMESPACE_A_UAT, Phase.CREATE); - util.wiremock(NAMESPACE_B_UAT, Phase.CREATE); + util.wiremock(NAMESPACE_A_UAT, Phase.CREATE, false); + util.wiremock(NAMESPACE_B_UAT, Phase.CREATE, false); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE_A_UAT, Phase.DELETE); - util.wiremock(NAMESPACE_B_UAT, Phase.DELETE); + util.wiremock(NAMESPACE_A_UAT, Phase.DELETE, false); + util.wiremock(NAMESPACE_B_UAT, Phase.DELETE, false); util.deleteNamespace(NAMESPACE_A_UAT); util.deleteNamespace(NAMESPACE_B_UAT); diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java index f00bf32a..14c71111 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/TestAssertions.java @@ -133,8 +133,8 @@ final class TestAssertions { assertThat(wiremockInstance.getServiceId()).isEqualTo("service-wiremock"); assertThat(wiremockInstance.getInstanceId()).isNotNull(); assertThat(wiremockInstance.getHost()).isNotNull(); - assertThat(wiremockInstance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "default", "type", "NodePort", - "port.http", "8080", "app", "service-wiremock")); + assertThat(wiremockInstance.getMetadata()).isEqualTo( + Map.of("k8s_namespace", "default", "type", "NodePort", "port.http", "8080", "app", "service-wiremock")); } @@ -147,8 +147,8 @@ final class TestAssertions { assertThat(wiremockInstance.getServiceId()).isEqualTo("service-wiremock"); assertThat(wiremockInstance.getInstanceId()).isNotNull(); assertThat(wiremockInstance.getHost()).isNotNull(); - assertThat(wiremockInstance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "default", "type", "NodePort", - "port.http", "8080", "app", "service-wiremock")); + assertThat(wiremockInstance.getMetadata()).isEqualTo( + Map.of("k8s_namespace", "default", "type", "NodePort", "port.http", "8080", "app", "service-wiremock")); } diff --git a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java index 86c8b24f..92619aaf 100644 --- a/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java +++ b/spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/Util.java @@ -208,6 +208,10 @@ public final class Util { labelSelector(podLabels), null, null, null, null, null, null, null, null); waitForDeploymentToBeDeleted(deploymentName, namespace); waitForDeploymentPodsToBeDeleted(podLabels, namespace); + + service.getMetadata().setNamespace(namespace); + coreV1Api.deleteNamespacedService(service.getMetadata().getName(), service.getMetadata().getNamespace(), + null, null, null, null, null, null); } catch (Exception e) { throw new RuntimeException(e); @@ -409,7 +413,7 @@ public final class Util { .noneMatch(x -> x.getMetadata().getName().equals(name))); } - public void wiremock(String namespace, Phase phase) { + public void wiremock(String namespace, Phase phase, boolean withNodePort) { V1Deployment deployment = (V1Deployment) yaml("wiremock/wiremock-deployment.yaml"); String imageWithoutVersion = deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getImage(); @@ -417,6 +421,12 @@ public final class Util { deployment.getSpec().getTemplate().getSpec().getContainers().get(0).setImage(imageWithVersion); V1Service service = (V1Service) yaml("wiremock/wiremock-service.yaml"); + service.getMetadata().setNamespace(namespace); + if (!withNodePort) { + // we assume we only have one 'http' port + service.getSpec().getPorts().get(0).setNodePort(null); + service.getSpec().setType("ClusterIP"); + } if (phase.equals(Phase.CREATE)) { deployment.getMetadata().setNamespace(namespace); From c9df5b4ddd4c7fe1adc2ca27e755cb5ad15df8dd Mon Sep 17 00:00:00 2001 From: wind57 Date: Sun, 30 Mar 2025 19:18:36 +0300 Subject: [PATCH 09/10] fix tests Signed-off-by: wind57 --- .../k8s/client/discovery/KubernetesClientReactiveIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java index c24af79b..7fe1a897 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java @@ -60,12 +60,12 @@ class KubernetesClientReactiveIT extends KubernetesClientDiscoveryBase { @BeforeEach void beforeEach() { Images.loadWiremock(K3S); - util.wiremock(NAMESPACE, Phase.CREATE); + util.wiremock(NAMESPACE, Phase.CREATE, true); } @AfterEach void afterEach() { - util.wiremock(NAMESPACE, Phase.DELETE); + util.wiremock(NAMESPACE, Phase.DELETE, true); } /** From bb3b7cd3402a88294d5a7882c6e84040f0a71d4d Mon Sep 17 00:00:00 2001 From: wind57 Date: Sun, 30 Mar 2025 22:19:45 +0300 Subject: [PATCH 10/10] fix tests Signed-off-by: wind57 --- .../src/test/resources/app/app-service.yaml | 3 ++- .../src/test/resources/config-watcher/watcher-service.yaml | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/app/app-service.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/app/app-service.yaml index 292541f7..0f5318b7 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/app/app-service.yaml +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/app/app-service.yaml @@ -9,6 +9,7 @@ spec: - name: http port: 8080 targetPort: 8080 + nodePort: 32321 selector: app: app - type: ClusterIP + type: NodePort diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml index 8428eede..3ab3a8ec 100644 --- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml +++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-service.yaml @@ -9,7 +9,6 @@ spec: - name: http port: 8888 targetPort: 8888 - nodePort: 32321 selector: app: configuration-watcher - type: NodePort + type: ClusterIP