fabric8 integration tests refactor#2228
Conversation
Signed-off-by: wind57 <[email protected]>
Signed-off-by: wind57 <[email protected]>
Signed-off-by: wind57 <[email protected]>
Signed-off-by: wind57 <[email protected]>
|
@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. |
There was a problem hiding this comment.
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/@Fabric8ClientIntegrationTestplus corresponding JUnit 5 extensions and a sharedK3sContextInitializer. - 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.nameis constrained to a C_IDENTIFIER in the API schema; using a dotted name likespring.kafka.bootstrap-serverscan be rejected by the API server. Prefer an environment-variable-safe name (for exampleSPRING_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 thedeploymentas 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.
Signed-off-by: wind57 <[email protected]>
Signed-off-by: wind57 <[email protected]>
|
feels a bit weird that only two comments on som many changes... can you try to trigger it again please? |
No description provided.