From 0aae2cb68c84107830ee40b21c3da51a8ad58746 Mon Sep 17 00:00:00 2001 From: Roberto Tassi Date: Mon, 17 Sep 2018 21:57:05 +0200 Subject: [PATCH] 238: Fix issue with nullable subsets in endpoints (#239) --- .../discovery/KubernetesCatalogWatch.java | 4 +++- .../discovery/KubernetesCatalogWatchTest.java | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatch.java b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatch.java index 2bf08a77..b415a037 100644 --- a/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatch.java +++ b/spring-cloud-kubernetes-discovery/src/main/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatch.java @@ -66,7 +66,9 @@ public class KubernetesCatalogWatch implements ApplicationEventPublisherAware { List endpoints = kubernetesClient.endpoints().list().getItems(); List endpointsPodNames = endpoints.stream() - .flatMap(endpoint -> endpoint.getSubsets().stream()) + .map(Endpoints::getSubsets) + .filter(Objects::nonNull) + .flatMap(Collection::stream) .map(EndpointSubset::getAddresses) .filter(Objects::nonNull) .flatMap(Collection::stream) diff --git a/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatchTest.java b/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatchTest.java index 1f6b126c..4ab34de9 100644 --- a/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatchTest.java +++ b/spring-cloud-kubernetes-discovery/src/test/java/org/springframework/cloud/kubernetes/discovery/KubernetesCatalogWatchTest.java @@ -114,6 +114,21 @@ public class KubernetesCatalogWatchTest { assertEquals(expectedPodsList, event.getValue()); } + @Test + public void testEndpointsWithoutSubsets() { + + EndpointsList endpoints = createSingleEndpointEndpointListWithoutSubsets(); + + when(endpointsOperation.list()).thenReturn(endpoints); + when(kubernetesClient.endpoints()).thenReturn(endpointsOperation); + + underTest.catalogServicesWatch(); + // second execution on shuffleServices + underTest.catalogServicesWatch(); + + verify(applicationEventPublisher).publishEvent(any(HeartbeatEvent.class)); + } + @Test public void testEndpointsWithoutAddresses() { @@ -157,6 +172,14 @@ public class KubernetesCatalogWatchTest { return endpointsList; } + private EndpointsList createSingleEndpointEndpointListWithoutSubsets() { + Endpoints endpoints = new Endpoints(); + + EndpointsList endpointsList = new EndpointsList(); + endpointsList.setItems(Collections.singletonList(endpoints)); + return endpointsList; + } + private EndpointsList createSingleEndpointEndpointListByPodName(String... podNames) { Endpoints endpoints = new Endpoints(); endpoints.setSubsets(createSubsetsByPodName(podNames));