From f335da672ccdeb42b638d040350157f2cb3ba23f Mon Sep 17 00:00:00 2001 From: Gytis Trikleris Date: Fri, 14 Dec 2018 17:19:38 +0100 Subject: [PATCH] Fix NPE when local leader is null (#297) --- .../leader/LeadershipController.java | 2 +- .../leader/LeadershipControllerTest.java | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java diff --git a/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java b/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java index a24a3be1..db94e50e 100644 --- a/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java +++ b/spring-cloud-kubernetes-leader/src/main/java/org/springframework/cloud/kubernetes/leader/LeadershipController.java @@ -68,7 +68,7 @@ public class LeadershipController { } public Optional getLocalLeader() { - return Optional.of(localLeader); + return Optional.ofNullable(localLeader); } public synchronized void update() { diff --git a/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java b/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java new file mode 100644 index 00000000..6a1bde2b --- /dev/null +++ b/spring-cloud-kubernetes-leader/src/test/java/org/springframework/cloud/kubernetes/leader/LeadershipControllerTest.java @@ -0,0 +1,62 @@ +/* + * Copyright 2013-2018 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 + * + * http://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.leader; + +import io.fabric8.kubernetes.client.KubernetesClient; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.integration.leader.Candidate; +import org.springframework.integration.leader.event.LeaderEventPublisher; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Gytis Trikleris + */ +@RunWith(MockitoJUnitRunner.class) +public class LeadershipControllerTest { + + @Mock + private Candidate mockCandidate; + + @Mock + private LeaderProperties mockLeaderProperties; + + @Mock + private LeaderEventPublisher mockLeaderEventPublisher; + + @Mock + private KubernetesClient mockKubernetesClient; + + private LeadershipController leadershipController; + + @Before + public void before() { + leadershipController = new LeadershipController(mockCandidate, mockLeaderProperties, mockLeaderEventPublisher, + mockKubernetesClient); + } + + @Test + public void shouldGetEmptyLocalLeader() { + assertThat(leadershipController.getLocalLeader().isPresent()).isFalse(); + } + +}