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); assertThat(ctxt.getBean(FeaturesEndpoint.class), is(notNullValue())); // features actuator is independent of discovery 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); } } @Test public void disableHealthIndicator() { try (ConfigurableApplicationContext ctxt = init( "spring.cloud.discovery.client.health-indicator.enabled=false")) { assertBeanNonExistant(ctxt, DiscoveryClientHealthIndicator.class); assertBeanNonExistant(ctxt, DiscoveryCompositeHealthIndicator.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 { } }