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));