Merge pull request #32048 from jonatan-ivanov

* gh-32048:
  Build against Micrometer 1.10.0-M5 and Tracing 1.0.0-M8 snapshots

Closes gh-32048
This commit is contained in:
Andy Wilkinson 2022-09-06 20:15:58 +01:00
commit 754f47d6cc
9 changed files with 96 additions and 116 deletions

View File

@ -17,26 +17,27 @@
package org.springframework.boot.actuate.autoconfigure.observation; package org.springframework.boot.actuate.autoconfigure.observation;
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.observation.TimerObservationHandler; import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler;
import io.micrometer.observation.ObservationRegistry; import io.micrometer.observation.ObservationRegistry;
/** /**
* Registers the {@link TimerObservationHandler} with an {@link ObservationRegistry}. * Registers the {@link DefaultMeterObservationHandler} with an
* {@link ObservationRegistry}.
* *
* @author Moritz Halbritter * @author Moritz Halbritter
*/ */
class TimerObservationHandlerObservationRegistryCustomizer class DefaultMeterObservationHandlerObservationRegistryCustomizer
implements ObservationRegistryCustomizer<ObservationRegistry> { implements ObservationRegistryCustomizer<ObservationRegistry> {
private final MeterRegistry meterRegistry; private final MeterRegistry meterRegistry;
TimerObservationHandlerObservationRegistryCustomizer(MeterRegistry meterRegistry) { DefaultMeterObservationHandlerObservationRegistryCustomizer(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry; this.meterRegistry = meterRegistry;
} }
@Override @Override
public void customize(ObservationRegistry registry) { public void customize(ObservationRegistry registry) {
registry.observationConfig().observationHandler(new TimerObservationHandler(this.meterRegistry)); registry.observationConfig().observationHandler(new DefaultMeterObservationHandler(this.meterRegistry));
} }
} }

View File

