Reject setups with multiple observation conventions

Prior to this commit, the `WebHttpHandlerBuilder` would only configure
a custom observation convention if there is a single convention in the
application context. It would other wise use the default.

This commit aligns with the previous Spring Boot behavior where multiple
conventions setups are rejected as invalid with
`NoUniqueBeanDefinitionException`.

Fixes gh-31864
This commit is contained in:
Brian Clozel
2023-12-19 17:35:02 +01:00
parent 12f01f9b5f
commit 53b937976d
2 changed files with 21 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -49,6 +50,7 @@ import org.springframework.web.testfixture.http.server.reactive.MockServerHttpRe
import static java.time.Duration.ofMillis;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
/**
* Unit tests for {@link WebHttpHandlerBuilder}.
@@ -173,6 +175,14 @@ public class WebHttpHandlerBuilderTests {
.that().hasLowCardinalityKeyValue("uri", "UNKNOWN");
}
@Test
void shouldRejectDuplicateObservationConvention() {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ObservationConfig.class,
DuplicateConventionObservationConfig.class);
assertThatThrownBy(() -> WebHttpHandlerBuilder.applicationContext(applicationContext).build())
.isInstanceOf(NoUniqueBeanDefinitionException.class);
}
private static Mono<Void> writeToResponse(ServerWebExchange exchange, String value) {
byte[] bytes = value.getBytes(StandardCharsets.UTF_8);
DataBuffer buffer = DefaultDataBufferFactory.sharedInstance.wrap(bytes);
@@ -315,4 +325,14 @@ public class WebHttpHandlerBuilderTests {
}
@Configuration
static class DuplicateConventionObservationConfig {
@Bean
public ServerRequestObservationConvention duplicateRequestObservationConvention() {
return new DefaultServerRequestObservationConvention();
}
}
}