feat(sdk-testing): Add W3CBaggagePropagator to test utils (#7056)

This commit is contained in:
Emile de Weerd 2025-02-07 16:20:44 +01:00 committed by GitHub
parent 2fcd5f5bf8
commit d16cad3f73
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 83 additions and 2 deletions

View File

@ -7,8 +7,10 @@ package io.opentelemetry.sdk.testing.junit4;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.data.LogRecordData;
@ -84,7 +86,11 @@ public final class OpenTelemetryRule extends ExternalResource {
OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.setPropagators(
ContextPropagators.create(
TextMapPropagator.composite(
W3CTraceContextPropagator.getInstance(),
W3CBaggagePropagator.getInstance())))
.setTracerProvider(tracerProvider)
.setMeterProvider(meterProvider)
.setLoggerProvider(loggerProvider)

View File

@ -9,8 +9,10 @@ import static io.opentelemetry.sdk.testing.assertj.TracesAssert.assertThat;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
import io.opentelemetry.sdk.logs.data.LogRecordData;
@ -86,7 +88,11 @@ public final class OpenTelemetryExtension
OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.setPropagators(
ContextPropagators.create(
TextMapPropagator.composite(
W3CTraceContextPropagator.getInstance(),
W3CBaggagePropagator.getInstance())))
.setTracerProvider(tracerProvider)
.setMeterProvider(meterProvider)
.setLoggerProvider(loggerProvider)

View File

@ -7,12 +7,20 @@ package io.opentelemetry.sdk.testing.junit4;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.baggage.Baggage;
import io.opentelemetry.api.common.Value;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.context.propagation.TextMapSetter;
import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@ -118,4 +126,31 @@ public class OpenTelemetryRuleTest {
.satisfies(
logRecordData -> assertThat(logRecordData.getBodyValue()).isEqualTo(Value.of("body")));
}
@Test
public void baggageAndTracePropagation() {
OpenTelemetryRule rule = OpenTelemetryRule.create();
Span span = rule.getOpenTelemetry().getTracer("test").spanBuilder("test").startSpan();
try (Scope baggageScope = Baggage.builder().put("key", "value").build().makeCurrent();
Scope spanScope = span.makeCurrent()) {
Map<String, String> carrier = new HashMap<>();
rule.getOpenTelemetry()
.getPropagators()
.getTextMapPropagator()
.inject(Context.current(), carrier, new MapTextMapSetter());
assertThat(carrier).containsEntry("baggage", "key=value");
assertThat(carrier).containsKey("traceparent");
} finally {
span.end();
}
}
public static class MapTextMapSetter implements TextMapSetter<Map<String, String>> {
@Override
public void set(@Nullable Map<String, String> carrier, String key, String value) {
if (carrier != null) {
carrier.put(key, value);
}
}
}
}

View File

@ -10,18 +10,24 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.baggage.Baggage;
import io.opentelemetry.api.common.Value;
import io.opentelemetry.api.logs.Logger;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.context.propagation.TextMapSetter;
import io.opentelemetry.sdk.trace.data.SpanData;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@ -231,4 +237,32 @@ class OpenTelemetryExtensionTest {
assertThat(extension.getMetrics()).isEmpty();
assertThat(extension.getSpans()).isEmpty();
}
@Test
void baggageAndTracePropagation() {
OpenTelemetryExtension extension = OpenTelemetryExtension.create();
Span span = extension.getOpenTelemetry().getTracer("test").spanBuilder("test").startSpan();
try (Scope baggageScope = Baggage.builder().put("key", "value").build().makeCurrent();
Scope spanScope = span.makeCurrent()) {
Map<String, String> carrier = new HashMap<>();
extension
.getOpenTelemetry()
.getPropagators()
.getTextMapPropagator()
.inject(Context.current(), carrier, new MapTextMapSetter());
assertThat(carrier).containsEntry("baggage", "key=value");
assertThat(carrier).containsKey("traceparent");
} finally {
span.end();
}
}
public static class MapTextMapSetter implements TextMapSetter<Map<String, String>> {
@Override
public void set(@Nullable Map<String, String> carrier, String key, String value) {
if (carrier != null) {
carrier.put(key, value);
}
}
}
}