Skip to content

fabric8 integration tests refactor#2228

Draft
wind57 wants to merge 6 commits intospring-cloud:mainfrom
wind57:refactor_integration_tests
Draft

fabric8 integration tests refactor#2228
wind57 wants to merge 6 commits intospring-cloud:mainfrom
wind57:refactor_integration_tests

Conversation

@wind57
Copy link
Copy Markdown
Contributor

@wind57 wind57 commented Apr 19, 2026

No description provided.

Signed-off-by: wind57 <[email protected]>
@wind57 wind57 changed the title fabric8 ready fabric8 integration tests refactor Apr 19, 2026
@wind57
Copy link
Copy Markdown
Contributor Author

wind57 commented Apr 20, 2026

@ryanjbaxter can you trigger copilot in here please? ( I might need a few rounds from it ). It's a major revision on how we write integration tests in a few years, but internally they have not changed one bit.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the Fabric8 and Kubernetes Java-client integration test setup to use reusable JUnit 5 extensions/annotations that manage k3s lifecycle, RBAC, namespace setup, and common test fixtures.

Changes:

  • Introduces @NativeClientIntegrationTest / @Fabric8ClientIntegrationTest plus corresponding JUnit 5 extensions and a shared K3sContextInitializer.
  • Renames and extends fixture helpers (NativeClientKubernetesFixture, Fabric8ClientKubernetesFixture) and centralizes common manifests (external-name service, discovery server).
  • Updates many integration tests to rely on extension-driven setup/teardown and parameter injection, removing duplicated per-test lifecycle code and local YAMLs.

Reviewed changes

