Skip to content

Commit

Permalink
Fix conditions on auto-configured WebMvcMetricsFilter
Browse files Browse the repository at this point in the history
Closes gh-31150
  • Loading branch information
wilkinsona committed May 23, 2022
1 parent 16f4974 commit 24dc525
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 8 deletions.
Expand Up @@ -41,6 +41,7 @@
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.web.servlet.ConditionalOnMissingFilterBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
Expand Down Expand Up @@ -80,7 +81,7 @@ public DefaultWebMvcTagsProvider webMvcTagsProvider(ObjectProvider<WebMvcTagsCon
}

@Bean
@ConditionalOnMissingBean
@ConditionalOnMissingFilterBean
public FilterRegistrationBean<WebMvcMetricsFilter> webMvcMetricsFilter(MeterRegistry registry,
WebMvcTagsProvider tagsProvider) {
ServerRequest request = this.properties.getWeb().getServer().getRequest();
Expand Down
Expand Up @@ -122,12 +122,32 @@ void filterRegistrationHasExpectedDispatcherTypesAndOrder() {
}

@Test
void filterRegistrationBacksOff() {
this.contextRunner.withUserConfiguration(TestWebMvcMetricsFilterConfiguration.class).run((context) -> {
assertThat(context).hasSingleBean(FilterRegistrationBean.class);
assertThat(context.getBean(FilterRegistrationBean.class))
.isSameAs(context.getBean("testWebMvcMetricsFilter"));
});
void filterRegistrationBacksOffWithAnotherWebMvcMetricsFilterRegistration() {
this.contextRunner.withUserConfiguration(TestWebMvcMetricsFilterRegistrationConfiguration.class)
.run((context) -> {
assertThat(context).hasSingleBean(FilterRegistrationBean.class);
assertThat(context.getBean(FilterRegistrationBean.class))
.isSameAs(context.getBean("testWebMvcMetricsFilter"));
});
}

@Test
void filterRegistrationBacksOffWithAnotherWebMvcMetricsFilter() {
this.contextRunner.withUserConfiguration(TestWebMvcMetricsFilterConfiguration.class)
.run((context) -> assertThat(context).doesNotHaveBean(FilterRegistrationBean.class)
.hasSingleBean(WebMvcMetricsFilter.class));
}

@Test
void filterRegistrationDoesNotBackOffWithOtherFilterRegistration() {
this.contextRunner.withUserConfiguration(TestFilterRegistrationConfiguration.class)
.run((context) -> assertThat(context).hasBean("testFilter").hasBean("webMvcMetricsFilter"));
}

@Test
void filterRegistrationDoesNotBackOffWithOtherFilter() {
this.contextRunner.withUserConfiguration(TestFilterConfiguration.class)
.run((context) -> assertThat(context).hasBean("testFilter").hasBean("webMvcMetricsFilter"));
}

@Test
Expand Down Expand Up @@ -258,7 +278,7 @@ public Iterable<Tag> getLongRequestTags(HttpServletRequest request, Object handl
}

@Configuration(proxyBeanMethods = false)
static class TestWebMvcMetricsFilterConfiguration {
static class TestWebMvcMetricsFilterRegistrationConfiguration {

@Bean
@SuppressWarnings("unchecked")
Expand All @@ -268,4 +288,35 @@ FilterRegistrationBean<WebMvcMetricsFilter> testWebMvcMetricsFilter() {

}

@Configuration(proxyBeanMethods = false)
static class TestWebMvcMetricsFilterConfiguration {

@Bean
WebMvcMetricsFilter testWebMvcMetricsFilter() {
return new WebMvcMetricsFilter(null, null, null, null);
}

}

@Configuration(proxyBeanMethods = false)
static class TestFilterRegistrationConfiguration {

@Bean
@SuppressWarnings("unchecked")
FilterRegistrationBean<Filter> testFilter() {
return mock(FilterRegistrationBean.class);
}

}

@Configuration(proxyBeanMethods = false)
static class TestFilterConfiguration {

@Bean
Filter testFilter() {
return mock(Filter.class);
}

}

}

0 comments on commit 24dc525

Please sign in to comment.