@ -17,7 +17,7 @@
package org.springframework.boot.actuate.autoconfigure.observation; package org.springframework.boot.actuate.autoconfigure.observation;
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.observation.Observation.GlobalKeyValuesProvider; import io.micrometer.observation.Observation.GlobalObservationConvention;
import io.micrometer.observation.ObservationHandler; import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.ObservationPredicate; import io.micrometer.observation.ObservationPredicate;
import io.micrometer.observation.ObservationRegistry; import io.micrometer.observation.ObservationRegistry;
@ -48,11 +48,11 @@ public class ObservationAutoConfiguration {
static ObservationRegistryPostProcessor observationRegistryPostProcessor( static ObservationRegistryPostProcessor observationRegistryPostProcessor(
ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers, ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers,
ObjectProvider<ObservationPredicate> observationPredicates, ObjectProvider<ObservationPredicate> observationPredicates,
ObjectProvider<GlobalKeyValuesProvider<?>> keyValuesProviders, ObjectProvider<GlobalObservationConvention<?>> observationConventions,
ObjectProvider<ObservationHandler<?>> observationHandlers, ObjectProvider<ObservationHandler<?>> observationHandlers,
ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping) { ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping) {
return new ObservationRegistryPostProcessor(observationRegistryCustomizers, observationPredicates, return new ObservationRegistryPostProcessor(observationRegistryCustomizers, observationPredicates,
keyValuesProviders, observationHandlers, observationHandlerGrouping); observationConventions, observationHandlers, observationHandlerGrouping);
} }
@Bean @Bean
@ -66,9 +66,9 @@ public class ObservationAutoConfiguration {
static class MetricsConfiguration { static class MetricsConfiguration {
@Bean @Bean
TimerObservationHandlerObservationRegistryCustomizer enableTimerObservationHandler( DefaultMeterObservationHandlerObservationRegistryCustomizer enableDefaultMeterObservationHandler(
MeterRegistry meterRegistry) { MeterRegistry meterRegistry) {
return new TimerObservationHandlerObservationRegistryCustomizer(meterRegistry); return new DefaultMeterObservationHandlerObservationRegistryCustomizer(meterRegistry);
} }
} }

View File

@ -18,7 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.observation;
import java.util.List; import java.util.List;
import io.micrometer.observation.Observation.GlobalKeyValuesProvider; import io.micrometer.observation.Observation.GlobalObservationConvention;
import io.micrometer.observation.ObservationHandler; import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.ObservationPredicate; import io.micrometer.observation.ObservationPredicate;
import io.micrometer.observation.ObservationRegistry; import io.micrometer.observation.ObservationRegistry;
@ -29,10 +29,10 @@ import org.springframework.boot.util.LambdaSafe;
/** /**
* Configurer to apply {@link ObservationRegistryCustomizer customizers} to * Configurer to apply {@link ObservationRegistryCustomizer customizers} to
* {@link ObservationRegistry observation registries}. Installs * {@link ObservationRegistry observation registries}. Installs
* {@link ObservationPredicate observation predicates} and {@link GlobalKeyValuesProvider * {@link ObservationPredicate observation predicates} and
* global key values providers} into the {@link ObservationRegistry}. Also uses a * {@link GlobalObservationConvention global observation conventions} into the
* {@link ObservationHandlerGrouping} to group handlers, which are then added to the * {@link ObservationRegistry}. Also uses a {@link ObservationHandlerGrouping} to group
* {@link ObservationRegistry}. * handlers, which are then added to the {@link ObservationRegistry}.
* *
* @author Moritz Halbritter * @author Moritz Halbritter
*/ */
@ -42,7 +42,7 @@ class ObservationRegistryConfigurer {
private final ObjectProvider<ObservationPredicate> observationPredicates; private final ObjectProvider<ObservationPredicate> observationPredicates;
private final ObjectProvider<GlobalKeyValuesProvider<?>> keyValuesProviders; private final ObjectProvider<GlobalObservationConvention<?>> observationConventions;
private final ObjectProvider<ObservationHandler<?>> observationHandlers; private final ObjectProvider<ObservationHandler<?>> observationHandlers;
@ -50,19 +50,19 @@ class ObservationRegistryConfigurer {
ObservationRegistryConfigurer(ObjectProvider<ObservationRegistryCustomizer<?>> customizers, ObservationRegistryConfigurer(ObjectProvider<ObservationRegistryCustomizer<?>> customizers,
ObjectProvider<ObservationPredicate> observationPredicates, ObjectProvider<ObservationPredicate> observationPredicates,
ObjectProvider<GlobalKeyValuesProvider<?>> keyValuesProviders, ObjectProvider<GlobalObservationConvention<?>> observationConventions,
ObjectProvider<ObservationHandler<?>> observationHandlers, ObjectProvider<ObservationHandler<?>> observationHandlers,
ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping) { ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping) {
this.customizers = customizers; this.customizers = customizers;
this.observationPredicates = observationPredicates; this.observationPredicates = observationPredicates;
this.keyValuesProviders = keyValuesProviders; this.observationConventions = observationConventions;
this.observationHandlers = observationHandlers; this.observationHandlers = observationHandlers;
this.observationHandlerGrouping = observationHandlerGrouping; this.observationHandlerGrouping = observationHandlerGrouping;
} }
void configure(ObservationRegistry registry) { void configure(ObservationRegistry registry) {
registerObservationPredicates(registry); registerObservationPredicates(registry);
registerGlobalKeyValuesProviders(registry); registerGlobalObservationConventions(registry);
registerHandlers(registry); registerHandlers(registry);
customize(registry); customize(registry);
} }
@ -77,9 +77,9 @@ class ObservationRegistryConfigurer {
(observationPredicate) -> registry.observationConfig().observationPredicate(observationPredicate)); (observationPredicate) -> registry.observationConfig().observationPredicate(observationPredicate));
} }
private void registerGlobalKeyValuesProviders(ObservationRegistry registry) { private void registerGlobalObservationConventions(ObservationRegistry registry) {
this.keyValuesProviders.orderedStream() this.observationConventions.orderedStream()
.forEach((keyValuesProvider) -> registry.observationConfig().keyValuesProvider(keyValuesProvider)); .forEach((convention) -> registry.observationConfig().observationConvention(convention));
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")

View File

@ -16,7 +16,7 @@
package org.springframework.boot.actuate.autoconfigure.observation; package org.springframework.boot.actuate.autoconfigure.observation;
import io.micrometer.observation.Observation.GlobalKeyValuesProvider; import io.micrometer.observation.Observation.GlobalObservationConvention;
import io.micrometer.observation.ObservationHandler; import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.ObservationPredicate; import io.micrometer.observation.ObservationPredicate;
import io.micrometer.observation.ObservationRegistry; import io.micrometer.observation.ObservationRegistry;
@ -38,7 +38,7 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor {
private final ObjectProvider<ObservationPredicate> observationPredicates; private final ObjectProvider<ObservationPredicate> observationPredicates;
private final ObjectProvider<GlobalKeyValuesProvider<?>> keyValuesProviders; private final ObjectProvider<GlobalObservationConvention<?>> observationConventions;
private final ObjectProvider<ObservationHandler<?>> observationHandlers; private final ObjectProvider<ObservationHandler<?>> observationHandlers;
@ -48,12 +48,12 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor {
ObservationRegistryPostProcessor(ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers, ObservationRegistryPostProcessor(ObjectProvider<ObservationRegistryCustomizer<?>> observationRegistryCustomizers,
ObjectProvider<ObservationPredicate> observationPredicates, ObjectProvider<ObservationPredicate> observationPredicates,
ObjectProvider<GlobalKeyValuesProvider<?>> keyValuesProviders, ObjectProvider<GlobalObservationConvention<?>> observationConventions,
ObjectProvider<ObservationHandler<?>> observationHandlers, ObjectProvider<ObservationHandler<?>> observationHandlers,
ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping) { ObjectProvider<ObservationHandlerGrouping> observationHandlerGrouping) {
this.observationRegistryCustomizers = observationRegistryCustomizers; this.observationRegistryCustomizers = observationRegistryCustomizers;
this.observationPredicates = observationPredicates; this.observationPredicates = observationPredicates;
this.keyValuesProviders = keyValuesProviders; this.observationConventions = observationConventions;
this.observationHandlers = observationHandlers; this.observationHandlers = observationHandlers;
this.observationHandlerGrouping = observationHandlerGrouping; this.observationHandlerGrouping = observationHandlerGrouping;
} }
@ -69,7 +69,7 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor {
private ObservationRegistryConfigurer getConfigurer() { private ObservationRegistryConfigurer getConfigurer() {
if (this.configurer == null) { if (this.configurer == null) {
this.configurer = new ObservationRegistryConfigurer(this.observationRegistryCustomizers, this.configurer = new ObservationRegistryConfigurer(this.observationRegistryCustomizers,
this.observationPredicates, this.keyValuesProviders, this.observationHandlers, this.observationPredicates, this.observationConventions, this.observationHandlers,
this.observationHandlerGrouping); this.observationHandlerGrouping);
} }
return this.configurer; return this.configurer;

View File

@ -18,10 +18,9 @@ package org.springframework.boot.actuate.autoconfigure.tracing;
import io.micrometer.tracing.Tracer; import io.micrometer.tracing.Tracer;
import io.micrometer.tracing.handler.DefaultTracingObservationHandler; import io.micrometer.tracing.handler.DefaultTracingObservationHandler;
import io.micrometer.tracing.handler.HttpClientTracingObservationHandler; import io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler;
import io.micrometer.tracing.handler.HttpServerTracingObservationHandler; import io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler;
import io.micrometer.tracing.http.HttpClientHandler; import io.micrometer.tracing.propagation.Propagator;
import io.micrometer.tracing.http.HttpServerHandler;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@ -50,40 +49,39 @@ public class MicrometerTracingAutoConfiguration {
/** /**
* {@code @Order} value of * {@code @Order} value of
* {@link #httpServerTracingObservationHandler(Tracer, HttpServerHandler)}. * {@link #propagatingReceiverTracingObservationHandler(Tracer, Propagator)}.
*/ */
public static final int HTTP_SERVER_TRACING_OBSERVATION_HANDLER_ORDER = 1000; public static final int RECEIVER_TRACING_OBSERVATION_HANDLER_ORDER = 1000;
/** /**
* {@code @Order} value of * {@code @Order} value of
* {@link #httpClientTracingObservationHandler(Tracer, HttpClientHandler)}. * {@link #propagatingSenderTracingObservationHandler(Tracer, Propagator)}.
*/ */
public static final int HTTP_CLIENT_TRACING_OBSERVATION_HANDLER_ORDER = 2000; public static final int SENDER_TRACING_OBSERVATION_HANDLER_ORDER = 2000;
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
@ConditionalOnBean(Tracer.class) @ConditionalOnBean(Tracer.class)
@Order(DEFAULT_TRACING_OBSERVATION_HANDLER_ORDER)
public DefaultTracingObservationHandler defaultTracingObservationHandler(Tracer tracer) { public DefaultTracingObservationHandler defaultTracingObservationHandler(Tracer tracer) {
return new DefaultTracingObservationHandler(tracer); return new DefaultTracingObservationHandler(tracer);
} }
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
@ConditionalOnBean({ Tracer.class, HttpServerHandler.class }) @ConditionalOnBean({ Tracer.class, Propagator.class })
@Order(HTTP_SERVER_TRACING_OBSERVATION_HANDLER_ORDER) @Order(SENDER_TRACING_OBSERVATION_HANDLER_ORDER)
public HttpServerTracingObservationHandler httpServerTracingObservationHandler(Tracer tracer, public PropagatingSenderTracingObservationHandler<?> propagatingSenderTracingObservationHandler(Tracer tracer,
HttpServerHandler httpServerHandler) { Propagator propagator) {
return new HttpServerTracingObservationHandler(tracer, httpServerHandler); return new PropagatingSenderTracingObservationHandler<>(tracer, propagator);
} }
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
@ConditionalOnBean({ Tracer.class, HttpClientHandler.class }) @ConditionalOnBean({ Tracer.class, Propagator.class })
@Order(HTTP_CLIENT_TRACING_OBSERVATION_HANDLER_ORDER) @Order(RECEIVER_TRACING_OBSERVATION_HANDLER_ORDER)
public HttpClientTracingObservationHandler httpClientTracingObservationHandler(Tracer tracer, public PropagatingReceiverTracingObservationHandler<?> propagatingReceiverTracingObservationHandler(Tracer tracer,
HttpClientHandler httpClientHandler) { Propagator propagator) {
return new HttpClientTracingObservationHandler(tracer, httpClientHandler); return new PropagatingReceiverTracingObservationHandler<>(tracer, propagator);
} }
} }

View File

@ -25,16 +25,16 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Tests for {@link TimerObservationHandlerObservationRegistryCustomizer}. * Tests for {@link DefaultMeterObservationHandlerObservationRegistryCustomizer}.
* *
* @author Moritz Halbritter * @author Moritz Halbritter
*/ */
class TimerObservationHandlerObservationRegistryCustomizerTests { class DefaultMeterObservationHandlerObservationRegistryCustomizerTests {
@Test @Test
void customizeInstallsTimerObservationHandler() { void customizeInstallsDefaultMeterObservationHandler() {
MeterRegistry meterRegistry = new SimpleMeterRegistry(); MeterRegistry meterRegistry = new SimpleMeterRegistry();
TimerObservationHandlerObservationRegistryCustomizer sut = new TimerObservationHandlerObservationRegistryCustomizer( DefaultMeterObservationHandlerObservationRegistryCustomizer sut = new DefaultMeterObservationHandlerObservationRegistryCustomizer(
meterRegistry); meterRegistry);
ObservationRegistry observationRegistry = ObservationRegistry.create(); ObservationRegistry observationRegistry = ObservationRegistry.create();
sut.customize(observationRegistry); sut.customize(observationRegistry);

View File

@ -26,7 +26,7 @@ import io.micrometer.core.instrument.observation.MeterObservationHandler;
import io.micrometer.core.instrument.search.MeterNotFoundException; import io.micrometer.core.instrument.search.MeterNotFoundException;
import io.micrometer.observation.Observation; import io.micrometer.observation.Observation;
import io.micrometer.observation.Observation.Context; import io.micrometer.observation.Observation.Context;
import io.micrometer.observation.Observation.GlobalKeyValuesProvider; import io.micrometer.observation.Observation.GlobalObservationConvention;
import io.micrometer.observation.ObservationHandler; import io.micrometer.observation.ObservationHandler;
import io.micrometer.observation.ObservationHandler.AllMatchingCompositeObservationHandler; import io.micrometer.observation.ObservationHandler.AllMatchingCompositeObservationHandler;
import io.micrometer.observation.ObservationHandler.FirstMatchingCompositeObservationHandler; import io.micrometer.observation.ObservationHandler.FirstMatchingCompositeObservationHandler;
@ -65,22 +65,22 @@ class ObservationAutoConfigurationTests {
.with(MetricsRun.simple()).withConfiguration(AutoConfigurations.of(ObservationAutoConfiguration.class)); .with(MetricsRun.simple()).withConfiguration(AutoConfigurations.of(ObservationAutoConfiguration.class));
@Test @Test
void autoConfiguresTimerObservationHandler() { void autoConfiguresDefaultMeterObservationHandler() {
this.contextRunner.run((context) -> { this.contextRunner.run((context) -> {
ObservationRegistry observationRegistry = context.getBean(ObservationRegistry.class); ObservationRegistry observationRegistry = context.getBean(ObservationRegistry.class);
Observation.start("test-observation", observationRegistry).stop(); Observation.start("test-observation", observationRegistry).stop();
// When a TimerObservationHandler is registered, every stopped Observation // When a DefaultMeterObservationHandler is registered, every stopped
// leads to a timer // Observation leads to a timer
MeterRegistry meterRegistry = context.getBean(MeterRegistry.class); MeterRegistry meterRegistry = context.getBean(MeterRegistry.class);
assertThat(meterRegistry.get("test-observation").timer().count()).isEqualTo(1); assertThat(meterRegistry.get("test-observation").timer().count()).isEqualTo(1);
}); });
} }
@Test @Test
void allowsTimerObservationHandlerToBeDisabled() { void allowsDefaultMeterObservationHandlerToBeDisabled() {
this.contextRunner.withClassLoader(new FilteredClassLoader(MeterRegistry.class)) this.contextRunner.withClassLoader(new FilteredClassLoader(MeterRegistry.class))
.run((context) -> assertThat(context) .run((context) -> assertThat(context)
.doesNotHaveBean(TimerObservationHandlerObservationRegistryCustomizer.class)); .doesNotHaveBean(DefaultMeterObservationHandlerObservationRegistryCustomizer.class));
} }
@Test @Test
@ -177,8 +177,8 @@ class ObservationAutoConfigurationTests {
static class GlobalKeyValuesProviders { static class GlobalKeyValuesProviders {
@Bean @Bean
Observation.GlobalKeyValuesProvider<?> customKeyValuesProvider() { GlobalObservationConvention<?> customConvention() {
return new GlobalKeyValuesProvider<>() { return new GlobalObservationConvention<>() {
@Override @Override
public boolean supportsContext(Context context) { public boolean supportsContext(Context context) {
return true; return true;

View File

@ -20,11 +20,10 @@ import java.util.List;
import io.micrometer.tracing.Tracer; import io.micrometer.tracing.Tracer;
import io.micrometer.tracing.handler.DefaultTracingObservationHandler; import io.micrometer.tracing.handler.DefaultTracingObservationHandler;
import io.micrometer.tracing.handler.HttpClientTracingObservationHandler; import io.micrometer.tracing.handler.PropagatingReceiverTracingObservationHandler;
import io.micrometer.tracing.handler.HttpServerTracingObservationHandler; import io.micrometer.tracing.handler.PropagatingSenderTracingObservationHandler;
import io.micrometer.tracing.handler.TracingObservationHandler; import io.micrometer.tracing.handler.TracingObservationHandler;
import io.micrometer.tracing.http.HttpClientHandler; import io.micrometer.tracing.propagation.Propagator;
import io.micrometer.tracing.http.HttpServerHandler;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.AutoConfigurations;
@ -48,26 +47,26 @@ class MicrometerTracingAutoConfigurationTests {
@Test @Test
void shouldSupplyBeans() { void shouldSupplyBeans() {
this.contextRunner.withUserConfiguration(TracerConfiguration.class, HttpClientHandlerConfiguration.class, this.contextRunner.withUserConfiguration(TracerConfiguration.class, PropagatorConfiguration.class)
HttpServerHandlerConfiguration.class).run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(DefaultTracingObservationHandler.class); assertThat(context).hasSingleBean(DefaultTracingObservationHandler.class);
assertThat(context).hasSingleBean(HttpServerTracingObservationHandler.class); assertThat(context).hasSingleBean(PropagatingReceiverTracingObservationHandler.class);
assertThat(context).hasSingleBean(HttpClientTracingObservationHandler.class); assertThat(context).hasSingleBean(PropagatingSenderTracingObservationHandler.class);
}); });
} }
@Test @Test
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
void shouldSupplyBeansInCorrectOrder() { void shouldSupplyBeansInCorrectOrder() {
this.contextRunner.withUserConfiguration(TracerConfiguration.class, HttpClientHandlerConfiguration.class, this.contextRunner.withUserConfiguration(TracerConfiguration.class, PropagatorConfiguration.class)
HttpServerHandlerConfiguration.class).run((context) -> { .run((context) -> {
List<TracingObservationHandler> tracingObservationHandlers = context List<TracingObservationHandler> tracingObservationHandlers = context
.getBeanProvider(TracingObservationHandler.class).orderedStream().toList(); .getBeanProvider(TracingObservationHandler.class).orderedStream().toList();
assertThat(tracingObservationHandlers).hasSize(3); assertThat(tracingObservationHandlers).hasSize(3);
assertThat(tracingObservationHandlers.get(0)) assertThat(tracingObservationHandlers.get(0))
.isInstanceOf(HttpServerTracingObservationHandler.class); .isInstanceOf(PropagatingReceiverTracingObservationHandler.class);
assertThat(tracingObservationHandlers.get(1)) assertThat(tracingObservationHandlers.get(1))
.isInstanceOf(HttpClientTracingObservationHandler.class); .isInstanceOf(PropagatingSenderTracingObservationHandler.class);
assertThat(tracingObservationHandlers.get(2)).isInstanceOf(DefaultTracingObservationHandler.class); assertThat(tracingObservationHandlers.get(2)).isInstanceOf(DefaultTracingObservationHandler.class);
}); });
} }
@ -77,10 +76,10 @@ class MicrometerTracingAutoConfigurationTests {
this.contextRunner.withUserConfiguration(CustomConfiguration.class).run((context) -> { this.contextRunner.withUserConfiguration(CustomConfiguration.class).run((context) -> {
assertThat(context).hasBean("customDefaultTracingObservationHandler"); assertThat(context).hasBean("customDefaultTracingObservationHandler");
assertThat(context).hasSingleBean(DefaultTracingObservationHandler.class); assertThat(context).hasSingleBean(DefaultTracingObservationHandler.class);
assertThat(context).hasBean("customHttpServerTracingObservationHandler"); assertThat(context).hasBean("customPropagatingReceiverTracingObservationHandler");
assertThat(context).hasSingleBean(HttpServerTracingObservationHandler.class); assertThat(context).hasSingleBean(PropagatingReceiverTracingObservationHandler.class);
assertThat(context).hasBean("customHttpClientTracingObservationHandler"); assertThat(context).hasBean("customPropagatingSenderTracingObservationHandler");
assertThat(context).hasSingleBean(HttpClientTracingObservationHandler.class); assertThat(context).hasSingleBean(PropagatingSenderTracingObservationHandler.class);
}); });
} }
@ -88,43 +87,35 @@ class MicrometerTracingAutoConfigurationTests {
void shouldNotSupplyBeansIfMicrometerIsMissing() { void shouldNotSupplyBeansIfMicrometerIsMissing() {
this.contextRunner.withClassLoader(new FilteredClassLoader("io.micrometer")).run((context) -> { this.contextRunner.withClassLoader(new FilteredClassLoader("io.micrometer")).run((context) -> {
assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class); assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class); assertThat(context).doesNotHaveBean(PropagatingReceiverTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpClientTracingObservationHandler.class); assertThat(context).doesNotHaveBean(PropagatingSenderTracingObservationHandler.class);
}); });
} }
@Test @Test
void shouldNotSupplyBeansIfTracerIsMissing() { void shouldNotSupplyBeansIfTracerIsMissing() {
this.contextRunner this.contextRunner.withUserConfiguration(PropagatorConfiguration.class).run((context) -> {
.withUserConfiguration(HttpServerHandlerConfiguration.class, HttpClientHandlerConfiguration.class) assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class);
.run((context) -> { assertThat(context).doesNotHaveBean(PropagatingReceiverTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class); assertThat(context).doesNotHaveBean(PropagatingSenderTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class); });
assertThat(context).doesNotHaveBean(HttpClientTracingObservationHandler.class);
});
} }
@Test @Test
void shouldNotSupplyBeansIfHttpClientHandlerIsMissing() { void shouldNotSupplyBeansIfPropagatorIsMissing() {
this.contextRunner.withUserConfiguration(TracerConfiguration.class, HttpServerHandlerConfiguration.class) this.contextRunner.withUserConfiguration(TracerConfiguration.class).run((context) -> {
.run((context) -> assertThat(context).doesNotHaveBean(HttpClientTracingObservationHandler.class)); assertThat(context).doesNotHaveBean(PropagatingSenderTracingObservationHandler.class);
} assertThat(context).doesNotHaveBean(PropagatingReceiverTracingObservationHandler.class);
});
@Test
void shouldNotSupplyBeansIfHttpServerHandlerIsMissing() {
this.contextRunner.withUserConfiguration(TracerConfiguration.class, HttpClientHandlerConfiguration.class)
.run((context) -> assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class));
} }
@Test @Test
void shouldNotSupplyBeansIfTracingIsDisabled() { void shouldNotSupplyBeansIfTracingIsDisabled() {
this.contextRunner this.contextRunner.withUserConfiguration(TracerConfiguration.class, PropagatorConfiguration.class)
.withUserConfiguration(TracerConfiguration.class, HttpClientHandlerConfiguration.class,
HttpServerHandlerConfiguration.class)
.withPropertyValues("management.tracing.enabled=false").run((context) -> { .withPropertyValues("management.tracing.enabled=false").run((context) -> {
assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class); assertThat(context).doesNotHaveBean(DefaultTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpServerTracingObservationHandler.class); assertThat(context).doesNotHaveBean(PropagatingReceiverTracingObservationHandler.class);
assertThat(context).doesNotHaveBean(HttpClientTracingObservationHandler.class); assertThat(context).doesNotHaveBean(PropagatingSenderTracingObservationHandler.class);
}); });
} }
@ -139,21 +130,11 @@ class MicrometerTracingAutoConfigurationTests {
} }
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
private static class HttpClientHandlerConfiguration { private static class PropagatorConfiguration {
@Bean @Bean
HttpClientHandler httpClientHandler() { Propagator propagator() {
return mock(HttpClientHandler.class); return mock(Propagator.class);
}
}
@Configuration(proxyBeanMethods = false)
private static class HttpServerHandlerConfiguration {
@Bean
HttpServerHandler httpServerHandler() {
return mock(HttpServerHandler.class);
} }
} }
@ -167,13 +148,13 @@ class MicrometerTracingAutoConfigurationTests {
} }
@Bean @Bean
HttpServerTracingObservationHandler customHttpServerTracingObservationHandler() { PropagatingReceiverTracingObservationHandler<?> customPropagatingReceiverTracingObservationHandler() {
return mock(HttpServerTracingObservationHandler.class); return mock(PropagatingReceiverTracingObservationHandler.class);
} }
@Bean @Bean
HttpClientTracingObservationHandler customHttpClientTracingObservationHandler() { PropagatingSenderTracingObservationHandler<?> customPropagatingSenderTracingObservationHandler() {
return mock(HttpClientTracingObservationHandler.class); return mock(PropagatingSenderTracingObservationHandler.class);
} }
} }

View File

@ -1012,7 +1012,7 @@ bom {
] ]
} }
} }
library("Micrometer", "1.10.0-M3") { library("Micrometer", "1.10.0-SNAPSHOT") {
group("io.micrometer") { group("io.micrometer") {
modules = [ modules = [
"micrometer-registry-stackdriver" { "micrometer-registry-stackdriver" {
@ -1024,7 +1024,7 @@ bom {
] ]
} }
} }
library("Micrometer Tracing", "1.0.0-M6") { library("Micrometer Tracing", "1.0.0-SNAPSHOT") {
group("io.micrometer") { group("io.micrometer") {
imports = [ imports = [
"micrometer-tracing-bom" "micrometer-tracing-bom"