diff --git a/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicator.java b/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicator.java index 487ea37a..70e132b1 100644 --- a/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicator.java +++ b/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicator.java @@ -16,43 +16,44 @@ package org.springframework.cloud.kubernetes.client; -import java.util.HashMap; +import java.util.Collections; import java.util.Map; import io.kubernetes.client.openapi.models.V1Pod; import org.springframework.cloud.kubernetes.commons.AbstractKubernetesHealthIndicator; import org.springframework.cloud.kubernetes.commons.PodUtils; +import org.springframework.util.CollectionUtils; /** * @author Ryan Baxter */ public class KubernetesClientHealthIndicator extends AbstractKubernetesHealthIndicator { - private PodUtils utils; + private final PodUtils utils; public KubernetesClientHealthIndicator(PodUtils utils) { this.utils = utils; } @Override - protected Map getDetails() throws Exception { - Map details = new HashMap<>(); + protected Map getDetails() { V1Pod current = this.utils.currentPod().get(); if (current != null) { + Map details = CollectionUtils.newHashMap(8); details.put(INSIDE, true); details.put(NAMESPACE, current.getMetadata().getNamespace()); details.put(POD_NAME, current.getMetadata().getName()); + details.put(LABELS, current.getMetadata().getLabels()); details.put(POD_IP, current.getStatus().getPodIP()); + details.put(HOST_IP, current.getStatus().getHostIP()); details.put(SERVICE_ACCOUNT, current.getSpec().getServiceAccountName()); details.put(NODE_NAME, current.getSpec().getNodeName()); - details.put(HOST_IP, current.getStatus().getHostIP()); - details.put(LABELS, current.getMetadata().getLabels()); + return details; } else { - details.put(INSIDE, false); + return Collections.singletonMap(INSIDE, false); } - return details; } } diff --git a/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributor.java b/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributor.java index 13a31479..cb430393 100644 --- a/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributor.java +++ b/spring-cloud-kubernetes-client-autoconfig/src/main/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributor.java @@ -16,20 +16,21 @@ package org.springframework.cloud.kubernetes.client; -import java.util.HashMap; +import java.util.Collections; import java.util.Map; import io.kubernetes.client.openapi.models.V1Pod; import org.springframework.cloud.kubernetes.commons.AbstractKubernetesInfoContributor; import org.springframework.cloud.kubernetes.commons.PodUtils; +import org.springframework.util.CollectionUtils; /** * @author Ryan Baxter */ public class KubernetesClientInfoContributor extends AbstractKubernetesInfoContributor { - private PodUtils utils; + private final PodUtils utils; public KubernetesClientInfoContributor(PodUtils utils) { this.utils = utils; @@ -38,18 +39,18 @@ public class KubernetesClientInfoContributor extends AbstractKubernetesInfoContr @Override public Map getDetails() { V1Pod current = this.utils.currentPod().get(); - Map details = new HashMap<>(); - boolean inside = current != null; - details.put(INSIDE, inside); - if (inside) { + if (current != null) { + Map details = CollectionUtils.newHashMap(7); + details.put(INSIDE, true); details.put(NAMESPACE, current.getMetadata().getNamespace()); details.put(POD_NAME, current.getMetadata().getName()); - details.put(POD_IP, current.getStatus().getPodIP()); details.put(SERVICE_ACCOUNT, current.getSpec().getServiceAccountName()); details.put(NODE_NAME, current.getSpec().getNodeName()); + details.put(POD_IP, current.getStatus().getPodIP()); details.put(HOST_IP, current.getStatus().getHostIP()); + return details; } - return details; + return Collections.singletonMap(INSIDE, false); } } diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorInsideTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorInsideTests.java new file mode 100644 index 00000000..ce750c0b --- /dev/null +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorInsideTests.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2020 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.client; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.kubernetes.client.example.App; +import org.springframework.context.ApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author wind57 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class) +public class KubernetesClientHealthIndicatorInsideTests { + + @Autowired + private ApplicationContext context; + + // test that the bean responsible for health is present. + // the actual fields it must provide are tested in + // KubernetesClientHealthIndicatorTests. + @Test + public void test() { + assertThat(context.getBean(KubernetesClientHealthIndicator.class)).isNotNull(); + } + +} diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorNotInsideTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorNotInsideTests.java new file mode 100644 index 00000000..ac29de59 --- /dev/null +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorNotInsideTests.java @@ -0,0 +1,46 @@ +/* + * Copyright 2013-2020 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.client; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.kubernetes.client.example.App; +import org.springframework.context.ApplicationContext; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +/** + * @author wind57 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, + properties = { "management.health.kubernetes.enabled=false" }) +public class KubernetesClientHealthIndicatorNotInsideTests { + + @Autowired + private ApplicationContext context; + + // test that the bean responsible for info contribution is NOT present. + @Test + public void test() { + assertThatThrownBy(() -> context.getBean(KubernetesClientHealthIndicator.class)) + .isInstanceOf(NoSuchBeanDefinitionException.class); + } + +} diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorTests.java index b5409a0b..1b2301c4 100644 --- a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorTests.java +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientHealthIndicatorTests.java @@ -16,13 +16,9 @@ package org.springframework.cloud.kubernetes.client; -import java.util.HashMap; import java.util.Map; -import io.kubernetes.client.openapi.models.V1ObjectMeta; import io.kubernetes.client.openapi.models.V1Pod; -import io.kubernetes.client.openapi.models.V1PodSpec; -import io.kubernetes.client.openapi.models.V1PodStatus; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -32,6 +28,21 @@ import org.springframework.cloud.kubernetes.commons.PodUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.HOST_IP; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.INSIDE; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.LABELS; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.NAMESPACE; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.NODE_NAME; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.POD_IP; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.POD_NAME; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.SERVICE_ACCOUNT; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_HOST_IP; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_LABELS; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_NAMESPACE; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_NODE_NAME; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_POD_IP; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_POD_NAME; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_SERVICE_ACCOUNT; /** * @author Ryan Baxter @@ -43,48 +54,32 @@ class KubernetesClientHealthIndicatorTests { private PodUtils utils; @Test - void getDetailsNotInsideTest() throws Exception { + void getDetailsNotInsideTest() { when(utils.currentPod()).thenReturn(() -> null); KubernetesClientHealthIndicator healthIndicator = new KubernetesClientHealthIndicator(utils); - assertThat(healthIndicator.getDetails().containsKey(KubernetesClientHealthIndicator.INSIDE)).isTrue(); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.INSIDE)).isEqualTo(false); + Map details = healthIndicator.getDetails(); + + assertThat(details.containsKey(INSIDE)).isTrue(); + assertThat(details.get(INSIDE)).isEqualTo(false); } @Test - void getDetailsInsideTest() throws Exception { - Map labels = new HashMap<>(); - labels.put("spring", "cloud"); - V1ObjectMeta metaData = new V1ObjectMeta(); - metaData.setLabels(labels); - metaData.setName("mypod"); - metaData.setNamespace("default"); + void getDetailsInsideTest() { - V1PodStatus status = new V1PodStatus(); - status.setPodIP("127.0.0.1"); - status.setHostIP("123.456.789.1"); - - V1PodSpec spec = new V1PodSpec(); - spec.setNodeName("nodeName"); - spec.setServiceAccountName("serviceAccount"); - - V1Pod pod = new V1Pod(); - pod.setMetadata(metaData); - pod.setStatus(status); - pod.setSpec(spec); - - when(utils.currentPod()).thenReturn(() -> pod); + when(utils.currentPod()).thenReturn(StubProvider::stubPod); KubernetesClientHealthIndicator healthIndicator = new KubernetesClientHealthIndicator(utils); - assertThat(healthIndicator.getDetails().containsKey(KubernetesClientHealthIndicator.INSIDE)).isTrue(); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.INSIDE)).isEqualTo(true); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.HOST_IP)) - .isEqualTo("123.456.789.1"); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.POD_IP)).isEqualTo("127.0.0.1"); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.NODE_NAME)).isEqualTo("nodeName"); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.SERVICE_ACCOUNT)) - .isEqualTo("serviceAccount"); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.POD_NAME)).isEqualTo("mypod"); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.NAMESPACE)).isEqualTo("default"); - assertThat(healthIndicator.getDetails().get(KubernetesClientHealthIndicator.LABELS)).isEqualTo(labels); + Map details = healthIndicator.getDetails(); + + assertThat(details.containsKey(INSIDE)).isTrue(); + assertThat(details.get(INSIDE)).isEqualTo(true); + + assertThat(details.get(HOST_IP)).isEqualTo(STUB_HOST_IP); + assertThat(details.get(POD_IP)).isEqualTo(STUB_POD_IP); + assertThat(details.get(NODE_NAME)).isEqualTo(STUB_NODE_NAME); + assertThat(details.get(SERVICE_ACCOUNT)).isEqualTo(STUB_SERVICE_ACCOUNT); + assertThat(details.get(POD_NAME)).isEqualTo(STUB_POD_NAME); + assertThat(details.get(NAMESPACE)).isEqualTo(STUB_NAMESPACE); + assertThat(details.get(LABELS)).isEqualTo(STUB_LABELS); } } diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorInsideTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorInsideTests.java new file mode 100644 index 00000000..1595b134 --- /dev/null +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorInsideTests.java @@ -0,0 +1,45 @@ +/* + * Copyright 2013-2020 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.client; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.kubernetes.client.example.App; +import org.springframework.context.ApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author wind57 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class) +public class KubernetesClientInfoContributorInsideTests { + + @Autowired + private ApplicationContext context; + + // test that the bean responsible for info contribution is present. + // the actual fields it must provide are tested in + // KubernetesClientInfoContributorTests. + @Test + public void test() { + assertThat(context.getBean(KubernetesClientInfoContributor.class)).isNotNull(); + } + +} diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorNotInsideTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorNotInsideTests.java new file mode 100644 index 00000000..ec6fac6b --- /dev/null +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorNotInsideTests.java @@ -0,0 +1,46 @@ +/* + * Copyright 2013-2020 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.client; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.kubernetes.client.example.App; +import org.springframework.context.ApplicationContext; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +/** + * @author wind57 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, + properties = { "management.info.kubernetes.enabled=false" }) +public class KubernetesClientInfoContributorNotInsideTests { + + @Autowired + private ApplicationContext context; + + // test that the bean responsible for info contribution is NOT present. + @Test + public void test() { + assertThatThrownBy(() -> context.getBean(KubernetesClientInfoContributor.class)) + .isInstanceOf(NoSuchBeanDefinitionException.class); + } + +} diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorTests.java index 10b40291..c711a056 100644 --- a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorTests.java +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/KubernetesClientInfoContributorTests.java @@ -16,13 +16,9 @@ package org.springframework.cloud.kubernetes.client; -import java.util.HashMap; import java.util.Map; -import io.kubernetes.client.openapi.models.V1ObjectMeta; import io.kubernetes.client.openapi.models.V1Pod; -import io.kubernetes.client.openapi.models.V1PodSpec; -import io.kubernetes.client.openapi.models.V1PodStatus; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -32,6 +28,19 @@ import org.springframework.cloud.kubernetes.commons.PodUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.HOST_IP; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.INSIDE; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.NAMESPACE; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.NODE_NAME; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.POD_IP; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.POD_NAME; +import static org.springframework.cloud.kubernetes.client.KubernetesClientHealthIndicator.SERVICE_ACCOUNT; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_HOST_IP; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_NAMESPACE; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_NODE_NAME; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_POD_IP; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_POD_NAME; +import static org.springframework.cloud.kubernetes.client.StubProvider.STUB_SERVICE_ACCOUNT; /** * @author Ryan Baxter @@ -46,44 +55,28 @@ class KubernetesClientInfoContributorTests { void getDetailsIsNotInside() { when(utils.currentPod()).thenReturn(() -> null); KubernetesClientInfoContributor infoContributor = new KubernetesClientInfoContributor(utils); - assertThat(infoContributor.getDetails().containsKey(KubernetesClientHealthIndicator.INSIDE)).isTrue(); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.INSIDE)).isEqualTo(false); + Map details = infoContributor.getDetails(); + + assertThat(details.containsKey(INSIDE)).isTrue(); + assertThat(details.get(INSIDE)).isEqualTo(false); } @Test - void getDetailsInside() throws Exception { - Map labels = new HashMap<>(); - labels.put("spring", "cloud"); - V1ObjectMeta metaData = new V1ObjectMeta(); - metaData.setLabels(labels); - metaData.setName("mypod"); - metaData.setNamespace("default"); + void getDetailsInside() { - V1PodStatus status = new V1PodStatus(); - status.setPodIP("127.0.0.1"); - status.setHostIP("123.456.789.1"); - - V1PodSpec spec = new V1PodSpec(); - spec.setNodeName("nodeName"); - spec.setServiceAccountName("serviceAccount"); - - V1Pod pod = new V1Pod(); - pod.setMetadata(metaData); - pod.setStatus(status); - pod.setSpec(spec); - - when(utils.currentPod()).thenReturn(() -> pod); + when(utils.currentPod()).thenReturn(StubProvider::stubPod); KubernetesClientInfoContributor infoContributor = new KubernetesClientInfoContributor(utils); - assertThat(infoContributor.getDetails().containsKey(KubernetesClientHealthIndicator.INSIDE)).isTrue(); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.INSIDE)).isEqualTo(true); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.HOST_IP)) - .isEqualTo("123.456.789.1"); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.POD_IP)).isEqualTo("127.0.0.1"); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.NODE_NAME)).isEqualTo("nodeName"); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.SERVICE_ACCOUNT)) - .isEqualTo("serviceAccount"); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.POD_NAME)).isEqualTo("mypod"); - assertThat(infoContributor.getDetails().get(KubernetesClientHealthIndicator.NAMESPACE)).isEqualTo("default"); + Map details = infoContributor.getDetails(); + + assertThat(details.containsKey(INSIDE)).isTrue(); + assertThat(details.get(INSIDE)).isEqualTo(true); + + assertThat(details.get(HOST_IP)).isEqualTo(STUB_HOST_IP); + assertThat(details.get(POD_IP)).isEqualTo(STUB_POD_IP); + assertThat(details.get(NODE_NAME)).isEqualTo(STUB_NODE_NAME); + assertThat(details.get(SERVICE_ACCOUNT)).isEqualTo(STUB_SERVICE_ACCOUNT); + assertThat(details.get(POD_NAME)).isEqualTo(STUB_POD_NAME); + assertThat(details.get(NAMESPACE)).isEqualTo(STUB_NAMESPACE); } } diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/StubProvider.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/StubProvider.java new file mode 100644 index 00000000..10b810a0 --- /dev/null +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/StubProvider.java @@ -0,0 +1,58 @@ +/* + * Copyright 2013-2020 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.client; + +import java.util.Collections; +import java.util.Map; + +import io.kubernetes.client.openapi.models.V1ObjectMeta; +import io.kubernetes.client.openapi.models.V1Pod; +import io.kubernetes.client.openapi.models.V1PodSpec; +import io.kubernetes.client.openapi.models.V1PodStatus; + +/** + * @author wind57 + */ +final class StubProvider { + + static final String STUB_POD_IP = "127.0.0.1"; + + static final String STUB_HOST_IP = "123.456.789.1"; + + static final String STUB_NODE_NAME = "nodeName"; + + static final String STUB_SERVICE_ACCOUNT = "serviceAccount"; + + static final String STUB_POD_NAME = "mypod"; + + static final String STUB_NAMESPACE = "default"; + + static final Map STUB_LABELS = Collections.singletonMap("spring", "cloud"); + + private StubProvider() { + } + + static V1Pod stubPod() { + + V1ObjectMeta metaData = new V1ObjectMeta().labels(STUB_LABELS).name(STUB_POD_NAME).namespace(STUB_NAMESPACE); + V1PodStatus status = new V1PodStatus().podIP(STUB_POD_IP).hostIP(STUB_HOST_IP); + V1PodSpec spec = new V1PodSpec().nodeName(STUB_NODE_NAME).serviceAccountName(STUB_SERVICE_ACCOUNT); + + return new V1Pod().metadata(metaData).status(status).spec(spec); + } + +} diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/example/App.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/example/App.java new file mode 100644 index 00000000..b853b8df --- /dev/null +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/example/App.java @@ -0,0 +1,27 @@ +/* + * Copyright 2013-2020 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.client.example; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author wind57 + */ +@SpringBootApplication +public class App { + +} diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorNoProfileTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorNoProfileTests.java index ccdb9ff2..21e1fce2 100644 --- a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorNoProfileTests.java +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorNoProfileTests.java @@ -16,14 +16,11 @@ package org.springframework.cloud.kubernetes.client.profile; -import io.kubernetes.client.openapi.ApiClient; -import io.kubernetes.client.openapi.apis.CoreV1Api; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.cloud.kubernetes.client.example.App; import org.springframework.core.env.Environment; import static org.assertj.core.api.Assertions.assertThat; @@ -32,27 +29,15 @@ import static org.springframework.cloud.kubernetes.commons.profile.AbstractKuber /** * @author Ryan Baxter */ -@SpringBootTest(classes = { KubernetesClientProfileEnvironmentPostProcessorNoProfileTests.App.class }) +@SpringBootTest(classes = { App.class }) class KubernetesClientProfileEnvironmentPostProcessorNoProfileTests { @Autowired - Environment environment; - - @MockBean - CoreV1Api coreV1Api; - - @MockBean - ApiClient apiClient; + private Environment environment; @Test void whenNoKubernetesEnvironmentAndNoApiAccessThenNoProfileEnabled() { - assertThat(environment.getActiveProfiles()).doesNotContain(KUBERNETES_PROFILE); } - @SpringBootApplication - static class App { - - } - } diff --git a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorTests.java b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorTests.java index d38294a7..ec3b4329 100644 --- a/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorTests.java +++ b/spring-cloud-kubernetes-client-autoconfig/src/test/java/org/springframework/cloud/kubernetes/client/profile/KubernetesClientProfileEnvironmentPostProcessorTests.java @@ -16,14 +16,11 @@ package org.springframework.cloud.kubernetes.client.profile; -import io.kubernetes.client.openapi.ApiClient; -import io.kubernetes.client.openapi.apis.CoreV1Api; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.cloud.kubernetes.client.example.App; import org.springframework.core.env.Environment; import static io.kubernetes.client.util.Config.ENV_SERVICE_HOST; @@ -34,27 +31,15 @@ import static org.springframework.cloud.kubernetes.commons.profile.AbstractKuber /** * @author Thomas Vitale */ -@SpringBootTest(properties = { ENV_SERVICE_HOST + "=10.0.0.1", ENV_SERVICE_PORT + "=80" }, - classes = { KubernetesClientProfileEnvironmentPostProcessorTests.App.class }) +@SpringBootTest(properties = { ENV_SERVICE_HOST + "=10.0.0.1", ENV_SERVICE_PORT + "=80" }, classes = { App.class }) class KubernetesClientProfileEnvironmentPostProcessorTests { @Autowired - Environment environment; - - @MockBean - CoreV1Api coreV1Api; - - @MockBean - ApiClient apiClient; + private Environment environment; @Test void whenKubernetesEnvironmentAndNoApiAccessThenProfileEnabled() { assertThat(environment.getActiveProfiles()).contains(KUBERNETES_PROFILE); } - @SpringBootApplication - static class App { - - } - }