From 2a6d8a08ac6974e8a81a848a63fcbc376ca1a8bd Mon Sep 17 00:00:00 2001 From: reta Date: Tue, 26 Feb 2019 17:37:53 -0500 Subject: [PATCH 1/4] Refactored SkipPatternProviderConfigTest to use WebApplicationContextRunner instead of manually instantiated configurations --- .../web/SkipPatternProviderConfigTest.java | 390 ++++++++---------- 1 file changed, 183 insertions(+), 207 deletions(-) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java index 71ef0653d..864010504 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java @@ -17,20 +17,31 @@ package org.springframework.cloud.sleuth.instrument.web; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.regex.Pattern; import org.junit.Test; +import org.springframework.boot.actuate.autoconfigure.endpoint.EndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties; +import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties; -import org.springframework.boot.actuate.endpoint.EndpointId; import org.springframework.boot.actuate.endpoint.EndpointsSupplier; import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint; -import org.springframework.boot.actuate.endpoint.web.WebOperation; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.web.ServerProperties; +import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; +import org.springframework.boot.context.annotation.UserConfigurations; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.runner.WebApplicationContextRunner; +import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; +import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.BDDAssertions.then; @@ -39,26 +50,32 @@ import static org.assertj.core.api.BDDAssertions.then; */ public class SkipPatternProviderConfigTest { + private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(TraceAutoConfiguration.class, + TraceWebAutoConfiguration.class)); + @Test public void should_pick_skip_pattern_from_sleuth_properties() throws Exception { - SleuthWebProperties sleuthWebProperties = new SleuthWebProperties(); - sleuthWebProperties.setSkipPattern("foo.*|bar.*"); - Pattern pattern = new TraceWebAutoConfiguration.DefaultSkipPatternConfig() - .defaultSkipPatternBean(sleuthWebProperties).skipPattern().get(); - - then(pattern.pattern()).isEqualTo("foo.*|bar.*"); + contextRunner.withPropertyValues("spring.sleuth.web.skip-pattern=foo.*|bar.*") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()).isEqualTo("foo.*|bar.*"); + }); } @Test - public void should_combine_skip_pattern_and_additional_pattern_when_all_are_not_empty() - throws Exception { - SleuthWebProperties sleuthWebProperties = new SleuthWebProperties(); - sleuthWebProperties.setSkipPattern("foo.*|bar.*"); - sleuthWebProperties.setAdditionalSkipPattern("baz.*|faz.*"); - Pattern pattern = new TraceWebAutoConfiguration.DefaultSkipPatternConfig() - .defaultSkipPatternBean(sleuthWebProperties).skipPattern().get(); - - then(pattern.pattern()).isEqualTo("foo.*|bar.*|baz.*|faz.*"); + public void should_combine_skip_pattern_and_additional_pattern_when_all_are_not_empty() { + contextRunner + .withPropertyValues("spring.sleuth.web.skip-pattern=foo.*|bar.*", + "spring.sleuth.web.additional-skip-pattern=baz.*|faz.*") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()).isEqualTo("foo.*|bar.*|baz.*|faz.*"); + }); } @Test @@ -74,14 +91,16 @@ public class SkipPatternProviderConfigTest { @Test public void should_return_management_context_with_context_path() throws Exception { - ManagementServerProperties properties = new ManagementServerProperties(); - properties.getServlet().setContextPath("foo"); - - Optional pattern = new TraceWebAutoConfiguration.ManagementSkipPatternProviderConfig() - .skipPatternForManagementServerProperties(properties).skipPattern(); - - then(pattern).isNotEmpty(); - then(pattern.get().pattern()).isEqualTo("foo.*"); + contextRunner + .withConfiguration(UserConfigurations.of( + ManagementContextAutoConfiguration.class, EndpointConfig.class)) + .withPropertyValues("management.server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()).contains("|foo.*"); + }); } @Test @@ -97,190 +116,163 @@ public class SkipPatternProviderConfigTest { @Test public void should_return_endpoints_without_context_path() { - ServerProperties properties = new ServerProperties(); - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); - - return Arrays.asList(infoEndpoint, healthEndpoint); - }; - - Optional pattern = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(pattern).isNotEmpty(); - then(pattern.get().pattern()) - .isEqualTo("/actuator/(info|info/.*|health|health/.*)"); + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("/actuator/(health|health/.*|info|info/.*)"); + }); } @Test public void should_return_endpoints_with_context_path() { - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - ServerProperties properties = new ServerProperties(); - properties.getServlet().setContextPath("foo"); - - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); - - return Arrays.asList(infoEndpoint, healthEndpoint); - }; - - Optional pattern = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(pattern).isNotEmpty(); - then(pattern.get().pattern()) - .isEqualTo("foo/actuator/(info|info/.*|health|health/.*)"); + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("foo/actuator/(health|health/.*|info|info/.*)"); + }); } @Test public void should_return_endpoints_without_context_path_and_base_path_set_to_root() { - ServerProperties properties = new ServerProperties(); - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - webEndpointProperties.setBasePath("/"); - - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); - - return Arrays.asList(infoEndpoint, healthEndpoint); - }; - - Optional pattern = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(pattern).isNotEmpty(); - then(pattern.get().pattern()).isEqualTo("/(info|info/.*|health|health/.*)"); + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.endpoints.web.base-path=/") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()).contains("/(health|health/.*|info|info/.*)"); + }); } @Test public void should_return_endpoints_with_context_path_and_base_path_set_to_root() { - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - webEndpointProperties.setBasePath("/"); - ServerProperties properties = new ServerProperties(); - properties.getServlet().setContextPath("foo"); - - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); - - return Arrays.asList(infoEndpoint, healthEndpoint); - }; - - Optional pattern = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(pattern).isNotEmpty(); - then(pattern.get().pattern()).isEqualTo("foo/(info|info/.*|health|health/.*)"); + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.endpoints.web.base-path=/", + "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("foo/(health|health/.*|info|info/.*)"); + }); } @Test - public void should_return_endpoints_with_actuator_context_path_set_to_root() { - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - webEndpointProperties.setBasePath("/"); - ServerProperties properties = new ServerProperties(); - properties.getServlet().setContextPath("foo"); - - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); - - return Arrays.asList(infoEndpoint, healthEndpoint); - }; - - Optional patternDifferentPort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsDifferentPort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(patternDifferentPort).isNotEmpty(); - then(patternDifferentPort.get().pattern()) - .isEqualTo("/(info|info/.*|health|health/.*)"); - - Optional patternSamePort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(patternSamePort).isNotEmpty(); - then(patternSamePort.get().pattern()) - .isEqualTo("foo/(info|info/.*|health|health/.*)"); + public void should_return_endpoints_with_context_path_and_base_path_set_to_root_different_port() { + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.endpoints.web.base-path=/", + "management.servet.port=0", "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()).contains("/(health|health/.*|info|info/.*)"); + }); } @Test public void should_return_endpoints_with_actuator_context_path_only() { - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - webEndpointProperties.setBasePath("/mgt"); - ServerProperties properties = new ServerProperties(); - properties.getServlet().setContextPath("foo"); - - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); - - return Arrays.asList(infoEndpoint, healthEndpoint); - }; - - Optional patternDifferentPort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsDifferentPort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(patternDifferentPort).isNotEmpty(); - then(patternDifferentPort.get().pattern()) - .isEqualTo("/mgt/(info|info/.*|health|health/.*)"); - - Optional patternSamePort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(patternSamePort).isNotEmpty(); - then(patternSamePort.get().pattern()) - .isEqualTo("foo/mgt/(info|info/.*|health|health/.*)"); + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.endpoints.web.base-path=/mgt", + "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("foo/mgt/(health|health/.*|info|info/.*)"); + }); } @Test public void should_return_endpoints_with_actuator_default_context_path() { - WebEndpointProperties webEndpointProperties = new WebEndpointProperties(); - ServerProperties properties = new ServerProperties(); - properties.getServlet().setContextPath("/foo"); - properties.setPort(8080); + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("foo/actuator/(health|health/.*|info|info/.*)"); + }); + } - EndpointsSupplier endpointsSupplier = () -> { - ExposableWebEndpoint infoEndpoint = createEndpoint("info"); - ExposableWebEndpoint healthEndpoint = createEndpoint("health"); + @Test + public void should_return_endpoints_with_actuator_default_context_path_different_port() { + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.servet.port=0", "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("/actuator/(health|health/.*|info|info/.*)"); + }); + } - return Arrays.asList(infoEndpoint, healthEndpoint); - }; + @Test + public void should_return_endpoints_with_actuator_context_path_only_different_port() { + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.endpoints.web.base-path=/mgt", + "management.servet.port=0", "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("/mgt/(health|health/.*|info|info/.*)"); + }); + } - Optional patternDifferentPort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsDifferentPort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(patternDifferentPort).isNotEmpty(); - then(patternDifferentPort.get().pattern()) - .isEqualTo("/actuator/(info|info/.*|health|health/.*)"); - - Optional patternSamePort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig() - .skipPatternForActuatorEndpointsSamePort(properties, - webEndpointProperties, endpointsSupplier) - .skipPattern(); - - then(patternSamePort).isNotEmpty(); - then(patternSamePort.get().pattern()) - .isEqualTo("/foo/actuator/(info|info/.*|health|health/.*)"); + @Test + public void should_return_endpoints_with_context_path_different_port() { + contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) + .withPropertyValues("management.endpoint.health.enabled=true", + "management.endpoint.info.enabled=true", + "management.endpoints.web.exposure.include=info,health", + "management.servet.port=0", "server.servlet.context-path=foo") + .run(context -> { + SkipPatternProvider skipPatternProvider = context + .getBean(SkipPatternProvider.class); + Pattern pattern = skipPatternProvider.skipPattern(); + then(pattern.pattern()) + .contains("/actuator/(health|health/.*|info|info/.*)"); + }); } @Test @@ -301,29 +293,13 @@ public class SkipPatternProviderConfigTest { return () -> Optional.of(Pattern.compile("bar")); } - private ExposableWebEndpoint createEndpoint(final String name) { - return new ExposableWebEndpoint() { + @Configuration + @ImportAutoConfiguration({ DispatcherServletAutoConfiguration.class, + InfoEndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class, + HealthEndpointAutoConfiguration.class, EndpointAutoConfiguration.class, + WebEndpointAutoConfiguration.class }) + @EnableConfigurationProperties(ServerProperties.class) + static class EndpointConfig { - @Override - public String getRootPath() { - return name; - } - - @Override - public EndpointId getEndpointId() { - return EndpointId.of(name); - } - - @Override - public boolean isEnableByDefault() { - return false; - } - - @Override - public Collection getOperations() { - return null; - } - }; } - } From 28aa587aa4dd30ddaaec6ed87a127ee3cbacc0a1 Mon Sep 17 00:00:00 2001 From: reta Date: Wed, 27 Feb 2019 09:05:22 -0500 Subject: [PATCH 2/4] Addressing code review comments, made assertions more strict --- .../web/SkipPatternProviderConfigTest.java | 210 ++++++++---------- 1 file changed, 90 insertions(+), 120 deletions(-) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java index 864010504..45495e65b 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java @@ -17,9 +17,11 @@ package org.springframework.cloud.sleuth.instrument.web; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.junit.Test; @@ -34,13 +36,13 @@ import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServe import org.springframework.boot.actuate.endpoint.EndpointsSupplier; import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration; import org.springframework.boot.context.annotation.UserConfigurations; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.BDDAssertions.then; @@ -51,17 +53,18 @@ import static org.assertj.core.api.BDDAssertions.then; public class SkipPatternProviderConfigTest { private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(TraceAutoConfiguration.class, + .withConfiguration(AutoConfigurations.of(DispatcherServletAutoConfiguration.class, + InfoEndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class, + HealthEndpointAutoConfiguration.class, EndpointAutoConfiguration.class, + WebEndpointAutoConfiguration.class, TraceAutoConfiguration.class, TraceWebAutoConfiguration.class)); @Test public void should_pick_skip_pattern_from_sleuth_properties() throws Exception { contextRunner.withPropertyValues("spring.sleuth.web.skip-pattern=foo.*|bar.*") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()).isEqualTo("foo.*|bar.*"); + final String pattern = extractPattern(context); + then(pattern).isEqualTo("foo.*|bar.*"); }); } @@ -71,10 +74,8 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("spring.sleuth.web.skip-pattern=foo.*|bar.*", "spring.sleuth.web.additional-skip-pattern=baz.*|faz.*") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()).isEqualTo("foo.*|bar.*|baz.*|faz.*"); + final String pattern = extractPattern(context); + then(pattern).isEqualTo("foo.*|bar.*|baz.*|faz.*"); }); } @@ -93,13 +94,12 @@ public class SkipPatternProviderConfigTest { public void should_return_management_context_with_context_path() throws Exception { contextRunner .withConfiguration(UserConfigurations.of( - ManagementContextAutoConfiguration.class, EndpointConfig.class)) + ManagementContextAutoConfiguration.class, ServerPropertiesConfig.class)) .withPropertyValues("management.server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()).contains("|foo.*"); + final String pattern = extractPattern(context); + then(pattern).contains("|foo.*"); + then(extractAllPatterns(context)).contains("foo.*"); }); } @@ -116,162 +116,114 @@ public class SkipPatternProviderConfigTest { @Test public void should_return_endpoints_without_context_path() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("/actuator/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("/actuator/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("/actuator/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_context_path() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "server.servlet.context-path=foo") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("foo/actuator/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("foo/actuator/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("foo/actuator/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_without_context_path_and_base_path_set_to_root() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.endpoints.web.base-path=/") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.endpoints.web.base-path=/") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()).contains("/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_context_path_and_base_path_set_to_root() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.endpoints.web.base-path=/", + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.endpoints.web.base-path=/", "server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("foo/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("foo/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("foo/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_context_path_and_base_path_set_to_root_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.endpoints.web.base-path=/", - "management.servet.port=0", "server.servlet.context-path=foo") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.endpoints.web.base-path=/", + "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()).contains("/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_actuator_context_path_only() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.endpoints.web.base-path=/mgt", + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.endpoints.web.base-path=/mgt", "server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("foo/mgt/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("foo/mgt/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("foo/mgt/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_actuator_default_context_path() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "server.servlet.context-path=foo") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("foo/actuator/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("foo/actuator/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("foo/actuator/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_actuator_default_context_path_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.servet.port=0", "server.servlet.context-path=foo") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("/actuator/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("/actuator/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("/actuator/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_actuator_context_path_only_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.endpoints.web.base-path=/mgt", - "management.servet.port=0", "server.servlet.context-path=foo") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.endpoints.web.base-path=/mgt", + "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("/mgt/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("/mgt/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("/mgt/(health|health/.*|info|info/.*)"); }); } @Test public void should_return_endpoints_with_context_path_different_port() { - contextRunner.withConfiguration(UserConfigurations.of(EndpointConfig.class)) - .withPropertyValues("management.endpoint.health.enabled=true", - "management.endpoint.info.enabled=true", - "management.endpoints.web.exposure.include=info,health", - "management.servet.port=0", "server.servlet.context-path=foo") + contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) + .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - SkipPatternProvider skipPatternProvider = context - .getBean(SkipPatternProvider.class); - Pattern pattern = skipPatternProvider.skipPattern(); - then(pattern.pattern()) - .contains("/actuator/(health|health/.*|info|info/.*)"); + final String pattern = extractPattern(context); + then(pattern).contains("/actuator/(health|health/.*|info|info/.*)"); + then(extractAllPatterns(context)).contains("/actuator/(health|health/.*|info|info/.*)"); }); } @@ -292,14 +244,32 @@ public class SkipPatternProviderConfigTest { private SingleSkipPattern bar() { return () -> Optional.of(Pattern.compile("bar")); } + + /** + * Extracts the patterns from pattern provider + */ + private String extractPattern(ApplicationContext context) { + SkipPatternProvider skipPatternProvider = context.getBean(SkipPatternProvider.class); + return skipPatternProvider.skipPattern().pattern(); + } + + /** + * Extracts all single patterns + */ + private Collection extractAllPatterns(ApplicationContext context) { + return context + .getBeansOfType(SingleSkipPattern.class) + .values() + .stream() + .map(SingleSkipPattern::skipPattern) + .filter(Optional::isPresent) + .map(Optional::get) + .map(Pattern::pattern) + .collect(Collectors.toList()); + } @Configuration - @ImportAutoConfiguration({ DispatcherServletAutoConfiguration.class, - InfoEndpointAutoConfiguration.class, HealthIndicatorAutoConfiguration.class, - HealthEndpointAutoConfiguration.class, EndpointAutoConfiguration.class, - WebEndpointAutoConfiguration.class }) @EnableConfigurationProperties(ServerProperties.class) - static class EndpointConfig { - + static class ServerPropertiesConfig { } } From 4fa0b6448236ce1cda4eae93c771859fd2d81cfc Mon Sep 17 00:00:00 2001 From: reta Date: Mon, 11 Mar 2019 19:49:31 -0400 Subject: [PATCH 3/4] Addressing code review comments, made assertions exact matches with default pattern Fixing compilation issue (PagedResources -> PagedModel) --- .../web/SkipPatternProviderConfigTest.java | 64 ++++++------------- 1 file changed, 18 insertions(+), 46 deletions(-) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java index 45495e65b..c5716eeb4 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java @@ -21,7 +21,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.regex.Pattern; -import java.util.stream.Collectors; import org.junit.Test; @@ -98,8 +97,7 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("|foo.*"); - then(extractAllPatterns(context)).contains("foo.*"); + then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)", "foo.*")); }); } @@ -119,8 +117,7 @@ public class SkipPatternProviderConfigTest { contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("/actuator/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("/actuator/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)")); }); } @@ -130,8 +127,7 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("foo/actuator/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("foo/actuator/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("foo/actuator/(health|health/.*|info|info/.*)")); }); } @@ -141,8 +137,7 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.endpoints.web.base-path=/") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("/(health|health/.*|info|info/.*)")); }); } @@ -153,8 +148,7 @@ public class SkipPatternProviderConfigTest { "server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("foo/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("foo/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("foo/(health|health/.*|info|info/.*)")); }); } @@ -165,8 +159,7 @@ public class SkipPatternProviderConfigTest { "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("/(health|health/.*|info|info/.*)")); }); } @@ -177,19 +170,7 @@ public class SkipPatternProviderConfigTest { "server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("foo/mgt/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("foo/mgt/(health|health/.*|info|info/.*)"); - }); - } - - @Test - public void should_return_endpoints_with_actuator_default_context_path() { - contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) - .withPropertyValues("server.servlet.context-path=foo") - .run(context -> { - final String pattern = extractPattern(context); - then(pattern).contains("foo/actuator/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("foo/actuator/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("foo/mgt/(health|health/.*|info|info/.*)")); }); } @@ -199,8 +180,7 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("/actuator/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("/actuator/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)")); }); } @@ -211,8 +191,7 @@ public class SkipPatternProviderConfigTest { "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("/mgt/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("/mgt/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("/mgt/(health|health/.*|info|info/.*)")); }); } @@ -222,8 +201,7 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") .run(context -> { final String pattern = extractPattern(context); - then(pattern).contains("/actuator/(health|health/.*|info|info/.*)"); - then(extractAllPatterns(context)).contains("/actuator/(health|health/.*|info|info/.*)"); + then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)")); }); } @@ -253,21 +231,15 @@ public class SkipPatternProviderConfigTest { return skipPatternProvider.skipPattern().pattern(); } - /** - * Extracts all single patterns - */ - private Collection extractAllPatterns(ApplicationContext context) { - return context - .getBeansOfType(SingleSkipPattern.class) - .values() - .stream() - .map(SingleSkipPattern::skipPattern) - .filter(Optional::isPresent) - .map(Optional::get) - .map(Pattern::pattern) - .collect(Collectors.toList()); + private Collection withDefaults(String pattern, String ... tail) { + final String tailPattern = (tail.length == 0) ? "" : "|" + String.join("|", tail); + + return Arrays.asList( + pattern + "|" + SleuthWebProperties.DEFAULT_SKIP_PATTERN + tailPattern, + SleuthWebProperties.DEFAULT_SKIP_PATTERN + "|" + pattern + tailPattern + ); } - + @Configuration @EnableConfigurationProperties(ServerProperties.class) static class ServerPropertiesConfig { From c7cc0a81ad1987ea24918aa1351cfefd191cde90 Mon Sep 17 00:00:00 2001 From: reta Date: Tue, 12 Mar 2019 22:12:52 -0400 Subject: [PATCH 4/4] Addressing code review comments, rewrote assertions to make exact match against the SingleSkipPattern --- .../web/SkipPatternProviderConfigTest.java | 64 +++++++++++-------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java index c5716eeb4..36861b261 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/SkipPatternProviderConfigTest.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Optional; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.junit.Test; @@ -96,8 +97,9 @@ public class SkipPatternProviderConfigTest { ManagementContextAutoConfiguration.class, ServerPropertiesConfig.class)) .withPropertyValues("management.server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)", "foo.*")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/actuator/(health|health/.*|info|info/.*)", "foo.*", + SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -116,8 +118,8 @@ public class SkipPatternProviderConfigTest { public void should_return_endpoints_without_context_path() { contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -126,8 +128,8 @@ public class SkipPatternProviderConfigTest { contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("foo/actuator/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "foo/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -136,8 +138,8 @@ public class SkipPatternProviderConfigTest { contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.endpoints.web.base-path=/") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -147,8 +149,8 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.endpoints.web.base-path=/", "server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("foo/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "foo/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -158,8 +160,8 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.endpoints.web.base-path=/", "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -169,8 +171,8 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.endpoints.web.base-path=/mgt", "server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("foo/mgt/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "foo/mgt/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -179,8 +181,8 @@ public class SkipPatternProviderConfigTest { contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -190,8 +192,8 @@ public class SkipPatternProviderConfigTest { .withPropertyValues("management.endpoints.web.base-path=/mgt", "management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/mgt/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/mgt/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -200,8 +202,8 @@ public class SkipPatternProviderConfigTest { contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class)) .withPropertyValues("management.server.port=0", "server.servlet.context-path=foo") .run(context -> { - final String pattern = extractPattern(context); - then(pattern).isIn(withDefaults("/actuator/(health|health/.*|info|info/.*)")); + then(extractAllPatterns(context)).containsExactlyInAnyOrder( + "/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN); }); } @@ -230,14 +232,20 @@ public class SkipPatternProviderConfigTest { SkipPatternProvider skipPatternProvider = context.getBean(SkipPatternProvider.class); return skipPatternProvider.skipPattern().pattern(); } - - private Collection withDefaults(String pattern, String ... tail) { - final String tailPattern = (tail.length == 0) ? "" : "|" + String.join("|", tail); - - return Arrays.asList( - pattern + "|" + SleuthWebProperties.DEFAULT_SKIP_PATTERN + tailPattern, - SleuthWebProperties.DEFAULT_SKIP_PATTERN + "|" + pattern + tailPattern - ); + + /** + * Extracts all single patterns + */ + private Collection extractAllPatterns(ApplicationContext context) { + return context + .getBeansOfType(SingleSkipPattern.class) + .values() + .stream() + .map(SingleSkipPattern::skipPattern) + .filter(Optional::isPresent) + .map(Optional::get) + .map(Pattern::pattern) + .collect(Collectors.toList()); } @Configuration