Repackage output capture and always use extension declaratively

Closes gh-17029
This commit is contained in:
Andy Wilkinson
2019-05-31 10:03:02 +01:00
parent d11d5ceb29
commit 0644a79401
69 changed files with 584 additions and 657 deletions

View File

@@ -21,7 +21,7 @@ import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import io.prometheus.client.CollectorRegistry;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration;
import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusPushGatewayManager;
@@ -29,8 +29,8 @@ import org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScra
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -43,11 +43,9 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Andy Wilkinson
*/
@ExtendWith(OutputCaptureExtension.class)
public class PrometheusMetricsExportAutoConfigurationTests {
@RegisterExtension
CapturedOutput output = OutputExtension.capture();
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations
.of(PrometheusMetricsExportAutoConfiguration.class));
@@ -152,14 +150,14 @@ public class PrometheusMetricsExportAutoConfigurationTests {
}
@Test
public void withPushGatewayEnabled() {
public void withPushGatewayEnabled(CapturedOutput capturedOutput) {
this.contextRunner
.withConfiguration(
AutoConfigurations.of(ManagementContextAutoConfiguration.class))
.withPropertyValues(
"management.metrics.export.prometheus.pushgateway.enabled=true")
.withUserConfiguration(BaseConfiguration.class).run((context) -> {
assertThat(this.output.toString())
assertThat(capturedOutput)
.doesNotContain("Invalid PushGateway base url");
hasGatewayURL(context, "http://localhost:9091/metrics/job/");
});
@@ -167,7 +165,7 @@ public class PrometheusMetricsExportAutoConfigurationTests {
@Test
@Deprecated
public void withCustomLegacyPushGatewayURL() {
public void withCustomLegacyPushGatewayURL(CapturedOutput capturedOutput) {
this.contextRunner
.withConfiguration(
AutoConfigurations.of(ManagementContextAutoConfiguration.class))
@@ -175,8 +173,7 @@ public class PrometheusMetricsExportAutoConfigurationTests {
"management.metrics.export.prometheus.pushgateway.enabled=true",
"management.metrics.export.prometheus.pushgateway.base-url=localhost:9090")
.withUserConfiguration(BaseConfiguration.class).run((context) -> {
assertThat(this.output.toString())
.contains("Invalid PushGateway base url")
assertThat(capturedOutput).contains("Invalid PushGateway base url")
.contains("localhost:9090");
hasGatewayURL(context, "http://localhost:9090/metrics/job/");
});

View File

@@ -20,7 +20,7 @@ import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
import org.springframework.boot.actuate.metrics.web.client.DefaultRestTemplateExchangeTagsProvider;
@@ -29,8 +29,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.HttpStatus;
import org.springframework.test.web.client.MockRestServiceServer;
@@ -47,6 +47,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat
* @author Jon Schneider
* @author Raheela Aslam
*/
@ExtendWith(OutputCaptureExtension.class)
public class RestTemplateMetricsConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
@@ -54,9 +55,6 @@ public class RestTemplateMetricsConfigurationTests {
.withConfiguration(AutoConfigurations.of(RestTemplateAutoConfiguration.class,
HttpClientMetricsAutoConfiguration.class));
@RegisterExtension
CapturedOutput output = OutputExtension.capture();
@Test
public void restTemplateCreatedWithBuilderIsInstrumented() {
this.contextRunner.run((context) -> {
@@ -78,26 +76,26 @@ public class RestTemplateMetricsConfigurationTests {
}
@Test
public void afterMaxUrisReachedFurtherUrisAreDenied() {
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
this.contextRunner
.withPropertyValues("management.metrics.web.client.max-uri-tags=2")
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.client.requests").meters()).hasSize(2);
assertThat(this.output.toString()).contains(
assertThat(capturedOutput).contains(
"Reached the maximum number of URI tags for 'http.client.requests'.")
.contains("Are you using 'uriVariables'?");
});
}
@Test
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
this.contextRunner
.withPropertyValues("management.metrics.web.client.max-uri-tags=5")
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.client.requests").meters()).hasSize(3);
assertThat(this.output.toString()).doesNotContain(
assertThat(capturedOutput).doesNotContain(
"Reached the maximum number of URI tags for 'http.client.requests'.")
.doesNotContain("Are you using 'uriVariables'?");
});

View File

@@ -22,7 +22,7 @@ import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import reactor.core.publisher.Mono;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
@@ -31,8 +31,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
@@ -51,6 +51,7 @@ import static org.mockito.Mockito.mock;
* @author Brian Clozel
* @author Stephane Nicoll
*/
@ExtendWith(OutputCaptureExtension.class)
public class WebClientMetricsConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
@@ -58,9 +59,6 @@ public class WebClientMetricsConfigurationTests {
.withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class,
HttpClientMetricsAutoConfiguration.class));
@RegisterExtension
CapturedOutput output = OutputExtension.capture();
@Test
public void webClientCreatedWithBuilderIsInstrumented() {
this.contextRunner.run((context) -> {
@@ -79,26 +77,26 @@ public class WebClientMetricsConfigurationTests {
}
@Test
public void afterMaxUrisReachedFurtherUrisAreDenied() {
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
this.contextRunner
.withPropertyValues("management.metrics.web.client.max-uri-tags=2")
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.client.requests").meters()).hasSize(2);
assertThat(this.output.toString()).contains(
assertThat(capturedOutput).contains(
"Reached the maximum number of URI tags for 'http.client.requests'.")
.contains("Are you using 'uriVariables'?");
});
}
@Test
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
this.contextRunner
.withPropertyValues("management.metrics.web.client.max-uri-tags=5")
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.client.requests").meters()).hasSize(3);
assertThat(this.output.toString()).doesNotContain(
assertThat(capturedOutput).doesNotContain(
"Reached the maximum number of URI tags for 'http.client.requests'.")
.doesNotContain("Are you using 'uriVariables'?");
});

View File

@@ -18,7 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics.web.reactive;
import io.micrometer.core.instrument.MeterRegistry;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
import org.springframework.boot.actuate.autoconfigure.metrics.web.TestController;
@@ -29,8 +29,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext;
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.web.reactive.server.WebTestClient;
@@ -44,15 +44,13 @@ import static org.mockito.Mockito.mock;
* @author Brian Clozel
* @author Dmytro Nosan
*/
@ExtendWith(OutputCaptureExtension.class)
public class WebFluxMetricsAutoConfigurationTests {
private ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner()
.with(MetricsRun.simple()).withConfiguration(
AutoConfigurations.of(WebFluxMetricsAutoConfiguration.class));
@RegisterExtension
CapturedOutput output = OutputExtension.capture();
@Test
public void shouldProvideWebFluxMetricsBeans() {
this.contextRunner.run((context) -> {
@@ -69,7 +67,7 @@ public class WebFluxMetricsAutoConfigurationTests {
}
@Test
public void afterMaxUrisReachedFurtherUrisAreDenied() {
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
this.contextRunner
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class))
.withUserConfiguration(TestController.class)
@@ -77,14 +75,14 @@ public class WebFluxMetricsAutoConfigurationTests {
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.server.requests").meters()).hasSize(2);
assertThat(this.output.toString())
assertThat(capturedOutput)
.contains("Reached the maximum number of URI tags "
+ "for 'http.server.requests'");
});
}
@Test
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
this.contextRunner
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class))
.withUserConfiguration(TestController.class)
@@ -92,7 +90,7 @@ public class WebFluxMetricsAutoConfigurationTests {
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.server.requests").meters()).hasSize(3);
assertThat(this.output.toString()).doesNotContain(
assertThat(capturedOutput).doesNotContain(
"Reached the maximum number of URI tags for 'http.server.requests'");
});
}

View File

@@ -29,7 +29,7 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
@@ -42,8 +42,8 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -63,15 +63,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
* @author Dmytro Nosan
* @author Tadaya Tsuyukubo
*/
@ExtendWith(OutputCaptureExtension.class)
public class WebMvcMetricsAutoConfigurationTests {
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
.with(MetricsRun.simple()).withConfiguration(
AutoConfigurations.of(WebMvcMetricsAutoConfiguration.class));
@RegisterExtension
CapturedOutput output = OutputExtension.capture();
@Test
public void backsOffWhenMeterRegistryIsMissing() {
new WebApplicationContextRunner()
@@ -112,7 +110,7 @@ public class WebMvcMetricsAutoConfigurationTests {
}
@Test
public void afterMaxUrisReachedFurtherUrisAreDenied() {
public void afterMaxUrisReachedFurtherUrisAreDenied(CapturedOutput capturedOutput) {
this.contextRunner.withUserConfiguration(TestController.class)
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
WebMvcAutoConfiguration.class))
@@ -120,14 +118,14 @@ public class WebMvcMetricsAutoConfigurationTests {
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.server.requests").meters()).hasSize(2);
assertThat(this.output.toString())
assertThat(capturedOutput)
.contains("Reached the maximum number of URI tags "
+ "for 'http.server.requests'");
});
}
@Test
public void shouldNotDenyNorLogIfMaxUrisIsNotReached() {
public void shouldNotDenyNorLogIfMaxUrisIsNotReached(CapturedOutput capturedOutput) {
this.contextRunner.withUserConfiguration(TestController.class)
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class,
WebMvcAutoConfiguration.class))
@@ -135,7 +133,7 @@ public class WebMvcMetricsAutoConfigurationTests {
.run((context) -> {
MeterRegistry registry = getInitializedMeterRegistry(context);
assertThat(registry.get("http.server.requests").meters()).hasSize(3);
assertThat(this.output.toString())
assertThat(capturedOutput)
.doesNotContain("Reached the maximum number of URI tags "
+ "for 'http.server.requests'");
});

View File

@@ -19,7 +19,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration;
@@ -27,8 +27,8 @@ import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagem
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.test.extension.CapturedOutput;
import org.springframework.boot.test.extension.OutputExtension;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;
@@ -39,13 +39,12 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Madhura Bhave
* @author Andy Wilkinson
*/
@ExtendWith(OutputCaptureExtension.class)
public class ManagementContextAutoConfigurationTests {
@RegisterExtension
CapturedOutput output = OutputExtension.capture();
@Test
public void childManagementContextShouldStartForEmbeddedServer() {
public void childManagementContextShouldStartForEmbeddedServer(
CapturedOutput capturedOutput) {
WebApplicationContextRunner contextRunner = new WebApplicationContextRunner(
AnnotationConfigServletWebServerApplicationContext::new)
.withConfiguration(AutoConfigurations.of(
@@ -54,12 +53,12 @@ public class ManagementContextAutoConfigurationTests {
ServletManagementContextAutoConfiguration.class,
WebEndpointAutoConfiguration.class,
EndpointAutoConfiguration.class));
contextRunner.withPropertyValues("server.port=0", "management.server.port=0").run(
(context) -> assertThat(tomcatStartedOccurencesIn(this.output.toString()))
contextRunner.withPropertyValues("server.port=0", "management.server.port=0")
.run((context) -> assertThat(tomcatStartedOccurencesIn(capturedOutput))
.isEqualTo(2));
}
private int tomcatStartedOccurencesIn(String output) {
private int tomcatStartedOccurencesIn(CharSequence output) {
int matches = 0;
Matcher matcher = Pattern.compile("Tomcat started on port").matcher(output);
while (matcher.find()) {