Copilot reviewed 57 out of 60 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
spring-cloud-kubernetes-test-support/src/main/resources/external-name-service/external-name-service.yaml Adds shared ExternalName Service manifest for tests.
spring-cloud-kubernetes-test-support/src/main/resources/discovery-server/discoveryserver-service.yaml Adds shared discovery-server Service manifest (NodePort).
spring-cloud-kubernetes-test-support/src/main/resources/discovery-server/discoveryserver-deployment.yaml Adds shared discovery-server Deployment manifest.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/NativeClientKubernetesFixture.java Renames fixture + adds/adjusts helpers for namespaces, RBAC, externalName/configWatcher/discoveryServer, and safer delete flows.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/k3s/NativeClientIntegrationTestExtension.java New JUnit 5 extension orchestrating native-client k3s setup/teardown and parameter injection.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/k3s/NativeClientIntegrationTest.java New annotation to declare per-test-scenario infra needs for native client tests.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/k3s/K3sContextInitializer.java New Spring context initializer to ensure k3s is started early.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/k3s/FabricClientIntegrationTestExtension.java New JUnit 5 extension orchestrating fabric8-client k3s setup/teardown and parameter injection.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/k3s/Fabric8ClientIntegrationTest.java New annotation to declare per-test-scenario infra needs for Fabric8 tests.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/fabric8_client/Fabric8ClientKubernetesFixture.java Renames Fabric8 fixture + adds externalName helper, default-namespace guards, and istioctl pod name helper.
spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/Commons.java Wraps image load IO failures and simplifies exception handling in image-loading utilities.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientSecretConfigTreeIT.java Migrates test to @NativeClientIntegrationTest and fixture injection.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientReloadBase.java Refactors base to receive K3sContainer via extension and use injected fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapLabelEventTriggeredIT.java Migrates namespace setup to extension + uses injected fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapEventTriggeredIT.java Migrates namespace setup to extension + uses injected fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-reload/src/test/java/org/springframework/cloud/kubernetes/k8s/client/reload/it/K8sClientConfigMapConfigTreeIT.java Migrates to extension-driven setup and injected fixture.
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 Removes local config-watcher Service manifest (now centralized).
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-rabbitmq-secret-reload/rabbitmq-secret-test-app/src/test/resources/config-watcher/watcher-deployment.yaml Removes local config-watcher Deployment manifest (now centralized).
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 Migrates to extension-driven setup, using configWatcher/rabbitmq provisioning via annotation.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-leader-election/src/test/java/org/springframework/cloud/kubernetes/client/leader/election/AbstractLeaderElection.java Migrates to @NativeClientIntegrationTest and injected container.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-kus-kafka-service.yaml Removes local config-watcher Service manifest (now centralized).
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-kafka-configmap-reload/kafka-configmap-test-app/src/test/resources/config-watcher/watcher-bus-kafka-deployment.yaml Removes local config-watcher Deployment manifest (now centralized).
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 Migrates to extension-driven setup, using configWatcher/kafka provisioning via annotation.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientReactiveIT.java Uses annotation-driven wiremock provisioning instead of per-test lifecycle.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoverySimpleIT.java Uses annotation-driven busybox + external name service; injects container for kubectl exec usage.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryFilterIT.java Uses annotation-driven namespaces + wiremock instead of per-test lifecycle.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientDiscoveryBase.java Refactors base to receive K3sContainer via extension and use it for kubeconfig.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery/src/test/java/org/springframework/cloud/kubernetes/k8s/client/discovery/KubernetesClientBlockingIT.java Moves setup/teardown into annotation config and updates expectations for NodePort wiremock.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/resources/manifests/cluster-role.yaml Removes cluster-role binding manifest from this module (now handled via centralized RBAC setup).
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientIT.java Migrates discovery-server test environment setup to @NativeClientIntegrationTest.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-discovery-server/src/test/java/org/springframework/cloud/kubernetes/discoveryclient/it/DiscoveryServerClientBase.java Simplifies base by removing manual discovery-server/RBAC setup in favor of the refactor.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-service.yaml Removes local config-watcher Service manifest (now centralized).
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/resources/config-watcher/spring-cloud-kubernetes-configuration-watcher-deployment.yaml Removes local config-watcher Deployment manifest (now centralized).
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/TestUtil.java Updates helpers to use injected fixture and adjusts actuator verification logic.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshMultipleNamespacesIT.java Migrates to annotation-driven provisioning and injected fixture/container.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/ActuatorRefreshIT.java Migrates to annotation-driven provisioning and injected fixture/container.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-catalog-watcher/src/test/resources/logback-test.xml Adjusts test logging configuration.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/k8s/client/catalog/watcher/TestAssertions.java Switches assertions helper to use native-client fixture for busybox cleanup.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/k8s/client/catalog/watcher/KubernetesClientCatalogWatchEndpointsIT.java Migrates to @NativeClientIntegrationTest and injected fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/k8s/client/catalog/watcher/KubernetesClientCatalogWatchEndpointSlicesIT.java Migrates to @NativeClientIntegrationTest and injected fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-k8s-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/k8s/client/catalog/watcher/KubernetesClientCatalogWatchBase.java Refactors base to receive K3sContainer via extension.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-leader-election/src/test/java/org/springframework/cloud/kubernetes/fabric8/leader/election/AbstractLeaderElection.java Migrates to @Fabric8ClientIntegrationTest and injected container.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/reload/TestAssertions.java Updates helper signatures for renamed Fabric8 fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/reload/Fabric8EventReloadSecretConfigDataIT.java Migrates to @Fabric8ClientIntegrationTest and injected fixture/container.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/reload/Fabric8EventReloadInformWithLabelIT.java Migrates to @Fabric8ClientIntegrationTest and removes manual namespace lifecycle.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/reload/Fabric8EventReloadConfigMapBootstrapIT.java Migrates to @Fabric8ClientIntegrationTest and removes manual namespace lifecycle.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/reload/Fabric8EventReloadBase.java Refactors base to receive K3sContainer via extension and use it for kubeconfig.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-reload/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/reload/Fabric8ConfigMapConfigTreeIT.java Migrates setup/teardown to @Fabric8ClientIntegrationTest-driven provisioning.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-istio/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/istio/Fabric8IstioIT.java Migrates complex istio setup to the shared Fabric8 extension scenario.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/TestAssertions.java Minor refactor for variable naming in assertions.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryReactiveIT.java Migrates busybox provisioning to @Fabric8ClientIntegrationTest.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryFilterIT.java Migrates namespace + wiremock provisioning to @Fabric8ClientIntegrationTest.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryBlockingIT.java Migrates provisioning to extension and injects container for kubectl exec usage.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryBase.java Refactors base to receive K3sContainer via extension and use it for kubeconfig.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/Fabric8DiscoveryAllServicesIT.java Migrates external-name and busybox provisioning to @Fabric8ClientIntegrationTest.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/TestAssertions.java Updates helper signatures for renamed Fabric8 fixture.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8CatalogWatchEndpointsIT.java Migrates to @Fabric8ClientIntegrationTest and injects container for client creation.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8CatalogWatchEndpointSlicesIT.java Migrates to @Fabric8ClientIntegrationTest and injects container for client creation.
spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-catalog-watcher/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8CatalogWatchBase.java Removes now-redundant manual k3s/fixture bootstrap logic.
spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configserver/src/test/java/org/springframework/cloud/kubernetes/configserver/it/KubernetesEnvironmentRepositoryTests.java Updates to renamed native fixture but still loads YAML fixtures from it.
Comments suppressed due to low confidence (2)

spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/NativeClientKubernetesFixture.java:536

  • Kubernetes EnvVar.name is constrained to a C_IDENTIFIER in the API schema; using a dotted name like spring.kafka.bootstrap-servers can be rejected by the API server. Prefer an environment-variable-safe name (for example SPRING_KAFKA_BOOTSTRAP_SERVERS) so the Deployment is portable across clusters.
    spring-cloud-kubernetes-test-support/src/main/java/org/springframework/cloud/kubernetes/integration/tests/commons/native_client/NativeClientKubernetesFixture.java:574
  • In the DELETE branch the deployment is not passed to deleteAndWait, so the discovery server Deployment (and its pods) will remain running after tests. Pass the deployment as well (or add a dedicated delete method that cleans up both resources).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

wind57 added 2 commits April 20, 2026 22:39
Signed-off-by: wind57 <[email protected]>
Signed-off-by: wind57 <[email protected]>
@wind57
Copy link
Copy Markdown
Contributor Author

wind57 commented Apr 20, 2026

feels a bit weird that only two comments on som many changes... can you try to trigger it again please?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants