Merge pull request #1222 from reta/refactor.skip.pattern.test
Refactored SkipPatternProviderConfigTest to use WebApplicationContextRunner instead of manually instantiated configurations
This commit is contained in:
@@ -21,16 +21,29 @@ 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;
|
||||
|
||||
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.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;
|
||||
|
||||
@@ -39,26 +52,31 @@ import static org.assertj.core.api.BDDAssertions.then;
|
||||
*/
|
||||
public class SkipPatternProviderConfigTest {
|
||||
|
||||
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner()
|
||||
.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 {
|
||||
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 -> {
|
||||
final String pattern = extractPattern(context);
|
||||
then(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 -> {
|
||||
final String pattern = extractPattern(context);
|
||||
then(pattern).isEqualTo("foo.*|bar.*|baz.*|faz.*");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -74,14 +92,15 @@ 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> pattern = new TraceWebAutoConfiguration.ManagementSkipPatternProviderConfig()
|
||||
.skipPatternForManagementServerProperties(properties).skipPattern();
|
||||
|
||||
then(pattern).isNotEmpty();
|
||||
then(pattern.get().pattern()).isEqualTo("foo.*");
|
||||
contextRunner
|
||||
.withConfiguration(UserConfigurations.of(
|
||||
ManagementContextAutoConfiguration.class, ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/actuator/(health|health/.*|info|info/.*)", "foo.*",
|
||||
SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -97,190 +116,95 @@ public class SkipPatternProviderConfigTest {
|
||||
|
||||
@Test
|
||||
public void should_return_endpoints_without_context_path() {
|
||||
ServerProperties properties = new ServerProperties();
|
||||
WebEndpointProperties webEndpointProperties = new WebEndpointProperties();
|
||||
EndpointsSupplier<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_endpoints_with_context_path() {
|
||||
WebEndpointProperties webEndpointProperties = new WebEndpointProperties();
|
||||
ServerProperties properties = new ServerProperties();
|
||||
properties.getServlet().setContextPath("foo");
|
||||
|
||||
EndpointsSupplier<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"foo/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@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<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.endpoints.web.base-path=/")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@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<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.endpoints.web.base-path=/",
|
||||
"server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"foo/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@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<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> patternDifferentPort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig()
|
||||
.skipPatternForActuatorEndpointsDifferentPort(properties,
|
||||
webEndpointProperties, endpointsSupplier)
|
||||
.skipPattern();
|
||||
|
||||
then(patternDifferentPort).isNotEmpty();
|
||||
then(patternDifferentPort.get().pattern())
|
||||
.isEqualTo("/(info|info/.*|health|health/.*)");
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.endpoints.web.base-path=/",
|
||||
"management.server.port=0", "server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@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<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> patternDifferentPort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig()
|
||||
.skipPatternForActuatorEndpointsDifferentPort(properties,
|
||||
webEndpointProperties, endpointsSupplier)
|
||||
.skipPattern();
|
||||
|
||||
then(patternDifferentPort).isNotEmpty();
|
||||
then(patternDifferentPort.get().pattern())
|
||||
.isEqualTo("/mgt/(info|info/.*|health|health/.*)");
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.endpoints.web.base-path=/mgt",
|
||||
"server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"foo/mgt/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@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);
|
||||
public void should_return_endpoints_with_actuator_default_context_path_different_port() {
|
||||
contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.server.port=0", "server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
EndpointsSupplier<ExposableWebEndpoint> endpointsSupplier = () -> {
|
||||
ExposableWebEndpoint infoEndpoint = createEndpoint("info");
|
||||
ExposableWebEndpoint healthEndpoint = createEndpoint("health");
|
||||
@Test
|
||||
public void should_return_endpoints_with_actuator_context_path_only_different_port() {
|
||||
contextRunner.withConfiguration(UserConfigurations.of(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.endpoints.web.base-path=/mgt",
|
||||
"management.server.port=0", "server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/mgt/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
return Arrays.asList(infoEndpoint, healthEndpoint);
|
||||
};
|
||||
|
||||
Optional<Pattern> patternDifferentPort = new TraceWebAutoConfiguration.ActuatorSkipPatternProviderConfig()
|
||||
.skipPatternForActuatorEndpointsDifferentPort(properties,
|
||||
webEndpointProperties, endpointsSupplier)
|
||||
.skipPattern();
|
||||
|
||||
then(patternDifferentPort).isNotEmpty();
|
||||
then(patternDifferentPort.get().pattern())
|
||||
.isEqualTo("/actuator/(info|info/.*|health|health/.*)");
|
||||
|
||||
Optional<Pattern> 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(ServerPropertiesConfig.class))
|
||||
.withPropertyValues("management.server.port=0", "server.servlet.context-path=foo")
|
||||
.run(context -> {
|
||||
then(extractAllPatterns(context)).containsExactlyInAnyOrder(
|
||||
"/actuator/(health|health/.*|info|info/.*)", SleuthWebProperties.DEFAULT_SKIP_PATTERN);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -300,30 +224,32 @@ public class SkipPatternProviderConfigTest {
|
||||
private SingleSkipPattern bar() {
|
||||
return () -> Optional.of(Pattern.compile("bar"));
|
||||
}
|
||||
|
||||
private ExposableWebEndpoint createEndpoint(final String name) {
|
||||
return new ExposableWebEndpoint() {
|
||||
|
||||
@Override
|
||||
public String getRootPath() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EndpointId getEndpointId() {
|
||||
return EndpointId.of(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnableByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<WebOperation> getOperations() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 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<String> 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
|
||||
@EnableConfigurationProperties(ServerProperties.class)
|
||||
static class ServerPropertiesConfig {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user