From f89855c797702a206d94958fe0595ad2c9c76a0e Mon Sep 17 00:00:00 2001 From: erabii Date: Tue, 14 Feb 2023 18:02:41 +0200 Subject: [PATCH] Simplify test 3 (#1226) --- .../KubernetesDiscoveryClientFilterTest.java | 2 +- ...ubernetesReactiveDiscoveryClientTests.java | 120 ++++++------------ .../support/KubernetesExtension.java | 87 ------------- 3 files changed, 38 insertions(+), 171 deletions(-) delete mode 100644 spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/support/KubernetesExtension.java diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterTest.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterTest.java index 74ca1405..6399457f 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterTest.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterTest.java @@ -46,7 +46,7 @@ class KubernetesDiscoveryClientFilterTest { .mock(MixedOperation.class); @Test - public void testFilteredServices() { + void testFilteredServices() { List springBootServiceNames = Arrays.asList("serviceA", "serviceB"); List services = createSpringBootServiceByName(springBootServiceNames); diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientTests.java index be9c96bc..aa7cbd8b 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientTests.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientTests.java @@ -17,7 +17,6 @@ package org.springframework.cloud.kubernetes.fabric8.discovery.reactive; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -30,17 +29,17 @@ import io.fabric8.kubernetes.api.model.ServiceList; import io.fabric8.kubernetes.api.model.ServiceListBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import reactor.core.publisher.Flux; import reactor.test.StepVerifier; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.fabric8.discovery.support.KubernetesExtension; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; @@ -49,11 +48,15 @@ import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesD /** * @author Tim Ysewyn */ -@ExtendWith(KubernetesExtension.class) +@EnableKubernetesMockClient(crud = true, https = false) class KubernetesReactiveDiscoveryClientTests { + private static KubernetesMockServer kubernetesServer; + + private static KubernetesClient kubernetesClient; + @BeforeEach - void setup(@KubernetesExtension.Client KubernetesClient kubernetesClient) { + void beforeEach() { // Configure the kubernetes master url to point to the mock server System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, kubernetesClient.getConfiguration().getMasterUrl()); @@ -63,8 +66,13 @@ class KubernetesReactiveDiscoveryClientTests { System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); } + @AfterEach + void afterEach() { + kubernetesServer.clearExpectations(); + } + @Test - void verifyDefaults(@KubernetesExtension.Client KubernetesClient kubernetesClient) { + void verifyDefaults() { ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); assertThat(client.description()).isEqualTo("Kubernetes Reactive Discovery Client"); @@ -72,22 +80,12 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnFluxOfServices(@KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnFluxOfServices() { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().addNewItem().withNewMetadata().withName("s1") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().endItem().addNewItem().withNewMetadata().withName("s2") - .withLabels(new HashMap() { - { - put("label", "value"); - put("label2", "value2"); - } - }).endMetadata().endItem().addNewItem().withNewMetadata().withName("s3").endMetadata().endItem() - .build()) + .withLabels(Map.of("label", "value")).endMetadata().endItem().addNewItem().withNewMetadata() + .withName("s2").withLabels(Map.of("label", "value", "label2", "value2")).endMetadata().endItem() + .addNewItem().withNewMetadata().withName("s3").endMetadata().endItem().build()) .once(); ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); @@ -96,9 +94,7 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnEmptyFluxOfServicesWhenNoInstancesFound( - @KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnEmptyFluxOfServicesWhenNoInstancesFound() { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().build()).once(); @@ -109,8 +105,7 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnEmptyFluxForNonExistingService(@KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnEmptyFluxForNonExistingService() { kubernetesServer.expect().get() .withPath("/api/v1/namespaces/test/endpoints?fieldSelector=metadata.name%3Dnonexistent-service") .andReturn(200, new EndpointsBuilder().build()).once(); @@ -122,15 +117,10 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnEmptyFluxWhenServiceHasNoSubsets(@KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnEmptyFluxWhenServiceHasNoSubsets() { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().addNewItem().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().endItem().build()) + .withLabels(Map.of("label", "value")).endMetadata().endItem().build()) .once(); kubernetesServer.expect().get() @@ -144,22 +134,14 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnFlux(@KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnFlux() { ServiceList services = new ServiceListBuilder().addNewItem().withNewMetadata().withName("existing-service") - .withNamespace("test").withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().endItem().build(); + .withNamespace("test").withLabels(Map.of("label", "value")).endMetadata().endItem().build(); Endpoints endPoint = new EndpointsBuilder().withNewMetadata().withName("existing-service").withNamespace("test") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().addNewSubset().addNewAddress().withIp("ip1").withNewTargetRef().withUid("uid1") - .endTargetRef().endAddress().addNewPort("http", "http_tcp", 80, "TCP").endSubset().build(); + .withLabels(Map.of("label", "value")).endMetadata().addNewSubset().addNewAddress().withIp("ip1") + .withNewTargetRef().withUid("uid1").endTargetRef().endAddress() + .addNewPort("http", "http_tcp", 80, "TCP").endSubset().build(); List endpointsList = new ArrayList<>(); endpointsList.add(endPoint); @@ -182,15 +164,10 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnFluxWithPrefixedMetadata(@KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnFluxWithPrefixedMetadata() { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().addNewItem().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().endItem().build()) + .withLabels(Map.of("label", "value")).endMetadata().endItem().build()) .once(); Endpoints endPoint = new EndpointsBuilder().withNewMetadata().withName("endpoint").withNamespace("test") @@ -209,11 +186,7 @@ class KubernetesReactiveDiscoveryClientTests { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services/existing-service") .andReturn(200, new ServiceBuilder().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().build()) + .withLabels(Map.of("label", "value")).endMetadata().build()) .once(); Metadata metadata = new Metadata(true, "label.", true, "annotation.", true, "port."); @@ -224,16 +197,10 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnFluxWhenServiceHasMultiplePortsAndPrimaryPortNameIsSet( - @KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnFluxWhenServiceHasMultiplePortsAndPrimaryPortNameIsSet() { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().addNewItem().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().endItem().build()) + .withLabels(Map.of("label", "value")).endMetadata().endItem().build()) .once(); Endpoints endPoint = new EndpointsBuilder().withNewMetadata().withName("endpoint").withNamespace("test") @@ -253,11 +220,7 @@ class KubernetesReactiveDiscoveryClientTests { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services/existing-service") .andReturn(200, new ServiceBuilder().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().build()) + .withLabels(Map.of("label", "value")).endMetadata().build()) .once(); ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, @@ -267,15 +230,10 @@ class KubernetesReactiveDiscoveryClientTests { } @Test - void shouldReturnFluxOfServicesAcrossAllNamespaces(@KubernetesExtension.Client KubernetesClient kubernetesClient, - @KubernetesExtension.Server KubernetesServer kubernetesServer) { + void shouldReturnFluxOfServicesAcrossAllNamespaces() { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().addNewItem().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().endItem().build()) + .withLabels(Map.of("label", "value")).endMetadata().endItem().build()) .once(); Endpoints endpoints = new EndpointsBuilder().withNewMetadata().withName("endpoint").withNamespace("test") @@ -291,11 +249,7 @@ class KubernetesReactiveDiscoveryClientTests { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services/existing-service") .andReturn(200, new ServiceBuilder().withNewMetadata().withName("existing-service") - .withLabels(new HashMap() { - { - put("label", "value"); - } - }).endMetadata().build()) + .withLabels(Map.of("label", "value")).endMetadata().build()) .once(); KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, Set.of(), true, 60, diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/support/KubernetesExtension.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/support/KubernetesExtension.java deleted file mode 100644 index bcf036bd..00000000 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/support/KubernetesExtension.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2019-2019 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.kubernetes.fabric8.discovery.support; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.server.mock.KubernetesServer; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolutionException; -import org.junit.jupiter.api.extension.ParameterResolver; - -/** - * @author Tim Ysewyn - */ -public class KubernetesExtension implements ParameterResolver, BeforeEachCallback, AfterEachCallback { - - private final KubernetesServer mockServer = new KubernetesServer(false); - - @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext context) { - return (parameterContext.getParameter().isAnnotationPresent(Server.class) - && KubernetesServer.class.isAssignableFrom(parameterContext.getParameter().getType())) - || (parameterContext.getParameter().isAnnotationPresent(Client.class) - && KubernetesClient.class.isAssignableFrom(parameterContext.getParameter().getType())); - } - - @Override - public void beforeEach(ExtensionContext context) { - mockServer.before(); - } - - @Override - public void afterEach(ExtensionContext context) { - mockServer.after(); - } - - @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) - throws ParameterResolutionException { - if (parameterContext.getParameter().isAnnotationPresent(Client.class)) { - return mockServer.getClient(); - } - else { - return mockServer; - } - } - - /** - * Enables injection of kubernetes server to test. - */ - @Target({ ElementType.PARAMETER }) - @Retention(RetentionPolicy.RUNTIME) - public @interface Server { - - } - - /** - * Enables injection of kubernetes client to test. - */ - @Target({ ElementType.PARAMETER }) - @Retention(RetentionPolicy.RUNTIME) - public @interface Client { - - } - -}