From 85d90ffada7eaa84ca0d626253eddfe045f246c2 Mon Sep 17 00:00:00 2001 From: erabii Date: Wed, 19 Oct 2022 16:55:22 +0300 Subject: [PATCH] Move KubernetesDiscoveryProperties to record (#1096) --- .../KubernetesInformerDiscoveryClient.java | 47 +++-- ...ubernetesInformerDiscoveryClientTests.java | 108 ++++------- ...sInformerReactiveDiscoveryClientTests.java | 25 +-- ...KubernetesClientServiceInstanceMapper.java | 2 +- .../KubernetesClientServicesListSupplier.java | 2 +- ...netesClientServiceInstanceMapperTests.java | 6 +- ...rnetesClientServicesListSupplierTests.java | 10 +- .../KubernetesDiscoveryProperties.java | 177 +++--------------- ...netesDiscoveryPropertiesMetadataTests.java | 6 +- .../KubernetesDiscoveryPropertiesTests.java | 102 ++++++++++ .../discovery/KubernetesCatalogWatch.java | 8 +- .../discovery/KubernetesDiscoveryClient.java | 23 ++- ...netesDiscoveryClientAutoConfiguration.java | 10 +- .../discovery/ServicePortSecureResolver.java | 2 +- .../discovery/KubernetesCatalogWatchTest.java | 127 ++++++------- ...etesDiscoveryClientFilterMetadataTest.java | 82 ++++---- .../KubernetesDiscoveryClientFilterTest.java | 43 ++--- .../KubernetesDiscoveryClientTest.java | 75 ++++---- .../ServicePortSecureResolverTest.java | 7 +- ...ubernetesReactiveDiscoveryClientTests.java | 50 ++--- .../Fabric8ServiceInstanceMapper.java | 2 +- .../Fabric8ServicesListSupplier.java | 2 +- ...ic8LoadBalancerAutoConfigurationTests.java | 11 +- .../Fabric8ServiceInstanceMapperTests.java | 24 ++- .../KubernetesServiceListSupplierTests.java | 8 +- 25 files changed, 441 insertions(+), 518 deletions(-) create mode 100644 spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesTests.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 47fd4708..cebb8084 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 @@ -94,11 +94,11 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi public List getInstances(String serviceId) { Assert.notNull(serviceId, "[Assertion failed] - the object argument must not be null"); - if (!StringUtils.hasText(namespace) && !properties.isAllNamespaces()) { + if (!StringUtils.hasText(namespace) && !properties.allNamespaces()) { log.warn("Namespace is null or empty, this may cause issues looking up services"); } - V1Service service = properties.isAllNamespaces() ? this.serviceLister.list().stream() + V1Service service = properties.allNamespaces() ? this.serviceLister.list().stream() .filter(svc -> serviceId.equals(svc.getMetadata().getName())).findFirst().orElse(null) : this.serviceLister.namespace(this.namespace).get(serviceId); if (service == null || !matchServiceLabels(service)) { @@ -107,20 +107,20 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi } Map svcMetadata = new HashMap<>(); - if (this.properties.getMetadata() != null) { - if (this.properties.getMetadata().addLabels()) { + if (this.properties.metadata() != null) { + if (this.properties.metadata().addLabels()) { if (service.getMetadata() != null && service.getMetadata().getLabels() != null) { - String labelPrefix = this.properties.getMetadata().labelsPrefix() != null - ? this.properties.getMetadata().labelsPrefix() : ""; + String labelPrefix = this.properties.metadata().labelsPrefix() != null + ? this.properties.metadata().labelsPrefix() : ""; service.getMetadata().getLabels().entrySet().stream() .filter(e -> e.getKey().startsWith(labelPrefix)) .forEach(e -> svcMetadata.put(e.getKey(), e.getValue())); } } - if (this.properties.getMetadata().addAnnotations()) { + if (this.properties.metadata().addAnnotations()) { if (service.getMetadata() != null && service.getMetadata().getAnnotations() != null) { - String annotationPrefix = this.properties.getMetadata().annotationsPrefix() != null - ? this.properties.getMetadata().annotationsPrefix() : ""; + String annotationPrefix = this.properties.metadata().annotationsPrefix() != null + ? this.properties.metadata().annotationsPrefix() : ""; service.getMetadata().getAnnotations().entrySet().stream() .filter(e -> e.getKey().startsWith(annotationPrefix)) .forEach(e -> svcMetadata.put(e.getKey(), e.getValue())); @@ -140,13 +140,13 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi discoveredPrimaryPortName = Optional .ofNullable(service.getMetadata().getLabels().get(PRIMARY_PORT_NAME_LABEL_KEY)); } - final String primaryPortName = discoveredPrimaryPortName.orElse(this.properties.getPrimaryPortName()); + final String primaryPortName = discoveredPrimaryPortName.orElse(this.properties.primaryPortName()); return ep.getSubsets().stream().filter(subset -> subset.getPorts() != null && subset.getPorts().size() > 0) // safeguard .flatMap(subset -> { Map metadata = new HashMap<>(svcMetadata); List endpointPorts = subset.getPorts(); - if (this.properties.getMetadata() != null && this.properties.getMetadata().addPorts()) { + if (this.properties.metadata() != null && this.properties.metadata().addPorts()) { endpointPorts.forEach( p -> metadata.put(StringUtils.hasText(p.getName()) ? p.getName() : UNSET_PORT_NAME, Integer.toString(p.getPort()))); @@ -155,7 +155,7 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi if (addresses == null) { addresses = new ArrayList<>(); } - if (this.properties.isIncludeNotReadyAddresses() + if (this.properties.includeNotReadyAddresses() && !CollectionUtils.isEmpty(subset.getNotReadyAddresses())) { addresses.addAll(subset.getNotReadyAddresses()); } @@ -205,7 +205,7 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi @Override public List getServices() { - List services = this.properties.isAllNamespaces() ? this.serviceLister.list() + List services = this.properties.allNamespaces() ? this.serviceLister.list() : this.serviceLister.namespace(this.namespace).list(); return services.stream().filter(this::matchServiceLabels).map(s -> s.getMetadata().getName()) .collect(Collectors.toList()); @@ -214,12 +214,11 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi @Override public void afterPropertiesSet() throws Exception { this.sharedInformerFactory.startAllRegisteredInformers(); - if (!Wait.poll(Duration.ofSeconds(1), Duration.ofSeconds(this.properties.getCacheLoadingTimeoutSeconds()), - () -> { - log.info("Waiting for the cache of informers to be fully loaded.."); - return this.informersReadyFunc.get(); - })) { - if (this.properties.isWaitCacheReady()) { + if (!Wait.poll(Duration.ofSeconds(1), Duration.ofSeconds(this.properties.cacheLoadingTimeoutSeconds()), () -> { + log.info("Waiting for the cache of informers to be fully loaded.."); + return this.informersReadyFunc.get(); + })) { + if (this.properties.waitCacheReady()) { throw new IllegalStateException( "Timeout waiting for informers cache to be ready, is the kubernetes service up?"); } @@ -235,8 +234,8 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi private boolean matchServiceLabels(V1Service service) { if (log.isDebugEnabled()) { log.debug("Kubernetes Service Label Properties:"); - if (this.properties.getServiceLabels() != null) { - this.properties.getServiceLabels().forEach((key, value) -> log.debug(key + ":" + value)); + if (this.properties.serviceLabels() != null) { + this.properties.serviceLabels().forEach((key, value) -> log.debug(key + ":" + value)); } log.debug("Service " + service.getMetadata().getName() + " labels:"); if (service.getMetadata() != null && service.getMetadata().getLabels() != null) { @@ -247,13 +246,13 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi if (service.getMetadata() == null) { return false; } - if (properties.getServiceLabels() == null || properties.getServiceLabels().isEmpty()) { + if (properties.serviceLabels() == null || properties.serviceLabels().isEmpty()) { return true; } - return properties.getServiceLabels().keySet().stream() + return properties.serviceLabels().keySet().stream() .allMatch(k -> service.getMetadata().getLabels() != null && service.getMetadata().getLabels().containsKey(k) - && service.getMetadata().getLabels().get(k).equals(properties.getServiceLabels().get(k))); + && service.getMetadata().getLabels().get(k).equals(properties.serviceLabels().get(k))); } } 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 9651dcf4..47d5da97 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 @@ -18,6 +18,7 @@ package org.springframework.cloud.kubernetes.client.discovery; import java.util.HashMap; import java.util.Map; +import java.util.Set; import io.kubernetes.client.informer.SharedInformerFactory; import io.kubernetes.client.informer.cache.Cache; @@ -39,9 +40,6 @@ import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesS import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class KubernetesInformerDiscoveryClientTests { @@ -49,9 +47,6 @@ public class KubernetesInformerDiscoveryClientTests { @Mock private SharedInformerFactory sharedInformerFactory; - @Mock - private KubernetesDiscoveryProperties kubernetesDiscoveryProperties; - private static final V1Service testService1 = new V1Service() .metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace1")) .spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus()); @@ -112,8 +107,8 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithUnsetPortName); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true); - when(kubernetesDiscoveryProperties.getMetadata()).thenReturn(KubernetesDiscoveryProperties.Metadata.DEFAULT); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true, + true, 60, false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); @@ -129,15 +124,12 @@ public class KubernetesInformerDiscoveryClientTests { public void testDiscoveryGetServicesAllNamespaceShouldWork() { Lister serviceLister = setupServiceLister(testService1, testService2); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true); - KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("", - sharedInformerFactory, serviceLister, null, null, null, kubernetesDiscoveryProperties); + sharedInformerFactory, serviceLister, null, null, null, KubernetesDiscoveryProperties.DEFAULT); assertThat(discoveryClient.getServices().toArray()).containsOnly(testService1.getMetadata().getName(), testService2.getMetadata().getName()); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test @@ -148,14 +140,14 @@ public class KubernetesInformerDiscoveryClientTests { labels.put("k8s", "true"); labels.put("spring", "true"); - when(kubernetesDiscoveryProperties.getServiceLabels()).thenReturn(labels); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true, + true, 60, false, null, Set.of(), labels, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("", sharedInformerFactory, serviceLister, null, null, null, kubernetesDiscoveryProperties); assertThat(discoveryClient.getServices().toArray()).containsOnly(testService3.getMetadata().getName()); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test @@ -167,8 +159,8 @@ public class KubernetesInformerDiscoveryClientTests { labels.put("k8s", "true"); labels.put("spring", "true"); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true); - when(kubernetesDiscoveryProperties.getServiceLabels()).thenReturn(labels); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true, + true, 60, false, null, Set.of(), labels, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); @@ -183,14 +175,11 @@ public class KubernetesInformerDiscoveryClientTests { public void testDiscoveryGetServicesOneNamespaceShouldWork() { Lister serviceLister = setupServiceLister(testService1, testService2); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", - sharedInformerFactory, serviceLister, null, null, null, kubernetesDiscoveryProperties); + sharedInformerFactory, serviceLister, null, null, null, KubernetesDiscoveryProperties.DEFAULT); assertThat(discoveryClient.getServices().toArray()).containsOnly(testService1.getMetadata().getName()); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test @@ -198,16 +187,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1, testService2); Lister endpointsLister = setupEndpointsLister(testEndpoints1); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); - verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); } @Test @@ -215,15 +202,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1, testService2); Lister endpointsLister = setupEndpointsLister(testEndpoints1); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); } @Test @@ -231,15 +217,11 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithoutReadyAddresses); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", - sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); + sharedInformerFactory, serviceLister, endpointsLister, null, null, + KubernetesDiscoveryProperties.DEFAULT); assertThat(discoveryClient.getInstances("test-svc-1")).isEmpty(); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); - verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName(); - verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses(); } @Test @@ -247,17 +229,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithoutReadyAddresses); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - when(kubernetesDiscoveryProperties.isIncludeNotReadyAddresses()).thenReturn(true); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, true, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); - verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses(); } @Test @@ -265,13 +244,11 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", - sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); + sharedInformerFactory, serviceLister, endpointsLister, null, null, + KubernetesDiscoveryProperties.DEFAULT); assertThat(discoveryClient.getInstances("test-svc-1")).isEmpty(); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test @@ -279,13 +256,11 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithoutPorts); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", - sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); + sharedInformerFactory, serviceLister, endpointsLister, null, null, + KubernetesDiscoveryProperties.DEFAULT); assertThat(discoveryClient.getInstances("test-svc-1")).isEmpty(); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test @@ -295,17 +270,14 @@ public class KubernetesInformerDiscoveryClientTests { .namespace("namespace1").putLabelsItem("primary-port-name", "https"))); Lister endpointsLister = setupEndpointsLister(testEndpointWithMultiplePorts); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); - verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses(); - // Reset metadata testService1.metadata(oldMetadata); } @@ -317,16 +289,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister endpointsLister = setupEndpointsLister( testEndpointWithMultiplePortsWithoutSupportedPortNames); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); - // Reset testService1 metadata testService1.metadata(oldMetadata); } @@ -335,17 +305,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithMultiplePorts); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - when(kubernetesDiscoveryProperties.getPrimaryPortName()).thenReturn("https"); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, "https", null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); - verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses(); } @Test @@ -354,16 +321,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister endpointsLister = setupEndpointsLister( testEndpointWithMultiplePortsWithoutSupportedPortNames); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - when(kubernetesDiscoveryProperties.getPrimaryPortName()).thenReturn("oops"); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, "oops", null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); } @Test @@ -371,15 +336,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithMultiplePorts); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); } @Test @@ -387,15 +351,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1); Lister endpointsLister = setupEndpointsLister(testEndpointWithMultiplePortsWithoutHttps); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); } @Test @@ -404,15 +367,14 @@ public class KubernetesInformerDiscoveryClientTests { Lister endpointsLister = setupEndpointsLister( testEndpointWithMultiplePortsWithoutSupportedPortNames); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1", sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties); 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(); } private Lister setupServiceLister(V1Service... services) { 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 e5cb50fb..33766130 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 @@ -17,6 +17,7 @@ package org.springframework.cloud.kubernetes.client.discovery.reactive; import java.util.HashMap; +import java.util.Set; import io.kubernetes.client.informer.SharedInformerFactory; import io.kubernetes.client.informer.cache.Cache; @@ -41,8 +42,6 @@ import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscover import org.springframework.mock.env.MockEnvironment; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** @@ -54,9 +53,6 @@ public class KubernetesInformerReactiveDiscoveryClientTests { @Mock private SharedInformerFactory sharedInformerFactory; - @Mock - private KubernetesDiscoveryProperties kubernetesDiscoveryProperties; - private static final V1Service testService1 = new V1Service() .metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace1")) .spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus()); @@ -74,35 +70,29 @@ public class KubernetesInformerReactiveDiscoveryClientTests { public void testDiscoveryGetServicesAllNamespaceShouldWork() { Lister serviceLister = setupServiceLister(testService1, testService2); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true); - KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient( new KubernetesNamespaceProvider(new MockEnvironment()), sharedInformerFactory, serviceLister, null, - null, null, kubernetesDiscoveryProperties); + null, null, KubernetesDiscoveryProperties.DEFAULT); StepVerifier.create(discoveryClient.getServices()) .expectNext(testService1.getMetadata().getName(), testService2.getMetadata().getName()).expectComplete() .verify(); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test public void testDiscoveryGetServicesOneNamespaceShouldWork() { Lister serviceLister = setupServiceLister(testService1, testService2); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); - KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class); when(kubernetesNamespaceProvider.getNamespace()).thenReturn("namespace1"); KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient( kubernetesNamespaceProvider, sharedInformerFactory, serviceLister, null, null, null, - kubernetesDiscoveryProperties); + KubernetesDiscoveryProperties.DEFAULT); StepVerifier.create(discoveryClient.getServices()).expectNext(testService1.getMetadata().getName()) .expectComplete().verify(); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } @Test @@ -110,7 +100,8 @@ public class KubernetesInformerReactiveDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1, testService2); Lister endpointsLister = setupEndpointsLister(testEndpoints1); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true, + true, 60, false, null, Set.of(), null, null, null, 0); KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient( new KubernetesNamespaceProvider(new MockEnvironment()), sharedInformerFactory, serviceLister, @@ -121,7 +112,6 @@ public class KubernetesInformerReactiveDiscoveryClientTests { "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)) .expectComplete().verify(); - verify(kubernetesDiscoveryProperties, times(2)).isAllNamespaces(); } @Test @@ -129,7 +119,9 @@ public class KubernetesInformerReactiveDiscoveryClientTests { Lister serviceLister = setupServiceLister(testService1, testService2); Lister endpointsLister = setupEndpointsLister(testEndpoints1); - when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false, + true, 60, false, null, Set.of(), null, null, null, 0); + KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class); when(kubernetesNamespaceProvider.getNamespace()).thenReturn("namespace1"); KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient( @@ -141,7 +133,6 @@ public class KubernetesInformerReactiveDiscoveryClientTests { "test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null)) .expectComplete().verify(); - verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces(); } private Lister setupServiceLister(V1Service... services) { 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 07bd330e..83c7e969 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 @@ -76,7 +76,7 @@ public class KubernetesClientServiceInstanceMapper implements KubernetesServiceI private Map getServiceMetadata(V1Service service) { final Map serviceMetadata = new HashMap<>(); - KubernetesDiscoveryProperties.Metadata metadataProps = this.discoveryProperties.getMetadata(); + KubernetesDiscoveryProperties.Metadata metadataProps = this.discoveryProperties.metadata(); if (metadataProps.addLabels()) { Map labelMetadata = KubernetesServiceInstanceMapper .getMapWithPrefixedKeys(service.getMetadata().getLabels(), metadataProps.labelsPrefix()); diff --git a/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplier.java b/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplier.java index 3510a185..c4522df9 100644 --- a/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplier.java +++ b/spring-cloud-kubernetes-client-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/client/loadbalancer/KubernetesClientServicesListSupplier.java @@ -66,7 +66,7 @@ public class KubernetesClientServicesListSupplier extends KubernetesServicesList List result = new ArrayList<>(); List services = null; try { - if (discoveryProperties.isAllNamespaces()) { + if (discoveryProperties.allNamespaces()) { services = coreV1Api.listServiceForAllNamespaces(null, null, "metadata.name=" + this.getServiceId(), null, null, null, null, null, null, null).getItems(); } 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 cddd2128..7f3118df 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 @@ -41,9 +41,8 @@ class KubernetesClientServiceInstanceMapperTests { @Test void basicMap() { KubernetesLoadBalancerProperties loadBalancerProperties = new KubernetesLoadBalancerProperties(); - KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(); KubernetesClientServiceInstanceMapper mapper = new KubernetesClientServiceInstanceMapper(loadBalancerProperties, - kubernetesDiscoveryProperties); + KubernetesDiscoveryProperties.DEFAULT); V1Service service = new V1ServiceBuilder() .withMetadata(new V1ObjectMetaBuilder().withName("database").withUid("0").withResourceVersion("0") @@ -66,9 +65,8 @@ class KubernetesClientServiceInstanceMapperTests { void multiportMap() { KubernetesLoadBalancerProperties loadBalancerProperties = new KubernetesLoadBalancerProperties(); loadBalancerProperties.setPortName("https"); - KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(); KubernetesClientServiceInstanceMapper mapper = new KubernetesClientServiceInstanceMapper(loadBalancerProperties, - kubernetesDiscoveryProperties); + KubernetesDiscoveryProperties.DEFAULT); V1Service service = new V1ServiceBuilder() .withMetadata(new V1ObjectMetaBuilder().withName("database").withUid("0").withResourceVersion("0") 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 c2d848be..fea9dc97 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 @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; @@ -116,12 +117,11 @@ class KubernetesClientServicesListSupplierTests { env.setProperty(LoadBalancerClientFactory.PROPERTY_NAME, "service1"); KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class); when(kubernetesNamespaceProvider.getNamespace()).thenReturn("default"); - KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(); CoreV1Api coreV1Api = new CoreV1Api(); KubernetesClientServiceInstanceMapper mapper = new KubernetesClientServiceInstanceMapper( - new KubernetesLoadBalancerProperties(), kubernetesDiscoveryProperties); + new KubernetesLoadBalancerProperties(), KubernetesDiscoveryProperties.DEFAULT); KubernetesClientServicesListSupplier listSupplier = new KubernetesClientServicesListSupplier(env, mapper, - kubernetesDiscoveryProperties, coreV1Api, kubernetesNamespaceProvider); + KubernetesDiscoveryProperties.DEFAULT, coreV1Api, kubernetesNamespaceProvider); stubFor(get(urlMatching("^/api/v1/namespaces/default/services.*")) .willReturn(aResponse().withStatus(200).withBody(new JSON().serialize(SERVICE_LIST)))); @@ -145,8 +145,8 @@ class KubernetesClientServicesListSupplierTests { env.setProperty(LoadBalancerClientFactory.PROPERTY_NAME, "service1"); KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class); when(kubernetesNamespaceProvider.getNamespace()).thenReturn("default"); - KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(); - kubernetesDiscoveryProperties.setAllNamespaces(true); + KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true, + true, 60, false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); CoreV1Api coreV1Api = new CoreV1Api(); KubernetesClientServiceInstanceMapper mapper = new KubernetesClientServiceInstanceMapper( new KubernetesLoadBalancerProperties(), kubernetesDiscoveryProperties); diff --git a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryProperties.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryProperties.java index 57b4b5be..075ee75b 100644 --- a/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryProperties.java +++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryProperties.java @@ -16,164 +16,49 @@ package org.springframework.cloud.kubernetes.commons.discovery; -import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.bind.DefaultValue; -import org.springframework.core.style.ToStringCreator; import static org.springframework.cloud.client.discovery.DiscoveryClient.DEFAULT_ORDER; +/** + * @param enabled if kubernetes discovery is enabled + * @param allNamespaces if discover is enabled for all namespaces + * @param waitCacheReady wait for the discovery cache (service and endpoints) to be fully + * loaded, otherwise aborts the application on starting + * @param cacheLoadingTimeoutSeconds timeout for initializing discovery cache, will abort + * the application if exceeded. + * @param includeNotReadyAddresses include as discovered if endpoint addresses is not + * marked with 'ready' by kubernetes + * @param filter SpEL expression to filter services after they have been retrieved from + * the Kubernetes API server. + * @param knownSecurePorts set of known secure ports + * @param serviceLabels if set, then only the services matching these labels will be + * fetched from the Kubernetes API server. + * @param primaryPortName If set then the port with a given name is used as primary when + * multiple ports are defined for a service. + */ +// @formatter:off @ConfigurationProperties("spring.cloud.kubernetes.discovery") -public class KubernetesDiscoveryProperties { - - /** If Kubernetes Discovery is enabled. */ - private boolean enabled = true; - - /** If discovering all namespaces. */ - private boolean allNamespaces = false; - - /* - * If wait for the discovery cache (service and endpoints) to be fully loaded, - * otherwise aborts the application on starting. - */ - private boolean waitCacheReady = true; +public record KubernetesDiscoveryProperties( + @DefaultValue("true") boolean enabled, boolean allNamespaces, + @DefaultValue("true") boolean waitCacheReady, + @DefaultValue("60") long cacheLoadingTimeoutSeconds, + boolean includeNotReadyAddresses, String filter, + @DefaultValue({"443", "8443"}) Set knownSecurePorts, + @DefaultValue Map serviceLabels, String primaryPortName, + @DefaultValue Metadata metadata, + @DefaultValue("" + DEFAULT_ORDER) int order) { +// @formatter:on /** - * Timeout for initializing discovery cache, will abort the application if exceeded. - **/ - private long cacheLoadingTimeoutSeconds = 60; - - /** - * If endpoint addresses not marked 'ready' by the k8s api server should be - * discovered. + * Default instance. */ - private boolean includeNotReadyAddresses = false; - - /** - * SpEL expression to filter services AFTER they have been retrieved from the - * Kubernetes API server. - */ - private String filter; - - /** Set the port numbers that are considered secure and use HTTPS. */ - private Set knownSecurePorts = Stream.of(443, 8443).collect(Collectors.toCollection(HashSet::new)); - - /** - * If set, then only the services matching these labels will be fetched from the - * Kubernetes API server. - */ - private Map serviceLabels = new HashMap<>(); - - /** - * If set then the port with a given name is used as primary when multiple ports are - * defined for a service. - */ - private String primaryPortName; - - private Metadata metadata = Metadata.DEFAULT; - - private int order = DEFAULT_ORDER; - - public boolean isEnabled() { - return this.enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public String getFilter() { - return this.filter; - } - - public void setFilter(String filter) { - this.filter = filter; - } - - public Set getKnownSecurePorts() { - return this.knownSecurePorts; - } - - public void setKnownSecurePorts(Set knownSecurePorts) { - this.knownSecurePorts = knownSecurePorts; - } - - public Map getServiceLabels() { - return this.serviceLabels; - } - - public void setServiceLabels(Map serviceLabels) { - this.serviceLabels = serviceLabels; - } - - public String getPrimaryPortName() { - return primaryPortName; - } - - public void setPrimaryPortName(String primaryPortName) { - this.primaryPortName = primaryPortName; - } - - public Metadata getMetadata() { - return this.metadata; - } - - public void setMetadata(Metadata metadata) { - this.metadata = metadata; - } - - public boolean isAllNamespaces() { - return allNamespaces; - } - - public void setAllNamespaces(boolean allNamespaces) { - this.allNamespaces = allNamespaces; - } - - public boolean isIncludeNotReadyAddresses() { - return includeNotReadyAddresses; - } - - public void setIncludeNotReadyAddresses(boolean includeNotReadyAddresses) { - this.includeNotReadyAddresses = includeNotReadyAddresses; - } - - public int getOrder() { - return this.order; - } - - public void setOrder(int order) { - this.order = order; - } - - public boolean isWaitCacheReady() { - return waitCacheReady; - } - - public void setWaitCacheReady(boolean waitCacheReady) { - this.waitCacheReady = waitCacheReady; - } - - public long getCacheLoadingTimeoutSeconds() { - return cacheLoadingTimeoutSeconds; - } - - public void setCacheLoadingTimeoutSeconds(long cacheLoadingTimeoutSeconds) { - this.cacheLoadingTimeoutSeconds = cacheLoadingTimeoutSeconds; - } - - @Override - public String toString() { - return new ToStringCreator(this).append("enabled", this.enabled).append("filter", this.filter) - .append("knownSecurePorts", this.knownSecurePorts).append("serviceLabels", this.serviceLabels) - .append("metadata", this.metadata).toString(); - } + public static final KubernetesDiscoveryProperties DEFAULT = new KubernetesDiscoveryProperties(true, false, true, 60, + false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); /** * @param addLabels include labels as metadata diff --git a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesMetadataTests.java b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesMetadataTests.java index 9b9bd825..b01f410a 100644 --- a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesMetadataTests.java +++ b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesMetadataTests.java @@ -48,9 +48,9 @@ class KubernetesDiscoveryPropertiesMetadataTests { .run(context -> { KubernetesDiscoveryProperties props = context.getBean(KubernetesDiscoveryProperties.class); assertThat(props).isNotNull(); - assertThat(props.getMetadata().labelsPrefix()).isEqualTo("labelsPrefix"); - assertThat(props.getMetadata().addPorts()).isTrue(); - assertThat(props.getMetadata().portsPrefix()).isEqualTo("port."); + assertThat(props.metadata().labelsPrefix()).isEqualTo("labelsPrefix"); + assertThat(props.metadata().addPorts()).isTrue(); + assertThat(props.metadata().portsPrefix()).isEqualTo("port."); }); } diff --git a/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesTests.java b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesTests.java new file mode 100644 index 00000000..15f96729 --- /dev/null +++ b/spring-cloud-kubernetes-commons/src/test/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesTests.java @@ -0,0 +1,102 @@ +/* + * 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.util.Set; + +import org.junit.jupiter.api.Test; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author wind57 + */ +class KubernetesDiscoveryPropertiesTests { + + @Test + void testBindingWhenNoPropertiesProvided() { + new ApplicationContextRunner().withUserConfiguration(KubernetesDiscoveryPropertiesMetadataTests.Config.class) + .run(context -> { + KubernetesDiscoveryProperties props = context.getBean(KubernetesDiscoveryProperties.class); + assertThat(props).isNotNull(); + assertThat(props.metadata().labelsPrefix()).isNull(); + assertThat(props.metadata().addPorts()).isTrue(); + assertThat(props.metadata().portsPrefix()).isEqualTo("port."); + + assertThat(props.enabled()).isTrue(); + assertThat(props.allNamespaces()).isFalse(); + assertThat(props.waitCacheReady()).isTrue(); + assertThat(props.cacheLoadingTimeoutSeconds()).isEqualTo(60); + assertThat(props.includeNotReadyAddresses()).isFalse(); + assertThat(props.filter()).isNull(); + assertThat(props.knownSecurePorts()).isEqualTo(Set.of(443, 8443)); + assertThat(props.serviceLabels()).isEmpty(); + assertThat(props.primaryPortName()).isNull(); + assertThat(props.order()).isZero(); + }); + } + + @Test + void testBindingWhenSomePropertiesProvided() { + new ApplicationContextRunner().withUserConfiguration(KubernetesDiscoveryPropertiesMetadataTests.Config.class) + .withPropertyValues("spring.cloud.kubernetes.discovery.filter=some-filter", + "spring.cloud.kubernetes.discovery.knownSecurePorts[0]=222", + "spring.cloud.kubernetes.discovery.metadata.labelsPrefix=labelsPrefix") + .run(context -> { + KubernetesDiscoveryProperties props = context.getBean(KubernetesDiscoveryProperties.class); + assertThat(props).isNotNull(); + assertThat(props.metadata().labelsPrefix()).isEqualTo("labelsPrefix"); + assertThat(props.metadata().addPorts()).isTrue(); + assertThat(props.metadata().portsPrefix()).isEqualTo("port."); + + assertThat(props.enabled()).isTrue(); + assertThat(props.allNamespaces()).isFalse(); + assertThat(props.waitCacheReady()).isTrue(); + assertThat(props.cacheLoadingTimeoutSeconds()).isEqualTo(60); + assertThat(props.includeNotReadyAddresses()).isFalse(); + assertThat(props.filter()).isEqualTo("some-filter"); + assertThat(props.knownSecurePorts()).isEqualTo(Set.of(222)); + assertThat(props.serviceLabels()).isEmpty(); + assertThat(props.primaryPortName()).isNull(); + assertThat(props.order()).isZero(); + }); + } + + // when we do not specify metadata, @DefaultValue is going to be picked up + @Test + void metadataSetToNotNull() { + new ApplicationContextRunner().withUserConfiguration(KubernetesDiscoveryPropertiesMetadataTests.Config.class) + .withPropertyValues("spring.cloud.kubernetes.discovery.filter=some-filter").run(context -> { + KubernetesDiscoveryProperties props = context.getBean(KubernetesDiscoveryProperties.class); + assertThat(props).isNotNull(); + assertThat(props.metadata().labelsPrefix()).isNull(); + assertThat(props.metadata().addPorts()).isTrue(); + assertThat(props.metadata().portsPrefix()).isEqualTo("port."); + }); + } + + @Configuration + @EnableConfigurationProperties(KubernetesDiscoveryProperties.class) + static class Config { + + } + +} diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatch.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatch.java index 2a543ec2..af890936 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatch.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatch.java @@ -68,10 +68,10 @@ public class KubernetesCatalogWatch implements ApplicationEventPublisherAware { // not all pods participate in the service discovery. only those that have // endpoints. - List endpoints = this.properties.isAllNamespaces() - ? this.kubernetesClient.endpoints().inAnyNamespace().withLabels(properties.getServiceLabels()) - .list().getItems() - : this.kubernetesClient.endpoints().withLabels(properties.getServiceLabels()).list().getItems(); + List endpoints = this.properties.allNamespaces() + ? this.kubernetesClient.endpoints().inAnyNamespace().withLabels(properties.serviceLabels()).list() + .getItems() + : this.kubernetesClient.endpoints().withLabels(properties.serviceLabels()).list().getItems(); List endpointsPodNames = endpoints.stream().map(Endpoints::getSubsets).filter(Objects::nonNull) .flatMap(Collection::stream).map(EndpointSubset::getAddresses).filter(Objects::nonNull) .flatMap(Collection::stream).map(EndpointAddress::getTargetRef).filter(Objects::nonNull) 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 6bdb3da4..8e20d859 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 @@ -121,11 +121,11 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { } public List getEndPointsList(String serviceId) { - return this.properties.isAllNamespaces() + return this.properties.allNamespaces() ? this.client.endpoints().inAnyNamespace().withField("metadata.name", serviceId) - .withLabels(properties.getServiceLabels()).list().getItems() - : this.client.endpoints().withField("metadata.name", serviceId) - .withLabels(properties.getServiceLabels()).list().getItems(); + .withLabels(properties.serviceLabels()).list().getItems() + : this.client.endpoints().withField("metadata.name", serviceId).withLabels(properties.serviceLabels()) + .list().getItems(); } private List getNamespaceServiceInstances(EndpointSubsetNS es, String serviceId) { @@ -135,9 +135,9 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { if (!subsets.isEmpty()) { final Service service = this.client.services().inNamespace(namespace).withName(serviceId).get(); final Map serviceMetadata = this.getServiceMetadata(service); - KubernetesDiscoveryProperties.Metadata metadataProps = this.properties.getMetadata(); + KubernetesDiscoveryProperties.Metadata metadataProps = this.properties.metadata(); - String primaryPortName = this.properties.getPrimaryPortName(); + String primaryPortName = this.properties.primaryPortName(); Map labels = service.getMetadata().getLabels(); if (labels != null && labels.containsKey(PRIMARY_PORT_NAME_LABEL_KEY)) { primaryPortName = labels.get(PRIMARY_PORT_NAME_LABEL_KEY); @@ -158,14 +158,13 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { endpointMetadata.putAll(portMetadata); } - if (this.properties.isAllNamespaces()) { + if (this.properties.allNamespaces()) { endpointMetadata.put(NAMESPACE_METADATA_KEY, namespace); } List addresses = s.getAddresses(); - if (this.properties.isIncludeNotReadyAddresses() - && !CollectionUtils.isEmpty(s.getNotReadyAddresses())) { + if (this.properties.includeNotReadyAddresses() && !CollectionUtils.isEmpty(s.getNotReadyAddresses())) { if (addresses == null) { addresses = new ArrayList<>(); } @@ -192,7 +191,7 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { private Map getServiceMetadata(Service service) { final Map serviceMetadata = new HashMap<>(); - KubernetesDiscoveryProperties.Metadata metadataProps = this.properties.getMetadata(); + KubernetesDiscoveryProperties.Metadata metadataProps = this.properties.metadata(); if (metadataProps.addLabels()) { Map labelMetadata = getMapWithPrefixedKeys(service.getMetadata().getLabels(), metadataProps.labelsPrefix()); @@ -279,7 +278,7 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { @Override public List getServices() { - String spelExpression = this.properties.getFilter(); + String spelExpression = this.properties.filter(); Predicate filteredServices; if (spelExpression == null || spelExpression.isEmpty()) { filteredServices = (Service instance) -> true; @@ -304,7 +303,7 @@ public class KubernetesDiscoveryClient implements DiscoveryClient { @Override public int getOrder() { - return this.properties.getOrder(); + return this.properties.order(); } } diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java index a112713c..a0c443c3 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java @@ -56,8 +56,8 @@ public class KubernetesDiscoveryClientAutoConfiguration { @Bean public KubernetesClientServicesFunction servicesFunction(KubernetesDiscoveryProperties properties) { - if (properties.getServiceLabels().isEmpty()) { - if (properties.isAllNamespaces()) { + if (properties.serviceLabels().isEmpty()) { + if (properties.allNamespaces()) { return (client) -> client.services().inAnyNamespace(); } else { @@ -65,11 +65,11 @@ public class KubernetesDiscoveryClientAutoConfiguration { } } else { - if (properties.isAllNamespaces()) { - return (client) -> client.services().inAnyNamespace().withLabels(properties.getServiceLabels()); + if (properties.allNamespaces()) { + return (client) -> client.services().inAnyNamespace().withLabels(properties.serviceLabels()); } else { - return (client) -> client.services().withLabels(properties.getServiceLabels()); + return (client) -> client.services().withLabels(properties.serviceLabels()); } } } diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolver.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolver.java index cd28cc3b..6c4ee336 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolver.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolver.java @@ -64,7 +64,7 @@ class ServicePortSecureResolver { return true; } - if (port != null && properties.getKnownSecurePorts().contains(port)) { + if (port != null && properties.knownSecurePorts().contains(port)) { logEntry(serviceName, port, "port is known to be a https port"); return true; } diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchTest.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchTest.java index c06a0fff..ed7b58f4 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchTest.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchTest.java @@ -34,8 +34,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; -import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.cloud.client.discovery.event.HeartbeatEvent; @@ -55,14 +55,10 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class KubernetesCatalogWatchTest { - @Mock - private KubernetesDiscoveryProperties properties; + private static final KubernetesClient CLIENT = Mockito.mock(KubernetesClient.class); - @Mock - private KubernetesClient kubernetesClient; - - @Mock - private KubernetesDiscoveryProperties kubernetesDiscoveryProperties; + private final KubernetesCatalogWatch kubernetesCatalogWatch = new KubernetesCatalogWatch(CLIENT, + KubernetesDiscoveryProperties.DEFAULT); @Mock private ApplicationEventPublisher applicationEventPublisher; @@ -73,12 +69,9 @@ public class KubernetesCatalogWatchTest { @Captor private ArgumentCaptor heartbeatEventArgumentCaptor; - @InjectMocks - private KubernetesCatalogWatch underTest; - @Before public void setUp() throws Exception { - this.underTest.setApplicationEventPublisher(this.applicationEventPublisher); + kubernetesCatalogWatch.setApplicationEventPublisher(this.applicationEventPublisher); } @Test @@ -86,12 +79,12 @@ public class KubernetesCatalogWatchTest { when(this.endpointsOperation.list()) .thenReturn(createSingleEndpointEndpointListByPodName("api-pod", "other-pod")) .thenReturn(createSingleEndpointEndpointListByPodName("other-pod", "api-pod")); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -101,14 +94,13 @@ public class KubernetesCatalogWatchTest { when(this.endpointsOperation.list()) .thenReturn(createSingleEndpointEndpointListByPodName("api-pod", "other-pod")) .thenReturn(createSingleEndpointEndpointListByPodName("other-pod", "api-pod")); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace().withLabels(anyMap())) - .thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -118,12 +110,12 @@ public class KubernetesCatalogWatchTest { when(this.endpointsOperation.list()) .thenReturn(createEndpointsListByServiceName("api-service", "other-service")) .thenReturn(createEndpointsListByServiceName("other-service", "api-service")); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -133,14 +125,13 @@ public class KubernetesCatalogWatchTest { when(this.endpointsOperation.list()) .thenReturn(createEndpointsListByServiceName("api-service", "other-service")) .thenReturn(createEndpointsListByServiceName("other-service", "api-service")); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace().withLabels(anyMap())) - .thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -149,10 +140,10 @@ public class KubernetesCatalogWatchTest { public void testEventBody() throws Exception { when(this.endpointsOperation.list()) .thenReturn(createSingleEndpointEndpointListByPodName("api-pod", "other-pod")); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(this.heartbeatEventArgumentCaptor.capture()); @@ -167,12 +158,11 @@ public class KubernetesCatalogWatchTest { public void testEventBodyAllNamespaces() throws Exception { when(this.endpointsOperation.list()) .thenReturn(createSingleEndpointEndpointListByPodName("api-pod", "other-pod")); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace().withLabels(anyMap())) - .thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(this.heartbeatEventArgumentCaptor.capture()); @@ -189,12 +179,12 @@ public class KubernetesCatalogWatchTest { EndpointsList endpoints = createSingleEndpointEndpointListWithoutSubsets(); when(this.endpointsOperation.list()).thenReturn(endpoints); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -205,14 +195,13 @@ public class KubernetesCatalogWatchTest { EndpointsList endpoints = createSingleEndpointEndpointListWithoutSubsets(); when(this.endpointsOperation.list()).thenReturn(endpoints); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace().withLabels(anyMap())) - .thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -224,12 +213,12 @@ public class KubernetesCatalogWatchTest { endpoints.getItems().get(0).getSubsets().get(0).setAddresses(null); when(this.endpointsOperation.list()).thenReturn(endpoints); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -241,14 +230,13 @@ public class KubernetesCatalogWatchTest { endpoints.getItems().get(0).getSubsets().get(0).setAddresses(null); when(this.endpointsOperation.list()).thenReturn(endpoints); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace().withLabels(anyMap())) - .thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -260,12 +248,12 @@ public class KubernetesCatalogWatchTest { endpoints.getItems().get(0).getSubsets().get(0).getAddresses().get(0).setTargetRef(null); when(this.endpointsOperation.list()).thenReturn(endpoints); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } @@ -277,14 +265,13 @@ public class KubernetesCatalogWatchTest { endpoints.getItems().get(0).getSubsets().get(0).getAddresses().get(0).setTargetRef(null); when(this.endpointsOperation.list()).thenReturn(endpoints); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); - when(this.kubernetesClient.endpoints().inAnyNamespace().withLabels(anyMap())) - .thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints().inAnyNamespace().withLabels(anyMap())).thenReturn(this.endpointsOperation); - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); // second execution on shuffleServices - this.underTest.catalogServicesWatch(); + kubernetesCatalogWatch.catalogServicesWatch(); verify(this.applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); } diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterMetadataTest.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterMetadataTest.java index acbdf0bb..773f28f5 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterMetadataTest.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientFilterMetadataTest.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import io.fabric8.kubernetes.api.model.EndpointPort; import io.fabric8.kubernetes.api.model.EndpointPortBuilder; @@ -40,8 +41,8 @@ import io.fabric8.kubernetes.client.dsl.ServiceResource; import org.assertj.core.util.Strings; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.cloud.client.ServiceInstance; @@ -59,14 +60,7 @@ import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesD @RunWith(MockitoJUnitRunner.class) public class KubernetesDiscoveryClientFilterMetadataTest { - @Mock - private KubernetesClient kubernetesClient; - - @Mock - private KubernetesDiscoveryProperties properties; - - @Mock - private ServicePortSecureResolver isServicePortSecureResolver; + private static final KubernetesClient CLIENT = Mockito.mock(KubernetesClient.class); @Mock private MixedOperation> serviceOperation; @@ -77,21 +71,18 @@ public class KubernetesDiscoveryClientFilterMetadataTest { @Mock private ServiceResource serviceResource; - @Mock - private Resource endpointsResource; - @Mock FilterWatchListDeletable filter; - @InjectMocks - private KubernetesDiscoveryClient underTest; - @Test public void testAllExtraMetadataDisabled() { final String serviceId = "s"; Metadata metadata = new Metadata(false, null, false, null, false, null); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -108,7 +99,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).isEmpty(); } @@ -118,7 +109,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(true, null, false, null, false, null); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -136,7 +130,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("l1", "v1"), entry("l2", "v2")); } @@ -146,7 +140,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(true, "l_", false, null, false, null); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -164,7 +161,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("l_l1", "v1"), entry("l_l2", "v2")); } @@ -174,7 +171,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(false, null, true, null, false, null); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -192,7 +192,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("a1", "v1"), entry("a2", "v2")); } @@ -202,7 +202,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(false, null, true, "a_", false, null); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -220,7 +223,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("a_a1", "v1"), entry("a_a2", "v2")); } @@ -230,7 +233,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(false, null, false, null, true, null); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -248,7 +254,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("http", "80")); } @@ -258,7 +264,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(false, null, false, null, true, "p_"); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -276,7 +285,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("p_http", "80")); } @@ -286,7 +295,10 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final String serviceId = "s"; Metadata metadata = new Metadata(true, "l_", true, "a_", true, "p_"); - when(this.properties.getMetadata()).thenReturn(metadata); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, null, + Set.of(), Map.of(), null, metadata, 0); + + KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(CLIENT, properties, a -> null); setupServiceWithLabelsAndAnnotationsAndPorts(serviceId, "ns", new HashMap() { { @@ -304,7 +316,7 @@ public class KubernetesDiscoveryClientFilterMetadataTest { } }); - final List instances = this.underTest.getInstances(serviceId); + final List instances = discoveryClient.getInstances(serviceId); assertThat(instances).hasSize(1); assertThat(instances.get(0).getMetadata()).containsOnly(entry("a_a1", "an1"), entry("a_a2", "an2"), entry("l_l1", "la1"), entry("p_http", "80")); @@ -317,8 +329,8 @@ public class KubernetesDiscoveryClientFilterMetadataTest { .build(); when(this.serviceOperation.withName(serviceId)).thenReturn(this.serviceResource); when(this.serviceResource.get()).thenReturn(service); - when(this.kubernetesClient.services()).thenReturn(this.serviceOperation); - when(this.kubernetesClient.services().inNamespace(anyString())).thenReturn(this.serviceOperation); + when(CLIENT.services()).thenReturn(this.serviceOperation); + when(CLIENT.services().inNamespace(anyString())).thenReturn(this.serviceOperation); ObjectMeta objectMeta = new ObjectMeta(); objectMeta.setNamespace(namespace); @@ -326,13 +338,13 @@ public class KubernetesDiscoveryClientFilterMetadataTest { final Endpoints endpoints = new EndpointsBuilder().withMetadata(objectMeta).addNewSubset() .addAllToPorts(getEndpointPorts(ports)).addNewAddress().endAddress().endSubset().build(); - when(this.kubernetesClient.endpoints()).thenReturn(this.endpointsOperation); + when(CLIENT.endpoints()).thenReturn(this.endpointsOperation); EndpointsList endpointsList = new EndpointsList(null, Collections.singletonList(endpoints), null, null); when(filter.list()).thenReturn(endpointsList); when(filter.withLabels(anyMap())).thenReturn(filter); - when(this.kubernetesClient.endpoints().withField(eq("metadata.name"), eq(serviceId))).thenReturn(filter); + when(CLIENT.endpoints().withField(eq("metadata.name"), eq(serviceId))).thenReturn(filter); } 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 281419c9..1f5b6d0c 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 @@ -19,6 +19,8 @@ package org.springframework.cloud.kubernetes.fabric8.discovery; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.Set; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.Service; @@ -26,7 +28,6 @@ import io.fabric8.kubernetes.api.model.ServiceList; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.ServiceResource; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -43,22 +44,11 @@ public class KubernetesDiscoveryClientFilterTest { @Mock private KubernetesClient kubernetesClient; - @Mock - private KubernetesDiscoveryProperties properties; - - private KubernetesClientServicesFunction kubernetesClientServicesFunction = KubernetesClient::services; + private final KubernetesClientServicesFunction kubernetesClientServicesFunction = KubernetesClient::services; @Mock private MixedOperation> serviceOperation; - private KubernetesDiscoveryClient underTest; - - @Before - public void setUp() { - this.underTest = new KubernetesDiscoveryClient(this.kubernetesClient, this.properties, - this.kubernetesClientServicesFunction); - } - @Test public void testFilteredServices() { List springBootServiceNames = Arrays.asList("serviceA", "serviceB"); @@ -76,11 +66,13 @@ public class KubernetesDiscoveryClientFilterTest { when(this.serviceOperation.list()).thenReturn(serviceList); when(this.kubernetesClient.services()).thenReturn(this.serviceOperation); - when(this.properties.getFilter()).thenReturn("metadata.additionalProperties['spring-boot']"); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, + "metadata.additionalProperties['spring-boot']", Set.of(), Map.of(), null, + KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); + KubernetesDiscoveryClient client = new KubernetesDiscoveryClient(this.kubernetesClient, properties, + this.kubernetesClientServicesFunction); - List filteredServices = this.underTest.getServices(); - - System.out.println("Filtered Services: " + filteredServices); + List filteredServices = client.getServices(); assertThat(filteredServices).isEqualTo(springBootServiceNames); } @@ -102,11 +94,13 @@ public class KubernetesDiscoveryClientFilterTest { when(this.serviceOperation.list()).thenReturn(serviceList); when(this.kubernetesClient.services()).thenReturn(this.serviceOperation); - when(this.properties.getFilter()).thenReturn("metadata.name.startsWith('service')"); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, + "metadata.name.startsWith('service')", Set.of(), Map.of(), null, + KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); + KubernetesDiscoveryClient client = new KubernetesDiscoveryClient(this.kubernetesClient, properties, + this.kubernetesClientServicesFunction); - List filteredServices = this.underTest.getServices(); - - System.out.println("Filtered Services: " + filteredServices); + List filteredServices = client.getServices(); assertThat(filteredServices).isEqualTo(springBootServiceNames); } @@ -121,9 +115,12 @@ public class KubernetesDiscoveryClientFilterTest { when(this.serviceOperation.list()).thenReturn(serviceList); when(this.kubernetesClient.services()).thenReturn(this.serviceOperation); - when(this.properties.getFilter()).thenReturn(""); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, "", + Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); + KubernetesDiscoveryClient client = new KubernetesDiscoveryClient(this.kubernetesClient, properties, + this.kubernetesClientServicesFunction); - List filteredServices = this.underTest.getServices(); + List filteredServices = client.getServices(); System.out.println("Filtered Services: " + filteredServices); assertThat(filteredServices).isEqualTo(springBootServiceNames); diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientTest.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientTest.java index 28fc292f..08447fb3 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientTest.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientTest.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import io.fabric8.kubernetes.api.model.Endpoints; import io.fabric8.kubernetes.api.model.EndpointsBuilder; @@ -81,13 +82,9 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - Metadata metadata = new Metadata(false, null, false, null, true, "port."); - properties.setServiceLabels(labels); - properties.setMetadata(metadata); - - final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, - KubernetesClient::services, new ServicePortSecureResolver(properties)); + final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services, + new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT)); final List instances = discoveryClient.getInstances("endpoint"); @@ -112,8 +109,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setPrimaryPortName("http_tcp"); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, false, + null, Set.of(), labels, "http_tcp", Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -137,11 +134,9 @@ public class KubernetesDiscoveryClientTest { mockClient.endpoints().inNamespace("test").create(endPoint); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setServiceLabels(labels); - - final KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, - KubernetesClient::services, new ServicePortSecureResolver(properties)); + final KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services, + new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT)); final List result_endpoints = discoveryClient.getEndPointsList("endpoint"); @@ -166,10 +161,9 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setServiceLabels(labels); Metadata metadata = new Metadata(false, null, false, null, true, "port."); - properties.setMetadata(metadata); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, false, + null, Set.of(443, 8443), labels, null, metadata, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -195,14 +189,13 @@ public class KubernetesDiscoveryClientTest { Service service3 = new ServiceBuilder().withNewMetadata().withName("s3").withNamespace("test").endMetadata() .build(); - mockClient.services().inNamespace("test").create(service1); mockClient.services().inNamespace("test").create(service2); mockClient.services().inNamespace("test").create(service3); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, - KubernetesClient::services, new ServicePortSecureResolver(properties)); + final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services, + new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT)); final List services = discoveryClient.getServices(); @@ -225,10 +218,10 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service1); mockClient.services().inNamespace("test").create(service2); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, + final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, + KubernetesDiscoveryProperties.DEFAULT, client -> client.services().withLabels(Collections.singletonMap("label", "value")), - new ServicePortSecureResolver(properties)); + new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT)); final List services = discoveryClient.getServices(); @@ -257,8 +250,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service1); mockClient.services().inNamespace("test2").create(service2); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setAllNamespaces(true); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, false, + null, Set.of(), Map.of(), null, Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -283,10 +276,9 @@ public class KubernetesDiscoveryClientTest { mockClient.endpoints().inNamespace("test").create(endPoint); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - - final KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, - KubernetesClient::services, new ServicePortSecureResolver(properties)); + final KubernetesDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services, + new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT)); final List instances = discoveryClient.getInstances("endpoint1"); @@ -310,7 +302,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, false, + null, Set.of(443, 8443), Map.of(), null, Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -340,7 +333,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, + null, Set.of(443, 8443), Map.of(), null, Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -369,8 +363,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setPrimaryPortName("oops"); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, + null, Set.of(443, 8443), Map.of(), "oops", Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -398,7 +392,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, false, true, 60, false, + null, Set.of(443, 8443), Map.of(), null, Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); @@ -427,10 +422,9 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - - final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, - KubernetesClient::services, new ServicePortSecureResolver(properties)); + final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services, + new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT)); final List instances = discoveryClient.getInstances("endpoint5"); @@ -455,7 +449,8 @@ public class KubernetesDiscoveryClientTest { mockClient.services().inNamespace("test").create(service); - final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); + final KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, true, + null, Set.of(443, 8443), Map.of(), null, Metadata.DEFAULT, 0); final DiscoveryClient discoveryClient = new KubernetesDiscoveryClient(mockClient, properties, KubernetesClient::services, new ServicePortSecureResolver(properties)); diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolverTest.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolverTest.java index b2d29c82..c67bda6c 100644 --- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolverTest.java +++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/ServicePortSecureResolverTest.java @@ -18,6 +18,7 @@ package org.springframework.cloud.kubernetes.fabric8.discovery; import java.util.Collections; import java.util.Map; +import java.util.Set; import org.junit.Test; @@ -49,8 +50,8 @@ public class ServicePortSecureResolverTest { @Test public void testPortNumbersOnly() { - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.getKnownSecurePorts().add(12345); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, false, null, + Set.of(443, 8443, 12345), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); ServicePortSecureResolver secureResolver = new ServicePortSecureResolver(properties); @@ -65,7 +66,7 @@ public class ServicePortSecureResolverTest { @Test public void testLabelsAndAnnotations() { - ServicePortSecureResolver secureResolver = new ServicePortSecureResolver(new KubernetesDiscoveryProperties()); + ServicePortSecureResolver secureResolver = new ServicePortSecureResolver(KubernetesDiscoveryProperties.DEFAULT); assertThat(secureResolver.resolve(SECURED_TRUE)).isTrue(); assertThat(secureResolver.resolve(SECURED_1)).isTrue(); 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 a4365045..4f39cb47 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 @@ -19,6 +19,8 @@ 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; import io.fabric8.kubernetes.api.model.Endpoints; import io.fabric8.kubernetes.api.model.EndpointsBuilder; @@ -63,9 +65,8 @@ class KubernetesReactiveDiscoveryClientTests { @Test public void verifyDefaults(@KubernetesExtension.Client KubernetesClient kubernetesClient) { - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); assertThat(client.description()).isEqualTo("Kubernetes Reactive Discovery Client"); assertThat(client.getOrder()).isEqualTo(ReactiveDiscoveryClient.DEFAULT_ORDER); } @@ -88,10 +89,8 @@ class KubernetesReactiveDiscoveryClientTests { }).endMetadata().endItem().addNewItem().withNewMetadata().withName("s3").endMetadata().endItem() .build()) .once(); - - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux services = client.getServices(); StepVerifier.create(services).expectNext("s1", "s2", "s3").expectComplete().verify(); } @@ -103,9 +102,8 @@ class KubernetesReactiveDiscoveryClientTests { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services") .andReturn(200, new ServiceListBuilder().build()).once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux services = client.getServices(); StepVerifier.create(services).expectNextCount(0).expectComplete().verify(); } @@ -118,9 +116,8 @@ class KubernetesReactiveDiscoveryClientTests { .withPath("/api/v1/namespaces/test/endpoints?fieldSelector=metadata.name%3Dnonexistent-service") .andReturn(200, new EndpointsBuilder().build()).once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux instances = client.getInstances("nonexistent-service"); StepVerifier.create(instances).expectNextCount(0).expectComplete().verify(); } @@ -142,9 +139,8 @@ class KubernetesReactiveDiscoveryClientTests { .withPath("/api/v1/namespaces/test/endpoints?fieldSelector=metadata.name%3Dexisting-service") .andReturn(200, new EndpointsBuilder().build()).once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux instances = client.getInstances("existing-service"); StepVerifier.create(instances).expectNextCount(0).expectComplete().verify(); } @@ -180,11 +176,9 @@ class KubernetesReactiveDiscoveryClientTests { kubernetesServer.expect().get().withPath("/api/v1/namespaces/test/services/existing-service") .andReturn(200, services.getItems().get(0)).once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); Metadata metadata = new Metadata(false, null, false, null, true, "port."); - properties.setMetadata(metadata); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux instances = client.getInstances("existing-service"); StepVerifier.create(instances).expectNextCount(1).expectComplete().verify(); } @@ -224,11 +218,9 @@ class KubernetesReactiveDiscoveryClientTests { }).endMetadata().build()) .once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); Metadata metadata = new Metadata(true, "label.", true, "annotation.", true, "port."); - properties.setMetadata(metadata); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux instances = client.getInstances("existing-service"); StepVerifier.create(instances).expectNextCount(1).expectComplete().verify(); } @@ -270,10 +262,8 @@ class KubernetesReactiveDiscoveryClientTests { }).endMetadata().build()) .once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setPrimaryPortName("https_tcp"); - ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, - KubernetesClient::services); + ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, + KubernetesDiscoveryProperties.DEFAULT, KubernetesClient::services); Flux instances = client.getInstances("existing-service"); StepVerifier.create(instances).expectNextCount(1).expectComplete().verify(); } @@ -311,8 +301,8 @@ class KubernetesReactiveDiscoveryClientTests { }).endMetadata().build()) .once(); - KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(); - properties.setAllNamespaces(true); + KubernetesDiscoveryProperties properties = new KubernetesDiscoveryProperties(true, true, true, 60, false, null, + Set.of(), Map.of(), "https_tcp", Metadata.DEFAULT, 0); ReactiveDiscoveryClient client = new KubernetesReactiveDiscoveryClient(kubernetesClient, properties, KubernetesClient::services); Flux instances = client.getInstances("existing-service"); 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 8ca53c99..1fb1948e 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 @@ -77,7 +77,7 @@ public class Fabric8ServiceInstanceMapper implements KubernetesServiceInstanceMa private Map getServiceMetadata(Service service) { final Map serviceMetadata = new HashMap<>(); - KubernetesDiscoveryProperties.Metadata metadataProps = this.discoveryProperties.getMetadata(); + KubernetesDiscoveryProperties.Metadata metadataProps = this.discoveryProperties.metadata(); if (metadataProps.addLabels()) { Map labelMetadata = KubernetesServiceInstanceMapper .getMapWithPrefixedKeys(service.getMetadata().getLabels(), metadataProps.labelsPrefix()); diff --git a/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServicesListSupplier.java b/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServicesListSupplier.java index c71b0c9e..00e0a6fe 100644 --- a/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServicesListSupplier.java +++ b/spring-cloud-kubernetes-fabric8-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServicesListSupplier.java @@ -49,7 +49,7 @@ public class Fabric8ServicesListSupplier extends KubernetesServicesListSupplier @Override public Flux> get() { List result = new ArrayList<>(); - if (discoveryProperties.isAllNamespaces()) { + if (discoveryProperties.allNamespaces()) { List services = this.kubernetesClient.services().inAnyNamespace() .withField("metadata.name", this.getServiceId()).list().getItems(); services.forEach(service -> result.add(mapper.map(service))); diff --git a/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerAutoConfigurationTests.java b/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerAutoConfigurationTests.java index df1ae00f..52bc6bdf 100644 --- a/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerAutoConfigurationTests.java +++ b/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8LoadBalancerAutoConfigurationTests.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties; import org.springframework.context.ConfigurableApplicationContext; @@ -70,9 +71,13 @@ class Fabric8LoadBalancerAutoConfigurationTests { } private void setup(String... env) { - this.context = new SpringApplicationBuilder(Fabric8LoadBalancerAutoConfiguration.class, - KubernetesDiscoveryProperties.class).web(org.springframework.boot.WebApplicationType.NONE) - .properties(env).run(); + this.context = new SpringApplicationBuilder(Fabric8LoadBalancerAutoConfiguration.class, Config.class) + .web(org.springframework.boot.WebApplicationType.NONE).properties(env).run(); + } + + @EnableConfigurationProperties(KubernetesDiscoveryProperties.class) + static class Config { + } } diff --git a/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapperTests.java b/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapperTests.java index a0fe172d..f02550a0 100644 --- a/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapperTests.java +++ b/spring-cloud-kubernetes-fabric8-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/fabric8/loadbalancer/Fabric8ServiceInstanceMapperTests.java @@ -21,6 +21,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import io.fabric8.kubernetes.api.model.Service; import io.fabric8.kubernetes.api.model.ServiceBuilder; @@ -38,10 +39,9 @@ class Fabric8ServiceInstanceMapperTests { @Test public void testMapperSimple() { KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); - KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); Service service = buildService("test", "abc", 8080, null, new HashMap<>()); - KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, discoveryProperties) - .map(service); + KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, + KubernetesDiscoveryProperties.DEFAULT).map(service); Assertions.assertNotNull(instance); Assertions.assertEquals("test", instance.getServiceId()); Assertions.assertEquals("abc", instance.getInstanceId()); @@ -51,13 +51,12 @@ class Fabric8ServiceInstanceMapperTests { void testMapperMultiplePorts() { KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); properties.setPortName("http"); - KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); List ports = new ArrayList<>(); ports.add(new ServicePortBuilder().withPort(8080).withName("web").build()); ports.add(new ServicePortBuilder().withPort(9000).withName("http").build()); Service service = buildService("test", "abc", ports, new HashMap<>()); - KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, discoveryProperties) - .map(service); + KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, + KubernetesDiscoveryProperties.DEFAULT).map(service); Assertions.assertNotNull(instance); Assertions.assertEquals("test", instance.getServiceId()); Assertions.assertEquals("abc", instance.getInstanceId()); @@ -67,10 +66,9 @@ class Fabric8ServiceInstanceMapperTests { @Test void testMapperSecure() { KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); - KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); Service service = buildService("test", "abc", 443, null, new HashMap<>()); - KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, discoveryProperties) - .map(service); + KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, + KubernetesDiscoveryProperties.DEFAULT).map(service); Assertions.assertNotNull(instance); Assertions.assertEquals("test", instance.getServiceId()); Assertions.assertEquals("abc", instance.getInstanceId()); @@ -80,7 +78,8 @@ class Fabric8ServiceInstanceMapperTests { @Test void testMapperSecureNullLabelsAndAnnotations() { KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); - KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); + KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(true, true, true, 60, + false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); List ports = new ArrayList<>(); ports.add(new ServicePortBuilder().withPort(443).build()); Service service = buildService("test", "abc", ports, null, null); @@ -95,13 +94,12 @@ class Fabric8ServiceInstanceMapperTests { @Test void testMapperSecureWithLabels() { KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); - KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); HashMap labels = new HashMap<>(); labels.put("secured", "true"); labels.put("label1", "123"); Service service = buildService("test", "abc", 8080, null, labels); - KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, discoveryProperties) - .map(service); + KubernetesServiceInstance instance = new Fabric8ServiceInstanceMapper(properties, + KubernetesDiscoveryProperties.DEFAULT).map(service); Assertions.assertNotNull(instance); Assertions.assertEquals("test", instance.getServiceId()); Assertions.assertEquals("abc", instance.getInstanceId()); 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 3f73f86d..75d2ace5 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 @@ -17,6 +17,8 @@ package org.springframework.cloud.kubernetes.fabric8.loadbalancer; import java.util.List; +import java.util.Map; +import java.util.Set; import io.fabric8.kubernetes.api.model.Service; import io.fabric8.kubernetes.api.model.ServiceBuilder; @@ -76,7 +78,7 @@ class KubernetesServiceListSupplierTests { when(this.namespaceOperation.withName("test-service")).thenReturn(this.serviceResource); when(this.serviceResource.get()).thenReturn(buildService("test-service", 8080)); KubernetesServicesListSupplier supplier = new Fabric8ServicesListSupplier(environment, client, mapper, - new KubernetesDiscoveryProperties()); + KubernetesDiscoveryProperties.DEFAULT); List instances = supplier.get().blockFirst(); assert instances != null; Assertions.assertEquals(1, instances.size()); @@ -93,8 +95,8 @@ class KubernetesServiceListSupplierTests { ServiceList serviceList = new ServiceList(); serviceList.getItems().add(buildService("test-service", 8080)); when(this.multiDeletable.list()).thenReturn(serviceList); - KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); - discoveryProperties.setAllNamespaces(true); + KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(true, true, true, 60, + false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0); KubernetesServicesListSupplier supplier = new Fabric8ServicesListSupplier(environment, client, mapper, discoveryProperties); List instances = supplier.get().blockFirst();