From 24f768cde113b59af9e19206311e0419531df03f Mon Sep 17 00:00:00 2001 From: erabii Date: Thu, 29 Sep 2022 02:50:38 +0300 Subject: [PATCH] Discovery refactor 6 (#1091) --- .../KubernetesInformerDiscoveryClient.java | 4 +- ...ubernetesInformerDiscoveryClientTests.java | 27 +-- .../KubernetesServiceInstanceTests.java | 52 ----- ...sInformerReactiveDiscoveryClientTests.java | 6 +- ...KubernetesClientServiceInstanceMapper.java | 3 +- ...netesClientServiceInstanceMapperTests.java | 5 +- ...rnetesClientServicesListSupplierTests.java | 8 +- .../DefaultKubernetesServiceInstance.java | 107 +++++++++ .../discovery/KubernetesServiceInstance.java | 212 +----------------- .../KubernetesServiceInstanceTests.java | 89 ++++++++ ...asedConfigMapWatchChangeDetectorTests.java | 6 +- ...pBasedSecretsWatchChangeDetectorTests.java | 6 +- .../discovery/KubernetesDiscoveryClient.java | 4 +- .../KubernetesServiceInstanceTests.java | 58 ----- .../Fabric8ServiceInstanceMapper.java | 3 +- .../KubernetesServiceListSupplierTests.java | 8 +- 16 files changed, 248 insertions(+), 350 deletions(-) delete mode 100644 spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesServiceInstanceTests.java create mode 100644 spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/DefaultKubernetesServiceInstance.java create mode 100644 spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstanceTests.java delete mode 100644 spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesServiceInstanceTests.java diff --git a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClient.java b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClient.java index ca1010bf..747d22ad 100644 --- a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClient.java +++ b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClient.java @@ -39,8 +39,8 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -159,7 +159,7 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi final int port = findEndpointPort(endpointPorts, primaryPortName, serviceId); return addresses.stream() - .map(addr -> new KubernetesServiceInstance( + .map(addr -> new DefaultKubernetesServiceInstance( addr.getTargetRef() != null ? addr.getTargetRef().getUid() : "", serviceId, addr.getIp(), port, metadata, false, service.getMetadata().getNamespace(), service.getMetadata().getClusterName())); diff --git a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientTests.java b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientTests.java index c435047b..fe5e039c 100644 --- a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientTests.java +++ b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientTests.java @@ -35,8 +35,8 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.times; @@ -151,8 +151,9 @@ public class KubernetesInformerDiscoveryClientTests { sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); assertThat(discoveryClient.getInstances("test-svc-1").toArray()).isEmpty(); - assertThat(discoveryClient.getInstances("test-svc-3").toArray()).containsOnly(new KubernetesServiceInstance("", - "test-svc-3", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)); + assertThat(discoveryClient.getInstances("test-svc-3").toArray()) + .containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-3", "2.2.2.2", 8080, new HashMap<>(), + false, "namespace1", null)); } @Test @@ -179,7 +180,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(2)).isAllNamespaces(); @@ -196,7 +197,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -229,7 +230,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -275,7 +276,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 443, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -294,7 +295,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -311,7 +312,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 443, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); @@ -330,7 +331,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -346,7 +347,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 443, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -362,7 +363,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); @@ -379,7 +380,7 @@ public class KubernetesInformerDiscoveryClientTests { KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); - assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new KubernetesServiceInstance("", + assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("", "test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null)); verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); diff --git a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesServiceInstanceTests.java b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesServiceInstanceTests.java deleted file mode 100644 index 97ee7128..00000000 --- a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesServiceInstanceTests.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2013-2020 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.client.discovery; - -import java.util.Collections; - -import org.junit.Test; - -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; - -import static org.assertj.core.api.Assertions.assertThat; - -public class KubernetesServiceInstanceTests { - - @Test - public void schemeIsHttp() { - assertServiceInstance(false); - } - - private KubernetesServiceInstance assertServiceInstance(boolean secure) { - KubernetesServiceInstance instance = new KubernetesServiceInstance("123", "myservice", "1.2.3.4", 8080, - Collections.emptyMap(), secure); - - assertThat(instance.getInstanceId()).isEqualTo("123"); - assertThat(instance.getServiceId()).isEqualTo("myservice"); - assertThat(instance.getHost()).isEqualTo("1.2.3.4"); - assertThat(instance.getPort()).isEqualTo(8080); - assertThat(instance.isSecure()).isEqualTo(secure); - assertThat(instance.getScheme()).isEqualTo(secure ? "https" : "http"); - return instance; - } - - @Test - public void schemeIsHttps() { - assertServiceInstance(true); - } - -} diff --git a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientTests.java b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientTests.java index 84dcaf9b..e5cb50fb 100644 --- a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientTests.java +++ b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientTests.java @@ -36,8 +36,8 @@ import org.mockito.junit.MockitoJUnitRunner; import reactor.test.StepVerifier; import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.mock.env.MockEnvironment; import static org.mockito.Mockito.mock; @@ -117,7 +117,7 @@ public class KubernetesInformerReactiveDiscoveryClientTests { endpointsLister, null, null, kubernetesDiscoveryProperties); StepVerifier - .create(discoveryClient.getInstances("test-svc-1")).expectNext(new KubernetesServiceInstance("", + .create(discoveryClient.getInstances("test-svc-1")).expectNext(new DefaultKubernetesServiceInstance("", "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)) .expectComplete().verify(); @@ -137,7 +137,7 @@ public class KubernetesInformerReactiveDiscoveryClientTests { kubernetesDiscoveryProperties); StepVerifier - .create(discoveryClient.getInstances("test-svc-1")).expectNext(new KubernetesServiceInstance("", + .create(discoveryClient.getInstances("test-svc-1")).expectNext(new DefaultKubernetesServiceInstance("", "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)) .expectComplete().verify(); diff --git a/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapper.java b/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapper.java index 25bd5aa0..f2f2aedd 100644 --- a/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapper.java +++ b/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapper.java @@ -25,6 +25,7 @@ import io.kubernetes.client.openapi.models.V1ObjectMeta; import io.kubernetes.client.openapi.models.V1Service; import io.kubernetes.client.openapi.models.V1ServicePort; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesLoadBalancerProperties; @@ -69,7 +70,7 @@ public class KubernetesClientServiceInstanceMapper implements KubernetesServiceI service.getMetadata().getNamespace(), properties.getClusterDomain()); final boolean secure = KubernetesServiceInstanceMapper.isSecure(service.getMetadata().getLabels(), service.getMetadata().getAnnotations(), port.getName(), port.getPort()); - return new KubernetesServiceInstance(meta.getUid(), meta.getName(), host, port.getPort(), + return new DefaultKubernetesServiceInstance(meta.getUid(), meta.getName(), host, port.getPort(), getServiceMetadata(service), secure); } diff --git a/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapperTests.java b/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapperTests.java index c79c9c20..cddd2128 100644 --- a/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapperTests.java +++ b/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServiceInstanceMapperTests.java @@ -26,6 +26,7 @@ import io.kubernetes.client.openapi.models.V1ServicePortBuilder; import io.kubernetes.client.openapi.models.V1ServiceSpecBuilder; import org.junit.jupiter.api.Test; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesLoadBalancerProperties; @@ -56,7 +57,7 @@ class KubernetesClientServiceInstanceMapperTests { Map metadata = new HashMap<>(); metadata.put("org.springframework.cloud", "true"); metadata.put("beta", "true"); - KubernetesServiceInstance result = new KubernetesServiceInstance("0", "database", + DefaultKubernetesServiceInstance result = new DefaultKubernetesServiceInstance("0", "database", "database.default.svc.cluster.local", 80, metadata, false); assertThat(serviceInstance).isEqualTo(result); } @@ -79,7 +80,7 @@ class KubernetesClientServiceInstanceMapperTests { .build(); KubernetesServiceInstance serviceInstance = mapper.map(service); - KubernetesServiceInstance result = new KubernetesServiceInstance("0", "database", + DefaultKubernetesServiceInstance result = new DefaultKubernetesServiceInstance("0", "database", "database.default.svc.cluster.local", 443, new HashMap(), true); assertThat(serviceInstance).isEqualTo(result); } diff --git a/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplierTests.java b/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplierTests.java index 39c987d8..c2d848be 100644 --- a/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplierTests.java +++ b/spring-cloud-kubernetes-client-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplierTests.java @@ -42,8 +42,8 @@ import reactor.test.StepVerifier; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesLoadBalancerProperties; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; import org.springframework.mock.env.MockEnvironment; @@ -131,7 +131,7 @@ class KubernetesClientServicesListSupplierTests { Map metadata = new HashMap<>(); metadata.put("org.springframework.cloud", "true"); metadata.put("beta", "true"); - KubernetesServiceInstance service1 = new KubernetesServiceInstance("0", "service1", + DefaultKubernetesServiceInstance service1 = new DefaultKubernetesServiceInstance("0", "service1", "service1.default.svc.cluster.local", 80, metadata, false); List services = new ArrayList<>(); services.add(service1); @@ -161,9 +161,9 @@ class KubernetesClientServicesListSupplierTests { Map metadata = new HashMap<>(); metadata.put("org.springframework.cloud", "true"); metadata.put("beta", "true"); - KubernetesServiceInstance service1 = new KubernetesServiceInstance("0", "service1", + DefaultKubernetesServiceInstance service1 = new DefaultKubernetesServiceInstance("0", "service1", "service1.default.svc.cluster.local", 80, metadata, false); - KubernetesServiceInstance service2 = new KubernetesServiceInstance("1", "service1", + DefaultKubernetesServiceInstance service2 = new DefaultKubernetesServiceInstance("1", "service1", "service1.test.svc.cluster.local", 80, new HashMap<>(), false); List services = new ArrayList<>(); services.add(service1); diff --git a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/DefaultKubernetesServiceInstance.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/DefaultKubernetesServiceInstance.java new file mode 100644 index 00000000..5f55233c --- /dev/null +++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/DefaultKubernetesServiceInstance.java @@ -0,0 +1,107 @@ +/* + * Copyright 2013-2022 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.commons.discovery; + +import java.net.URI; +import java.util.Map; + +import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.HTTP; +import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.HTTPS; +import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.NAMESPACE_METADATA_KEY; + +/** + * @author wind57 + * @param instanceId the id of the instance. + * @param serviceId the id of the service. + * @param host the address where the service instance can be found. + * @param port the port on which the service is running. + * @param metadata a map containing metadata. + * @param secure indicates whether the connection needs to be secure. + * @param namespace the namespace of the service. + * @param cluster the cluster the service resides in. + */ +public record DefaultKubernetesServiceInstance(String instanceId, String serviceId, String host, int port, + Map metadata, boolean secure, String namespace, + String cluster) implements KubernetesServiceInstance { + + /** + * @param instanceId the id of the instance. + * @param serviceId the id of the service. + * @param host the address where the service instance can be found. + * @param port the port on which the service is running. + * @param metadata a map containing metadata. + * @param secure indicates whether the connection needs to be secure. + */ + public DefaultKubernetesServiceInstance(String instanceId, String serviceId, String host, int port, + Map metadata, boolean secure) { + this(instanceId, serviceId, host, port, metadata, secure, null, null); + } + + @Override + public String getInstanceId() { + return this.instanceId; + } + + @Override + public String getServiceId() { + return serviceId; + } + + @Override + public String getHost() { + return host; + } + + @Override + public int getPort() { + return port; + } + + @Override + public boolean isSecure() { + return secure; + } + + @Override + public URI getUri() { + return createUri(secure ? HTTPS : HTTP, host, port); + } + + @Override + public Map getMetadata() { + return metadata; + } + + @Override + public String getScheme() { + return isSecure() ? HTTPS : HTTP; + } + + @Override + public String getNamespace() { + return namespace != null ? namespace : this.metadata.get(NAMESPACE_METADATA_KEY); + } + + @Override + public String getCluster() { + return this.cluster; + } + + private URI createUri(String scheme, String host, int port) { + return URI.create(scheme + "://" + host + ":" + port); + } +} diff --git a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstance.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstance.java index 1399f9ed..2f6c4e20 100644 --- a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstance.java +++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstance.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2020 the original author or authors. + * Copyright 2019-2022 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. @@ -16,211 +16,17 @@ package org.springframework.cloud.kubernetes.commons.discovery; -import java.net.URI; -import java.util.Map; -import java.util.Objects; - import org.springframework.cloud.client.ServiceInstance; -import org.springframework.core.style.ToStringCreator; -import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.HTTP; -import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.HTTPS; -import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.NAMESPACE_METADATA_KEY; +/** + * @author wind57 + * + * {@link ServiceInstance} with additional methods, specific to kubernetes. + */ +sealed public interface KubernetesServiceInstance extends ServiceInstance permits DefaultKubernetesServiceInstance { -public final class KubernetesServiceInstance implements ServiceInstance { + String getNamespace(); - private String instanceId; - - private String serviceId; - - private String host; - - private int port; - - private URI uri; - - private Boolean secure; - - private Map metadata; - - private String namespace; - - private String cluster; - - /** - * @param instanceId the id of the instance. - * @param serviceId the id of the service. - * @param host the address where the service instance can be found. - * @param port the port on which the service is running. - * @param metadata a map containing metadata. - * @param secure indicates whether the connection needs to be secure. - */ - public KubernetesServiceInstance(String instanceId, String serviceId, String host, int port, - Map metadata, Boolean secure) { - this.instanceId = instanceId; - this.serviceId = serviceId; - this.host = host; - this.port = port; - this.metadata = metadata; - this.secure = secure; - this.uri = createUri(secure ? HTTPS : HTTP, host, port); - this.namespace = null; - this.cluster = null; - } - - /** - * @param instanceId the id of the instance. - * @param serviceId the id of the service. - * @param host the address where the service instance can be found. - * @param port the port on which the service is running. - * @param metadata a map containing metadata. - * @param secure indicates whether the connection needs to be secure. - * @param namespace the namespace of the service. - * @param cluster the cluster the service resides in. - */ - public KubernetesServiceInstance(String instanceId, String serviceId, String host, int port, - Map metadata, Boolean secure, String namespace, String cluster) { - this.instanceId = instanceId; - this.serviceId = serviceId; - this.host = host; - this.port = port; - this.metadata = metadata; - this.secure = secure; - this.uri = createUri(secure ? HTTPS : HTTP, host, port); - this.namespace = namespace; - this.cluster = cluster; - } - - // Allows for deserialization - public KubernetesServiceInstance() { - } - - @Override - public String getInstanceId() { - return this.instanceId; - } - - @Override - public String getServiceId() { - return this.serviceId; - } - - @Override - public String getHost() { - return this.host; - } - - @Override - public int getPort() { - return this.port; - } - - @Override - public boolean isSecure() { - return this.secure; - } - - @Override - public URI getUri() { - return uri; - } - - public Map getMetadata() { - return this.metadata; - } - - @Override - public String getScheme() { - return isSecure() ? HTTPS : HTTP; - } - - private URI createUri(String scheme, String host, int port) { - return URI.create(scheme + "://" + host + ":" + port); - } - - public String getNamespace() { - return namespace != null ? namespace : this.metadata.get(NAMESPACE_METADATA_KEY); - } - - public String getCluster() { - return this.cluster; - } - - public void setInstanceId(String instanceId) { - this.instanceId = instanceId; - } - - public void setServiceId(String serviceId) { - this.serviceId = serviceId; - } - - public void setHost(String host) { - this.host = host; - } - - public void setPort(int port) { - this.port = port; - } - - public void setUri(URI uri) { - this.uri = uri; - } - - public void setSecure(Boolean secure) { - this.secure = secure; - } - - public void setMetadata(Map metadata) { - this.metadata = metadata; - } - - public void setNamespace(String namespace) { - this.namespace = namespace; - } - - public void setCluster(String cluster) { - this.cluster = cluster; - } - - public Boolean getSecure() { - return secure; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - KubernetesServiceInstance that = (KubernetesServiceInstance) o; - return port == that.port && Objects.equals(instanceId, that.instanceId) - && Objects.equals(serviceId, that.serviceId) && Objects.equals(host, that.host) - && Objects.equals(uri, that.uri) && Objects.equals(secure, that.secure) - && Objects.equals(metadata, that.metadata) && Objects.equals(getNamespace(), that.getNamespace()) - && Objects.equals(cluster, that.cluster); - } - - @Override - public String toString() { - ToStringCreator creator = new ToStringCreator(this); - creator.append("instanceId", instanceId); - creator.append("serviceId", serviceId); - creator.append("host", host); - creator.append("port", port); - creator.append("uri", uri); - creator.append("secure", secure); - creator.append("namespace", getNamespace()); - creator.append("cluster", cluster); - creator.append("metadata", metadata); - - return creator.toString(); - } - - @Override - public int hashCode() { - return Objects.hash(instanceId, serviceId, host, port, uri, secure, getNamespace(), cluster, metadata); - } + String getCluster(); } diff --git a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstanceTests.java b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstanceTests.java new file mode 100644 index 00000000..9a06cafe --- /dev/null +++ b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesServiceInstanceTests.java @@ -0,0 +1,89 @@ +/* + * Copyright 2013-2022 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.commons.discovery; + +import java.net.URI; +import java.util.Collections; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author wind57 + */ +class KubernetesServiceInstanceTests { + + @Test + void testFirstConstructor() { + DefaultKubernetesServiceInstance instance = new DefaultKubernetesServiceInstance("instanceId", "serviceId", + "host", 8080, Map.of("k8s_namespace", "spring-k8s"), true); + + assertThat(instance.getInstanceId()).isEqualTo("instanceId"); + assertThat(instance.getServiceId()).isEqualTo("serviceId"); + assertThat(instance.getHost()).isEqualTo("host"); + assertThat(instance.getPort()).isEqualTo(8080); + assertThat(instance.isSecure()).isTrue(); + assertThat(instance.getUri()).isEqualTo(URI.create("https://host:8080")); + assertThat(instance.getMetadata()).isEqualTo(Map.of("k8s_namespace", "spring-k8s")); + assertThat(instance.getScheme()).isEqualTo("https"); + assertThat(instance.getNamespace()).isEqualTo("spring-k8s"); + assertThat(instance.getCluster()).isNull(); + } + + @Test + void testSecondConstructor() { + DefaultKubernetesServiceInstance instance = new DefaultKubernetesServiceInstance("instanceId", "serviceId", + "host", 8080, Map.of("a", "b"), true, "spring-k8s", "cluster"); + + assertThat(instance.getInstanceId()).isEqualTo("instanceId"); + assertThat(instance.getServiceId()).isEqualTo("serviceId"); + assertThat(instance.getHost()).isEqualTo("host"); + assertThat(instance.getPort()).isEqualTo(8080); + assertThat(instance.isSecure()).isTrue(); + assertThat(instance.getUri()).isEqualTo(URI.create("https://host:8080")); + assertThat(instance.getMetadata()).isEqualTo(Map.of("a", "b")); + assertThat(instance.getScheme()).isEqualTo("https"); + assertThat(instance.getNamespace()).isEqualTo("spring-k8s"); + assertThat(instance.getCluster()).isEqualTo("cluster"); + } + + @Test + void schemeIsHttp() { + assertServiceInstance(false); + } + + @Test + void schemeIsHttps() { + assertServiceInstance(true); + } + + private DefaultKubernetesServiceInstance assertServiceInstance(boolean secure) { + DefaultKubernetesServiceInstance instance = new DefaultKubernetesServiceInstance("123", "myservice", "1.2.3.4", + 8080, Collections.emptyMap(), secure); + + assertThat(instance.getInstanceId()).isEqualTo("123"); + assertThat(instance.getServiceId()).isEqualTo("myservice"); + assertThat(instance.getHost()).isEqualTo("1.2.3.4"); + assertThat(instance.getPort()).isEqualTo(8080); + assertThat(instance.isSecure()).isEqualTo(secure); + assertThat(instance.getScheme()).isEqualTo(secure ? "https" : "http"); + return instance; + } + +} diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedConfigMapWatchChangeDetectorTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedConfigMapWatchChangeDetectorTests.java index dae0ad60..8ea4b56c 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedConfigMapWatchChangeDetectorTests.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedConfigMapWatchChangeDetectorTests.java @@ -48,7 +48,7 @@ import org.springframework.cloud.kubernetes.client.discovery.reactive.Kubernetes import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider; import org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadProperties; import org.springframework.cloud.kubernetes.commons.config.reload.ConfigurationUpdateStrategy; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.mock.env.MockEnvironment; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.web.reactive.function.client.WebClient; @@ -162,7 +162,7 @@ class HttpBasedConfigMapWatchChangeDetectorTests { V1EndpointPort fooEndpointPort = new V1EndpointPort(); fooEndpointPort.setPort(port); List instances = new ArrayList<>(); - KubernetesServiceInstance fooServiceInstance = new KubernetesServiceInstance("foo", "foo", + DefaultKubernetesServiceInstance fooServiceInstance = new DefaultKubernetesServiceInstance("foo", "foo", fooEndpointAddress.getIp(), fooEndpointPort.getPort(), metadata, false); instances.add(fooServiceInstance); when(reactiveDiscoveryClient.getInstances(eq("foo"))).thenReturn(Flux.fromIterable(instances)); @@ -187,7 +187,7 @@ class HttpBasedConfigMapWatchChangeDetectorTests { fooEndpointPort.setPort(WIRE_MOCK_SERVER.port()); List instances = new ArrayList<>(); - KubernetesServiceInstance fooServiceInstance = new KubernetesServiceInstance("foo", "foo", + DefaultKubernetesServiceInstance fooServiceInstance = new DefaultKubernetesServiceInstance("foo", "foo", fooEndpointAddress.getIp(), fooEndpointPort.getPort(), new HashMap<>(), false); instances.add(fooServiceInstance); when(reactiveDiscoveryClient.getInstances(eq("foo"))).thenReturn(Flux.fromIterable(instances)); diff --git a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedSecretsWatchChangeDetectorTests.java b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedSecretsWatchChangeDetectorTests.java index 210ee52a..f4813df3 100644 --- a/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedSecretsWatchChangeDetectorTests.java +++ b/spring-cloud-kubernetes-controllers/spring-cloud-kubernetes-configuration-watcher/src/test/java/org/springframework/cloud/kubernetes/configuration/watcher/HttpBasedSecretsWatchChangeDetectorTests.java @@ -48,7 +48,7 @@ import org.springframework.cloud.kubernetes.client.discovery.reactive.Kubernetes import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider; import org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadProperties; import org.springframework.cloud.kubernetes.commons.config.reload.ConfigurationUpdateStrategy; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.mock.env.MockEnvironment; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.web.reactive.function.client.WebClient; @@ -156,7 +156,7 @@ class HttpBasedSecretsWatchChangeDetectorTests { V1EndpointPort fooEndpointPort = new V1EndpointPort(); fooEndpointPort.setPort(WIRE_MOCK_SERVER.port()); List instances = new ArrayList<>(); - KubernetesServiceInstance fooServiceInstance = new KubernetesServiceInstance("foo", "foo", + DefaultKubernetesServiceInstance fooServiceInstance = new DefaultKubernetesServiceInstance("foo", "foo", fooEndpointAddress.getIp(), fooEndpointPort.getPort(), metadata, false); instances.add(fooServiceInstance); when(reactiveDiscoveryClient.getInstances(eq("foo"))).thenReturn(Flux.fromIterable(instances)); @@ -177,7 +177,7 @@ class HttpBasedSecretsWatchChangeDetectorTests { V1EndpointPort fooEndpointPort = new V1EndpointPort(); fooEndpointPort.setPort(WIRE_MOCK_SERVER.port()); List instances = new ArrayList<>(); - KubernetesServiceInstance fooServiceInstance = new KubernetesServiceInstance("foo", "foo", + DefaultKubernetesServiceInstance fooServiceInstance = new DefaultKubernetesServiceInstance("foo", "foo", fooEndpointAddress.getIp(), fooEndpointPort.getPort(), new HashMap<>(), false); instances.add(fooServiceInstance); when(reactiveDiscoveryClient.getInstances(eq("foo"))).thenReturn(Flux.fromIterable(instances)); diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClient.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClient.java index e36d9034..bd37ad0d 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClient.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClient.java @@ -34,8 +34,8 @@ import org.apache.commons.logging.LogFactory; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.expression.Expression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.SimpleEvaluationContext; @@ -178,7 +178,7 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { if (endpointAddress.getTargetRef() != null) { instanceId = endpointAddress.getTargetRef().getUid(); } - instances.add(new KubernetesServiceInstance(instanceId, serviceId, endpointAddress.getIp(), + instances.add(new DefaultKubernetesServiceInstance(instanceId, serviceId, endpointAddress.getIp(), endpointPort, endpointMetadata, this.servicePortSecureResolver.resolve(new ServicePortSecureResolver.Input(endpointPort, service.getMetadata().getName(), service.getMetadata().getLabels(), diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesServiceInstanceTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesServiceInstanceTests.java deleted file mode 100644 index 32087578..00000000 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesServiceInstanceTests.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2013-2020 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; - -import java.util.Collections; - -import io.fabric8.kubernetes.api.model.EndpointAddress; -import io.fabric8.kubernetes.api.model.EndpointPort; -import org.junit.Test; - -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; - -import static org.assertj.core.api.Assertions.assertThat; - -public class KubernetesServiceInstanceTests { - - @Test - public void schemeIsHttp() { - assertServiceInstance(false); - } - - private KubernetesServiceInstance assertServiceInstance(boolean secure) { - EndpointAddress address = new EndpointAddress(); - address.setIp("1.2.3.4"); - EndpointPort port = new EndpointPort(); - port.setPort(8080); - KubernetesServiceInstance instance = new KubernetesServiceInstance("123", "myservice", address.getIp(), - port.getPort(), Collections.emptyMap(), secure); - - assertThat(instance.getInstanceId()).isEqualTo("123"); - assertThat(instance.getServiceId()).isEqualTo("myservice"); - assertThat(instance.getHost()).isEqualTo("1.2.3.4"); - assertThat(instance.getPort()).isEqualTo(8080); - assertThat(instance.isSecure()).isEqualTo(secure); - assertThat(instance.getScheme()).isEqualTo(secure ? "https" : "http"); - return instance; - } - - @Test - public void schemeIsHttps() { - assertServiceInstance(true); - } - -} diff --git a/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapper.java b/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapper.java index 5fe0d5a1..2b3ac47f 100644 --- a/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapper.java +++ b/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapper.java @@ -26,6 +26,7 @@ import io.fabric8.kubernetes.api.model.Service; import io.fabric8.kubernetes.api.model.ServicePort; import io.fabric8.kubernetes.client.utils.Utils; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesLoadBalancerProperties; @@ -70,7 +71,7 @@ public class Fabric8ServiceInstanceMapper implements KubernetesServiceInstanceMa service.getMetadata().getNamespace(), properties.getClusterDomain()); final boolean secure = KubernetesServiceInstanceMapper.isSecure(service.getMetadata().getLabels(), service.getMetadata().getAnnotations(), port.getName(), port.getPort()); - return new KubernetesServiceInstance(meta.getUid(), meta.getName(), host, port.getPort(), + return new DefaultKubernetesServiceInstance(meta.getUid(), meta.getName(), host, port.getPort(), getServiceMetadata(service), secure); } diff --git a/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/KubernetesServiceListSupplierTests.java b/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/KubernetesServiceListSupplierTests.java index b3ce577a..3f73f86d 100644 --- a/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/KubernetesServiceListSupplierTests.java +++ b/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/KubernetesServiceListSupplierTests.java @@ -33,8 +33,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; -import org.springframework.cloud.kubernetes.commons.discovery.KubernetesServiceInstance; import org.springframework.cloud.kubernetes.commons.loadbalancer.KubernetesServicesListSupplier; import org.springframework.core.env.Environment; @@ -68,7 +68,8 @@ class KubernetesServiceListSupplierTests { @Test void testPositiveMatch() { when(environment.getProperty("loadbalancer.client.name")).thenReturn("test-service"); - when(mapper.map(any(Service.class))).thenReturn(new KubernetesServiceInstance("", "", "", 0, null, false)); + when(mapper.map(any(Service.class))) + .thenReturn(new DefaultKubernetesServiceInstance("", "", "", 0, null, false)); when(this.client.getNamespace()).thenReturn("test"); when(this.client.services()).thenReturn(this.serviceOperation); when(this.serviceOperation.inNamespace("test")).thenReturn(namespaceOperation); @@ -84,7 +85,8 @@ class KubernetesServiceListSupplierTests { @Test void testPositiveMatchAllNamespaces() { when(environment.getProperty("loadbalancer.client.name")).thenReturn("test-service"); - when(mapper.map(any(Service.class))).thenReturn(new KubernetesServiceInstance("", "", "", 0, null, false)); + when(mapper.map(any(Service.class))) + .thenReturn(new DefaultKubernetesServiceInstance("", "", "", 0, null, false)); when(this.client.services()).thenReturn(this.serviceOperation); when(this.serviceOperation.inAnyNamespace()).thenReturn(this.multiDeletable); when(this.multiDeletable.withField("metadata.name", "test-service")).thenReturn(this.multiDeletable);