Improve auto-configuration tests

Closes gh-484
This commit is contained in:
Madhura Bhave
2018-07-05 13:04:45 -07:00
parent 053ad91485
commit 7e409bec12
8 changed files with 382 additions and 6 deletions

View File

@@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnClass(MeterRegistry.class)
@AutoConfigureAfter(CompositeMeterRegistryAutoConfiguration.class)
public class InitializrMetricsConfiguration {
public class InitializrMetricsAutoConfiguration {
@Bean
@ConditionalOnSingleCandidate(MeterRegistry.class)

View File

@@ -24,6 +24,7 @@ import io.spring.initializr.actuate.stat.StatsProperties;
import io.spring.initializr.metadata.InitializrMetadataProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
@@ -44,7 +45,7 @@ import org.springframework.retry.support.RetryTemplate;
@Configuration
@EnableConfigurationProperties(StatsProperties.class)
@ConditionalOnProperty("initializr.stats.elastic.uri")
@AutoConfigureAfter(RestTemplateAutoConfiguration.class)
@AutoConfigureAfter(value = RestTemplateAutoConfiguration.class, name = "io.spring.initializr.web.autoconfigure.InitializrAutoConfiguration")
class InitializrStatsAutoConfiguration {
private final StatsProperties statsProperties;
@@ -54,6 +55,7 @@ class InitializrStatsAutoConfiguration {
}
@Bean
@ConditionalOnBean(InitializrMetadataProvider.class)
public ProjectGenerationStatPublisher projectRequestStatHandler(
InitializrMetadataProvider provider,
RestTemplateBuilder restTemplateBuilder) {

View File

@@ -1,4 +1,4 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.spring.initializr.actuate.autoconfigure.InitializrActuatorEndpointsAutoConfiguration,\
io.spring.initializr.actuate.autoconfigure.InitializrStatsAutoConfiguration,\
io.spring.initializr.actuate.autoconfigure.InitializrMetricsConfiguration
io.spring.initializr.actuate.autoconfigure.InitializrMetricsAutoConfiguration

View File

@@ -0,0 +1,56 @@
/*
* Copyright 2012-2018 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
*
* http://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 io.spring.initializr.actuate.autoconfigure;
import io.spring.initializr.actuate.info.BomRangesInfoContributor;
import io.spring.initializr.actuate.info.DependencyRangesInfoContributor;
import io.spring.initializr.web.autoconfigure.InitializrAutoConfiguration;
import org.junit.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link InitializrActuatorEndpointsAutoConfiguration}.
*
* @author Madhura Bhave
*/
public class InitializrActuatorEndpointsAutoConfigurationTests {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class,
InitializrAutoConfiguration.class,
RestTemplateAutoConfiguration.class,
InitializrActuatorEndpointsAutoConfiguration.class));
@Test
public void autoConfigRegistersBomRangesInfoContributor() {
this.contextRunner.run((context) -> assertThat(context)
.hasSingleBean(BomRangesInfoContributor.class));
}
@Test
public void autoConfigRegistersDependencyRangesInfoContributor() {
this.contextRunner.run((context) -> assertThat(context)
.hasSingleBean(DependencyRangesInfoContributor.class));
}
}

View File

@@ -0,0 +1,56 @@
/*
* Copyright 2012-2018 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
*
* http://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 io.spring.initializr.actuate.autoconfigure;
import io.micrometer.core.instrument.MeterRegistry;
import io.spring.initializr.actuate.metric.ProjectGenerationMetricsListener;
import org.junit.Test;
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link InitializrMetricsAutoConfiguration}.
*
* @author Madhura Bhave
*/
public class InitializrMetricsAutoConfigurationTests {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
CompositeMeterRegistryAutoConfiguration.class,
InitializrMetricsAutoConfiguration.class));
@Test
public void autoConfigRegistersProjectGenerationMetricsListenerBean() {
this.contextRunner.run((context) -> assertThat(context)
.hasSingleBean(ProjectGenerationMetricsListener.class));
}
@Test
public void autoConfigConditionalOnMeterRegistryClass() {
this.contextRunner.withClassLoader(new FilteredClassLoader(MeterRegistry.class))
.run((context) -> assertThat(context)
.doesNotHaveBean(ProjectGenerationMetricsListener.class));
}
}

View File

@@ -18,16 +18,21 @@ package io.spring.initializr.actuate.autoconfigure;
import io.spring.initializr.actuate.stat.ProjectGenerationStatPublisher;
import io.spring.initializr.metadata.InitializrMetadataProvider;
import io.spring.initializr.web.autoconfigure.InitializrAutoConfiguration;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.web.client.RestTemplateCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.retry.backoff.ExponentialBackOffPolicy;
import org.springframework.retry.support.RetryTemplate;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
@@ -38,13 +43,45 @@ import static org.mockito.Mockito.mock;
* Tests for {@link InitializrStatsAutoConfiguration}.
*
* @author Stephane Nicoll
* @author Madhura Bhave
*/
public class InitializrStatsAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class,
.withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class,
InitializrAutoConfiguration.class,
RestTemplateAutoConfiguration.class,
InitializrStatsAutoConfiguration.class));
@Test
public void autoConfigRegistersProjectGenerationStatPublisher() {
this.contextRunner
.withPropertyValues("initializr.stats.elastic.uri=http://localhost:9200")
.run((context) -> assertThat(context)
.hasSingleBean(ProjectGenerationStatPublisher.class));
}
@Test
public void autoConfigRegistersRetryTemplate() {
this.contextRunner
.withPropertyValues("initializr.stats.elastic.uri=http://localhost:9200")
.run((context) -> assertThat(context).hasSingleBean(RetryTemplate.class));
}
@Test
public void statsRetryTemplateConditionalOnMissingBean() {
this.contextRunner
.withUserConfiguration(CustomStatsRetryTemplateConfiguration.class)
.withPropertyValues("initializr.stats.elastic.uri=http://localhost:9200")
.run((context) -> {
assertThat(context).hasSingleBean(RetryTemplate.class);
RetryTemplate retryTemplate = context.getBean(RetryTemplate.class);
ExponentialBackOffPolicy backOffPolicy = (ExponentialBackOffPolicy) ReflectionTestUtils
.getField(retryTemplate, "backOffPolicy");
assertThat(backOffPolicy.getMultiplier()).isEqualTo(10);
});
}
@Test
public void customRestTemplateBuilderIsUsed() {
this.contextRunner.withUserConfiguration(CustomRestTemplateConfiguration.class)
@@ -60,6 +97,20 @@ public class InitializrStatsAutoConfigurationTests {
});
}
@Configuration
static class CustomStatsRetryTemplateConfiguration {
@Bean
public RetryTemplate statsRetryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
ExponentialBackOffPolicy backOffPolicy = new ExponentialBackOffPolicy();
backOffPolicy.setMultiplier(10);
retryTemplate.setBackOffPolicy(backOffPolicy);
return retryTemplate;
}
}
@Configuration
static class InfrastructureConfiguration {