Simplify test 3 (#1226)

This commit is contained in:
erabii
2023-02-14 18:02:41 +02:00
committed by GitHub
parent d0fc86d04d
commit f89855c797
3 changed files with 38 additions and 171 deletions

View File

@@ -46,7 +46,7 @@ class KubernetesDiscoveryClientFilterTest {
.mock(MixedOperation.class);
@Test
public void testFilteredServices() {
void testFilteredServices() {
List<String> springBootServiceNames = Arrays.asList("serviceA", "serviceB");
List<Service> services = createSpringBootServiceByName(springBootServiceNames);

View File

@@ -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<String, String>() {
{
put("label", "value");
}
}).endMetadata().endItem().addNewItem().withNewMetadata().withName("s2")
.withLabels(new HashMap<String, String>() {
{
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<String, String>() {
{
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<String, String>() {
{
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<String, String>() {
{
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<Endpoints> 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<String, String>() {
{
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<String, String>() {
{
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<String, String>() {
{
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<String, String>() {
{
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<String, String>() {
{
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<String, String>() {
{
put("label", "value");
}
}).endMetadata().build())
.withLabels(Map.of("label", "value")).endMetadata().build())
.once();
KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, Set.of(), true, 60,

View File

@@ -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 {
}
}