Add ability to disable parts of commons auto config.

fixes gh-95
This commit is contained in:
Spencer Gibb
2016-03-01 13:35:22 -07:00
parent 760b0ef42c
commit 779e5686a9
2 changed files with 87 additions and 0 deletions

View File

@@ -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<DiscoveryHealthIndicator> 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> hasFeatures = new ArrayList<>();

View File

@@ -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 {
}
}