diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java index 937604a1..9b820e4d 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/CommonsClientAutoConfiguration.java @@ -51,12 +51,14 @@ import org.springframework.context.annotation.Configuration; public class CommonsClientAutoConfiguration { @Bean + @ConditionalOnProperty(value = "spring.cloud.discovery.client.health-indicator.enabled", matchIfMissing = true) public DiscoveryClientHealthIndicator discoveryClientHealthIndicator( DiscoveryClient discoveryClient) { return new DiscoveryClientHealthIndicator(discoveryClient); } @Bean + @ConditionalOnProperty(value = "spring.cloud.discovery.client.composite-indicator.enabled", matchIfMissing = true) public DiscoveryCompositeHealthIndicator discoveryCompositeHealthIndicator( HealthAggregator aggregator, List indicators) { return new DiscoveryCompositeHealthIndicator(aggregator, indicators); @@ -70,6 +72,7 @@ public class CommonsClientAutoConfiguration { @Configuration @ConditionalOnClass(Endpoint.class) + @ConditionalOnProperty(value = "spring.cloud.features.enabled", matchIfMissing = true) protected static class ActuatorConfiguration { @Autowired(required = false) private List hasFeatures = new ArrayList<>(); diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/CommonsClientAutoConfigurationTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/CommonsClientAutoConfigurationTests.java new file mode 100644 index 00000000..379c42ec --- /dev/null +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/CommonsClientAutoConfigurationTests.java @@ -0,0 +1,84 @@ +package org.springframework.cloud.client; + +import org.junit.Test; +import org.springframework.beans.BeansException; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.client.actuator.FeaturesEndpoint; +import org.springframework.cloud.client.actuator.HasFeatures; +import org.springframework.cloud.client.discovery.health.DiscoveryClientHealthIndicator; +import org.springframework.cloud.client.discovery.health.DiscoveryCompositeHealthIndicator; +import org.springframework.cloud.client.discovery.noop.NoopDiscoveryClientAutoConfiguration; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +import static org.hamcrest.Matchers.emptyCollectionOf; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + +/** + * @author Spencer Gibb + */ +public class CommonsClientAutoConfigurationTests { + + @Test + public void beansCreatedNormally() { + try (ConfigurableApplicationContext ctxt = init()) { + assertThat(ctxt.getBean(DiscoveryClientHealthIndicator.class), + is(notNullValue())); + assertThat(ctxt.getBean(DiscoveryCompositeHealthIndicator.class), + is(notNullValue())); + assertThat(ctxt.getBean(FeaturesEndpoint.class), is(notNullValue())); + assertThat(ctxt.getBeansOfType(HasFeatures.class).values(), + not(emptyCollectionOf(HasFeatures.class))); + } + } + + @Test + public void disableAll() { + try (ConfigurableApplicationContext ctxt = init("spring.cloud.discovery.enabled=false")) { + assertBeanNonExistant(ctxt, DiscoveryClientHealthIndicator.class); + assertBeanNonExistant(ctxt, DiscoveryCompositeHealthIndicator.class); + assertBeanNonExistant(ctxt, FeaturesEndpoint.class); + assertBeanNonExistant(ctxt, HasFeatures.class); + } + } + + @Test + public void disableAllIndividually() { + try (ConfigurableApplicationContext ctxt = init( + "spring.cloud.discovery.client.health-indicator.enabled=false", + "spring.cloud.discovery.client.composite-indicator.enabled=false", + "spring.cloud.features.enabled=false")) { + assertBeanNonExistant(ctxt, DiscoveryClientHealthIndicator.class); + assertBeanNonExistant(ctxt, DiscoveryCompositeHealthIndicator.class); + assertBeanNonExistant(ctxt, FeaturesEndpoint.class); + } + } + + private void assertBeanNonExistant(ConfigurableApplicationContext ctxt, + Class beanClass) { + try { + ctxt.getBean(beanClass); + fail("Bean of type " + beanClass + " should not have been created"); + } + catch (BeansException e) { + // should fail with exception + } + } + + protected ConfigurableApplicationContext init(String... pairs) { + return new SpringApplicationBuilder().web(false).sources(Config.class) + .properties(pairs).run(); + } + + @Configuration + @EnableAutoConfiguration + @Import(NoopDiscoveryClientAutoConfiguration.class) + protected static class Config { + } +}