Skip to content

Commit c9558d4

Browse files
committed
Merge Jersey server tests from #12905
1 parent d937b73 commit c9558d4

File tree

2 files changed

+64
-16
lines changed

2 files changed

+64
-16
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/jersey2/server/JerseyServerMetricsAutoConfiguration.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
3030
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
3131
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
32+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
3233
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
3334
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3435
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -40,17 +41,18 @@
4041
import org.springframework.core.annotation.AnnotationUtils;
4142

4243
/**
43-
* Auto-configuration for Jersey server instrumentation.
44+
* {@link EnableAutoConfiguration Auto-configuration} for Jersey server instrumentation.
4445
*
4546
* @author Michael Weirauch
47+
* @author Michael Simons
4648
* @since 2.1.0
4749
*/
4850
@Configuration
4951
@AutoConfigureAfter({ MetricsAutoConfiguration.class,
5052
SimpleMetricsExportAutoConfiguration.class })
5153
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
5254
@ConditionalOnClass({ ResourceConfig.class, MetricsApplicationEventListener.class })
53-
@ConditionalOnBean(MeterRegistry.class)
55+
@ConditionalOnBean({ MeterRegistry.class, ResourceConfig.class })
5456
@EnableConfigurationProperties(JerseyServerMetricsProperties.class)
5557
public class JerseyServerMetricsAutoConfiguration {
5658

@@ -61,7 +63,7 @@ public DefaultJerseyTagsProvider jerseyTagsProvider() {
6163
}
6264

6365
@Bean
64-
public ResourceConfigCustomizer jerseyResourceConfigCustomizer(
66+
public ResourceConfigCustomizer jerseyServerMetricsResourceConfigCustomizer(
6567
MeterRegistry meterRegistry, JerseyServerMetricsProperties properties,
6668
JerseyTagsProvider tagsProvider) {
6769
return (config) -> config.register(new MetricsApplicationEventListener(

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/jersey2/server/JerseyServerMetricsAutoConfigurationTests.java

Lines changed: 59 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,33 @@
1818

1919
import java.net.URI;
2020

21-
import javax.ws.rs.ApplicationPath;
2221
import javax.ws.rs.GET;
2322
import javax.ws.rs.Path;
2423
import javax.ws.rs.PathParam;
2524

2625
import io.micrometer.core.instrument.MeterRegistry;
26+
import io.micrometer.core.instrument.Tag;
2727
import io.micrometer.core.instrument.Timer;
28+
import io.micrometer.jersey2.server.DefaultJerseyTagsProvider;
29+
import io.micrometer.jersey2.server.JerseyTagsProvider;
2830
import io.micrometer.jersey2.server.MetricsApplicationEventListener;
2931
import org.glassfish.jersey.server.ResourceConfig;
32+
import org.glassfish.jersey.server.monitoring.RequestEvent;
3033
import org.junit.Test;
3134

3235
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
3336
import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration;
37+
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
3438
import org.springframework.boot.autoconfigure.AutoConfigurations;
3539
import org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration;
3640
import org.springframework.boot.autoconfigure.jersey.ResourceConfigCustomizer;
3741
import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration;
3842
import org.springframework.boot.test.context.FilteredClassLoader;
3943
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
44+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
4045
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
4146
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
4247
import org.springframework.context.annotation.Bean;
43-
import org.springframework.context.annotation.Configuration;
4448
import org.springframework.web.client.RestTemplate;
4549

4650
import static org.assertj.core.api.Assertions.assertThat;
@@ -49,10 +53,15 @@
4953
* Tests for {@link JerseyServerMetricsAutoConfiguration}.
5054
*
5155
* @author Michael Weirauch
56+
* @author Michael Simons
5257
*/
5358
public class JerseyServerMetricsAutoConfigurationTests {
5459

55-
private WebApplicationContextRunner contextRunner = new WebApplicationContextRunner(
60+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
61+
.with(MetricsRun.simple()).withConfiguration(
62+
AutoConfigurations.of(JerseyServerMetricsAutoConfiguration.class));
63+
64+
private final WebApplicationContextRunner webContextRunner = new WebApplicationContextRunner(
5665
AnnotationConfigServletWebServerApplicationContext::new)
5766
.withConfiguration(
5867
AutoConfigurations.of(JerseyAutoConfiguration.class,
@@ -63,9 +72,30 @@ public class JerseyServerMetricsAutoConfigurationTests {
6372
.withUserConfiguration(ResourceConfiguration.class)
6473
.withPropertyValues("server.port:0");
6574

75+
@Test
76+
public void shouldOnlyBeActiveInWebApplicationContext() {
77+
this.contextRunner.run((context) -> assertThat(context)
78+
.doesNotHaveBean(ResourceConfigCustomizer.class));
79+
}
80+
81+
@Test
82+
public void shouldProvideAllNecessaryBeans() {
83+
this.webContextRunner.run((context) -> assertThat(context)
84+
.hasSingleBean(DefaultJerseyTagsProvider.class)
85+
.hasSingleBean(ResourceConfigCustomizer.class));
86+
}
87+
88+
@Test
89+
public void shouldHonorExistingTagProvider() {
90+
this.webContextRunner
91+
.withUserConfiguration(CustomJerseyTagsProviderConfiguration.class)
92+
.run((context) -> assertThat(context)
93+
.hasSingleBean(CustomJerseyTagsProvider.class));
94+
}
95+
6696
@Test
6797
public void httpRequestsAreTimed() {
68-
this.contextRunner.run((context) -> {
98+
this.webContextRunner.run((context) -> {
6999
doRequest(context);
70100

71101
MeterRegistry registry = context.getBean(MeterRegistry.class);
@@ -77,7 +107,7 @@ public void httpRequestsAreTimed() {
77107

78108
@Test
79109
public void noHttpRequestsTimedWhenJerseyInstrumentationMissingFromClasspath() {
80-
this.contextRunner
110+
this.webContextRunner
81111
.withClassLoader(
82112
new FilteredClassLoader(MetricsApplicationEventListener.class))
83113
.run((context) -> {
@@ -98,18 +128,11 @@ private static void doRequest(AssertableWebApplicationContext context) {
98128
String.class);
99129
}
100130

101-
@Configuration
102-
@ApplicationPath("/")
103131
static class ResourceConfiguration {
104132

105133
@Bean
106134
ResourceConfig resourceConfig() {
107-
return new ResourceConfig();
108-
}
109-
110-
@Bean
111-
ResourceConfigCustomizer resourceConfigCustomizer() {
112-
return (config) -> config.register(new TestResource());
135+
return new ResourceConfig().register(new TestResource());
113136
}
114137

115138
@Path("/users")
@@ -125,4 +148,27 @@ public String getUser(@PathParam("id") String id) {
125148

126149
}
127150

151+
static class CustomJerseyTagsProviderConfiguration {
152+
153+
@Bean
154+
JerseyTagsProvider customJerseyTagsProvider() {
155+
return new CustomJerseyTagsProvider();
156+
}
157+
158+
}
159+
160+
static class CustomJerseyTagsProvider implements JerseyTagsProvider {
161+
162+
@Override
163+
public Iterable<Tag> httpRequestTags(RequestEvent event) {
164+
return null;
165+
}
166+
167+
@Override
168+
public Iterable<Tag> httpLongRequestTags(RequestEvent event) {
169+
return null;
170+
}
171+
172+
}
173+
128174
}

0 commit comments

Comments
 (0)