diff --git a/spring-cloud-kubernetes-config/pom.xml b/spring-cloud-kubernetes-config/pom.xml index 90c71eb5..dd86304a 100644 --- a/spring-cloud-kubernetes-config/pom.xml +++ b/spring-cloud-kubernetes-config/pom.xml @@ -164,6 +164,11 @@ rest-assured test + + org.springframework.boot + spring-boot-starter-actuator + test + org.springframework.boot diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java new file mode 100644 index 00000000..f7ef025f --- /dev/null +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/HealthIndicatorTest.java @@ -0,0 +1,59 @@ +package org.springframework.cloud.kubernetes.config; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.core.StringContains.containsString; + +import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.server.mock.KubernetesServer; +import io.restassured.RestAssured; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.kubernetes.config.example.App; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, + properties = { + "management.endpoint.health.show-details=always" + }) +public class HealthIndicatorTest { + + @ClassRule + public static KubernetesServer server = new KubernetesServer(); + + private static KubernetesClient mockClient; + + @Value("${local.server.port}") + private int port; + + + @BeforeClass + public static void setUpBeforeClass() { + mockClient = server.getClient(); + + //Configure the kubernetes master url to point to the mock server + System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, mockClient.getConfiguration().getMasterUrl()); + System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); + System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); + } + + @Test + public void healthEndpointShouldContainKubernetes() { + RestAssured.baseURI = String.format("http://localhost:%d/actuator/health", port); + given() + .contentType("application/json") + .get() + .then() + .statusCode(200) + .body(containsString("kubernetes")); + } + + +} diff --git a/spring-cloud-kubernetes-core/pom.xml b/spring-cloud-kubernetes-core/pom.xml index 10e956f3..94a70683 100644 --- a/spring-cloud-kubernetes-core/pom.xml +++ b/spring-cloud-kubernetes-core/pom.xml @@ -108,12 +108,24 @@ spock-spring test + + io.rest-assured + rest-assured + test + + + org.springframework.boot + spring-boot-starter-actuator + test + org.springframework.boot spring-boot-configuration-processor true + + diff --git a/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/KubernetesAutoConfiguration.java b/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/KubernetesAutoConfiguration.java index 1d53be57..0d904ee4 100644 --- a/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/KubernetesAutoConfiguration.java +++ b/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/KubernetesAutoConfiguration.java @@ -112,7 +112,6 @@ public class KubernetesAutoConfiguration { @ConditionalOnClass(HealthIndicator.class) protected static class KubernetesActuatorConfiguration { @Bean - @ConditionalOnMissingBean public KubernetesHealthIndicator kubernetesHealthIndicator(PodUtils podUtils) { return new KubernetesHealthIndicator(podUtils); } diff --git a/spring-cloud-kubernetes-core/src/test/java/org/springframework/cloud/kubernetes/HealthIndicatorTest.java b/spring-cloud-kubernetes-core/src/test/java/org/springframework/cloud/kubernetes/HealthIndicatorTest.java new file mode 100644 index 00000000..f320f420 --- /dev/null +++ b/spring-cloud-kubernetes-core/src/test/java/org/springframework/cloud/kubernetes/HealthIndicatorTest.java @@ -0,0 +1,59 @@ +package org.springframework.cloud.kubernetes; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.core.StringContains.containsString; + +import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.server.mock.KubernetesServer; +import io.restassured.RestAssured; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.kubernetes.example.App; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = App.class, + properties = { + "management.endpoint.health.show-details=always" + }) +public class HealthIndicatorTest { + + @ClassRule + public static KubernetesServer server = new KubernetesServer(); + + private static KubernetesClient mockClient; + + @Value("${local.server.port}") + private int port; + + + @BeforeClass + public static void setUpBeforeClass() { + mockClient = server.getClient(); + + //Configure the kubernetes master url to point to the mock server + System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, mockClient.getConfiguration().getMasterUrl()); + System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); + System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); + } + + @Test + public void healthEndpointShouldContainKubernetes() { + RestAssured.baseURI = String.format("http://localhost:%d/actuator/health", port); + given() + .contentType("application/json") + .get() + .then() + .statusCode(200) + .body(containsString("kubernetes")); + } + + +} diff --git a/spring-cloud-kubernetes-core/src/test/java/org/springframework/cloud/kubernetes/example/App.java b/spring-cloud-kubernetes-core/src/test/java/org/springframework/cloud/kubernetes/example/App.java new file mode 100644 index 00000000..f741704e --- /dev/null +++ b/spring-cloud-kubernetes-core/src/test/java/org/springframework/cloud/kubernetes/example/App.java @@ -0,0 +1,8 @@ +package org.springframework.cloud.kubernetes.example; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class App { + +}