Simplify test 3 (#1226)
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user