From e877e3414688b899447d853d2b513aea1ce074c6 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Tue, 24 Nov 2020 14:00:31 -0500 Subject: [PATCH] Check for null in labels and annotations. Fixes #613 --- .../KubernetesServiceInstanceMapper.java | 21 +++++++----- .../KubernetesServiceInstanceMapperTests.java | 34 +++++++++++++++---- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/spring-cloud-kubernetes-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapper.java b/spring-cloud-kubernetes-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapper.java index cfe7bcef..f48eba99 100644 --- a/spring-cloud-kubernetes-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapper.java +++ b/spring-cloud-kubernetes-loadbalancer/src/main/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapper.java @@ -105,15 +105,20 @@ public class KubernetesServiceInstanceMapper { } private boolean isSecure(Service service, ServicePort port) { - final String securedLabelValue = service.getMetadata().getLabels() - .getOrDefault("secured", "false"); - if (securedLabelValue.equals("true")) { - return true; + if (service.getMetadata().getLabels() != null) { + final String securedLabelValue = service.getMetadata().getLabels() + .getOrDefault("secured", "false"); + if (securedLabelValue.equals("true")) { + return true; + } } - final String securedAnnotationValue = service.getMetadata().getAnnotations() - .getOrDefault("secured", "false"); - if (securedAnnotationValue.equals("true")) { - return true; + + if (service.getMetadata().getAnnotations() != null) { + final String securedAnnotationValue = service.getMetadata().getAnnotations() + .getOrDefault("secured", "false"); + if (securedAnnotationValue.equals("true")) { + return true; + } } return (port.getName() != null && port.getName().endsWith("https")) || port.getPort().toString().endsWith("443"); diff --git a/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapperTests.java b/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapperTests.java index c49d5187..4a799444 100644 --- a/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapperTests.java +++ b/spring-cloud-kubernetes-loadbalancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/KubernetesServiceInstanceMapperTests.java @@ -76,6 +76,21 @@ class KubernetesServiceInstanceMapperTests { Assertions.assertTrue(instance.isSecure()); } + @Test + void testMapperSecureNullLabelsAndAnnotations() { + KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); + KubernetesDiscoveryProperties discoveryProperties = new KubernetesDiscoveryProperties(); + List ports = new ArrayList<>(); + ports.add(new ServicePortBuilder().withPort(443).build()); + Service service = buildService("test", "abc", ports, null, null); + KubernetesServiceInstance instance = new KubernetesServiceInstanceMapper( + properties, discoveryProperties).map(service); + Assertions.assertNotNull(instance); + Assertions.assertEquals("test", instance.getServiceId()); + Assertions.assertEquals("abc", instance.getInstanceId()); + Assertions.assertTrue(instance.isSecure()); + } + @Test void testMapperSecureWithLabels() { KubernetesLoadBalancerProperties properties = new KubernetesLoadBalancerProperties(); @@ -93,13 +108,6 @@ class KubernetesServiceInstanceMapperTests { Assertions.assertEquals(2, instance.getMetadata().keySet().size()); } - private Service buildService(String name, String uid, List ports, - Map labels) { - return new ServiceBuilder().withNewMetadata().withName(name).withNewUid(uid) - .addToLabels(labels).addToAnnotations(new HashMap<>(0)).endMetadata() - .withNewSpec().addAllToPorts(ports).endSpec().build(); - } - private Service buildService(String name, String uid, int port, String portName, Map labels) { ServicePort servicePort = new ServicePortBuilder().withPort(port) @@ -107,4 +115,16 @@ class KubernetesServiceInstanceMapperTests { return buildService(name, uid, Collections.singletonList(servicePort), labels); } + private Service buildService(String name, String uid, List ports, + Map labels, Map annotations) { + return new ServiceBuilder().withNewMetadata().withName(name).withNewUid(uid) + .addToLabels(labels).withAnnotations(annotations).endMetadata() + .withNewSpec().addAllToPorts(ports).endSpec().build(); + } + + private Service buildService(String name, String uid, List ports, + Map labels) { + return buildService(name, uid, ports, labels, new HashMap<>(0)); + } + }