Merge branch '3.2.x' into 3.3.x

This commit is contained in:
Moritz Halbritter 2024-06-27 11:36:30 +02:00
commit b2ddea74ee

View File

@ -23,6 +23,7 @@ import io.micrometer.tracing.BaggageManager;
import io.micrometer.tracing.Span; import io.micrometer.tracing.Span;
import io.micrometer.tracing.Tracer; import io.micrometer.tracing.Tracer;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import org.assertj.core.api.ThrowingConsumer;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
@ -41,11 +42,13 @@ import static org.assertj.core.api.Assertions.assertThat;
* formats. * formats.
* *
* @author Marcin Grzejszczak * @author Marcin Grzejszczak
* @author Moritz Halbritter
*/ */
class BaggagePropagationIntegrationTests { class BaggagePropagationIntegrationTests {
static final String COUNTRY_CODE = "country-code"; private static final String COUNTRY_CODE = "country-code";
static final String BUSINESS_PROCESS = "bp";
private static final String BUSINESS_PROCESS = "bp";
@BeforeEach @BeforeEach
@AfterEach @AfterEach
@ -61,7 +64,7 @@ class BaggagePropagationIntegrationTests {
Span span = createSpan(tracer); Span span = createSpan(tracer);
assertThatTracingContextIsInitialized(autoConfig); assertThatTracingContextIsInitialized(autoConfig);
try (Tracer.SpanInScope scope = tracer.withSpan(span.start())) { try (Tracer.SpanInScope scope = tracer.withSpan(span.start())) {
BaggageManager baggageManager = context.getBean(BaggageManager.class); BaggageManager baggageManager = baggageManager(context);
try (BaggageInScope fo = baggageManager.createBaggageInScope(span.context(), COUNTRY_CODE, "FO"); try (BaggageInScope fo = baggageManager.createBaggageInScope(span.context(), COUNTRY_CODE, "FO");
BaggageInScope alm = baggageManager.createBaggageInScope(span.context(), BUSINESS_PROCESS, BaggageInScope alm = baggageManager.createBaggageInScope(span.context(), BUSINESS_PROCESS,
"ALM")) { "ALM")) {
@ -73,8 +76,7 @@ class BaggagePropagationIntegrationTests {
finally { finally {
span.end(); span.end();
} }
assertThatMdcContainsUnsetTraceId(autoConfig);
assertThatMdcContainsUnsetTraceId();
assertThat(MDC.get(COUNTRY_CODE)).isNull(); assertThat(MDC.get(COUNTRY_CODE)).isNull();
assertThat(MDC.get(BUSINESS_PROCESS)).isNull(); assertThat(MDC.get(BUSINESS_PROCESS)).isNull();
}); });
@ -88,17 +90,14 @@ class BaggagePropagationIntegrationTests {
Span span = createSpan(tracer); Span span = createSpan(tracer);
assertThatTracingContextIsInitialized(autoConfig); assertThatTracingContextIsInitialized(autoConfig);
try (Tracer.SpanInScope scope = tracer.withSpan(span.start())) { try (Tracer.SpanInScope scope = tracer.withSpan(span.start())) {
try (BaggageInScope fo = context.getBean(BaggageManager.class) try (BaggageInScope fo = baggageManager(context).createBaggageInScope(span.context(), COUNTRY_CODE,
.createBaggageInScope(span.context(), COUNTRY_CODE, "FO")) { "FO")) {
assertThat(MDC.get("traceId")).isEqualTo(span.context().traceId()); assertThat(MDC.get("traceId")).isEqualTo(span.context().traceId());
assertThat(MDC.get(COUNTRY_CODE)).isEqualTo("FO"); assertThat(MDC.get(COUNTRY_CODE)).isEqualTo("FO");
try (Tracer.SpanInScope scope2 = tracer.withSpan(null)) { try (Tracer.SpanInScope scope2 = tracer.withSpan(null)) {
assertThatMdcContainsUnsetTraceId(); assertThatMdcContainsUnsetTraceId(autoConfig);
assertThat(MDC.get(COUNTRY_CODE)).isNull(); assertThat(MDC.get(COUNTRY_CODE)).isNull();
} }
assertThat(MDC.get("traceId")).isEqualTo(span.context().traceId()); assertThat(MDC.get("traceId")).isEqualTo(span.context().traceId());
assertThat(MDC.get(COUNTRY_CODE)).isEqualTo("FO"); assertThat(MDC.get(COUNTRY_CODE)).isEqualTo("FO");
} }
@ -106,7 +105,7 @@ class BaggagePropagationIntegrationTests {
finally { finally {
span.end(); span.end();
} }
assertThatMdcContainsUnsetTraceId(); assertThatMdcContainsUnsetTraceId(autoConfig);
assertThat(MDC.get(COUNTRY_CODE)).isNull(); assertThat(MDC.get(COUNTRY_CODE)).isNull();
}); });
} }
@ -119,22 +118,28 @@ class BaggagePropagationIntegrationTests {
return context.getBean(Tracer.class); return context.getBean(Tracer.class);
} }
private BaggageManager baggageManager(ApplicationContext context) {
return context.getBean(BaggageManager.class);
}
private void assertThatTracingContextIsInitialized(AutoConfig autoConfig) { private void assertThatTracingContextIsInitialized(AutoConfig autoConfig) {
if (autoConfig == AutoConfig.OTEL_B3) { if (autoConfig.isOtel()) {
assertThat(Context.current()).isEqualTo(Context.root()); assertThat(Context.current()).isEqualTo(Context.root());
} }
} }
private void assertThatMdcContainsUnsetTraceId() { private void assertThatMdcContainsUnsetTraceId(AutoConfig autoConfig) {
assertThat(isInvalidBraveTraceId() || isInvalidOtelTraceId()).isTrue(); boolean eitherOtelOrBrave = autoConfig.isOtel() || autoConfig.isBrave();
} assertThat(eitherOtelOrBrave).isTrue();
if (autoConfig.isOtel()) {
private boolean isInvalidBraveTraceId() { ThrowingConsumer<String> isNull = (traceId) -> assertThat(traceId).isNull();
return MDC.get("traceId") == null; ThrowingConsumer<String> isZero = (traceId) -> assertThat(traceId)
} .isEqualTo("00000000000000000000000000000000");
assertThat(MDC.get("traceId")).satisfiesAnyOf(isNull, isZero);
private boolean isInvalidOtelTraceId() { }
return MDC.get("traceId").equals("00000000000000000000000000000000"); if (autoConfig.isBrave()) {
assertThat(MDC.get("traceId")).isNull();
}
} }
enum AutoConfig implements Supplier<ApplicationContextRunner> { enum AutoConfig implements Supplier<ApplicationContextRunner> {
@ -237,6 +242,14 @@ class BaggagePropagationIntegrationTests {
.withPropertyValues("management.tracing.baggage.local-fields=country-code,bp", .withPropertyValues("management.tracing.baggage.local-fields=country-code,bp",
"management.tracing.baggage.correlation.fields=country-code,bp"); "management.tracing.baggage.correlation.fields=country-code,bp");
} }
};
boolean isOtel() {
return name().startsWith("OTEL_");
}
boolean isBrave() {
return name().startsWith("BRAVE_");
} }
} }