Skip to content

Commit d16cad3

Browse files
authored
feat(sdk-testing): Add W3CBaggagePropagator to test utils (#7056)
1 parent 2fcd5f5 commit d16cad3

File tree

4 files changed

+83
-2
lines changed

4 files changed

+83
-2
lines changed

sdk/testing/src/main/java/io/opentelemetry/sdk/testing/junit4/OpenTelemetryRule.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88
import io.opentelemetry.api.GlobalOpenTelemetry;
99
import io.opentelemetry.api.OpenTelemetry;
10+
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
1011
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
1112
import io.opentelemetry.context.propagation.ContextPropagators;
13+
import io.opentelemetry.context.propagation.TextMapPropagator;
1214
import io.opentelemetry.sdk.OpenTelemetrySdk;
1315
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1416
import io.opentelemetry.sdk.logs.data.LogRecordData;
@@ -84,7 +86,11 @@ public static OpenTelemetryRule create() {
8486

8587
OpenTelemetrySdk openTelemetry =
8688
OpenTelemetrySdk.builder()
87-
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
89+
.setPropagators(
90+
ContextPropagators.create(
91+
TextMapPropagator.composite(
92+
W3CTraceContextPropagator.getInstance(),
93+
W3CBaggagePropagator.getInstance())))
8894
.setTracerProvider(tracerProvider)
8995
.setMeterProvider(meterProvider)
9096
.setLoggerProvider(loggerProvider)

sdk/testing/src/main/java/io/opentelemetry/sdk/testing/junit5/OpenTelemetryExtension.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
import io.opentelemetry.api.GlobalOpenTelemetry;
1111
import io.opentelemetry.api.OpenTelemetry;
12+
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
1213
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
1314
import io.opentelemetry.context.propagation.ContextPropagators;
15+
import io.opentelemetry.context.propagation.TextMapPropagator;
1416
import io.opentelemetry.sdk.OpenTelemetrySdk;
1517
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
1618
import io.opentelemetry.sdk.logs.data.LogRecordData;
@@ -86,7 +88,11 @@ public static OpenTelemetryExtension create() {
8688

8789
OpenTelemetrySdk openTelemetry =
8890
OpenTelemetrySdk.builder()
89-
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
91+
.setPropagators(
92+
ContextPropagators.create(
93+
TextMapPropagator.composite(
94+
W3CTraceContextPropagator.getInstance(),
95+
W3CBaggagePropagator.getInstance())))
9096
.setTracerProvider(tracerProvider)
9197
.setMeterProvider(meterProvider)
9298
.setLoggerProvider(loggerProvider)

sdk/testing/src/test/java/io/opentelemetry/sdk/testing/junit4/OpenTelemetryRuleTest.java

+35
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,20 @@
77

88
import static org.assertj.core.api.Assertions.assertThat;
99

10+
import io.opentelemetry.api.baggage.Baggage;
1011
import io.opentelemetry.api.common.Value;
1112
import io.opentelemetry.api.logs.Logger;
1213
import io.opentelemetry.api.metrics.LongCounter;
1314
import io.opentelemetry.api.metrics.Meter;
15+
import io.opentelemetry.api.trace.Span;
1416
import io.opentelemetry.api.trace.Tracer;
17+
import io.opentelemetry.context.Context;
18+
import io.opentelemetry.context.Scope;
19+
import io.opentelemetry.context.propagation.TextMapSetter;
1520
import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions;
21+
import java.util.HashMap;
22+
import java.util.Map;
23+
import javax.annotation.Nullable;
1624
import org.junit.Before;
1725
import org.junit.Rule;
1826
import org.junit.Test;
@@ -118,4 +126,31 @@ public void getLogRecordsAgain() {
118126
.satisfies(
119127
logRecordData -> assertThat(logRecordData.getBodyValue()).isEqualTo(Value.of("body")));
120128
}
129+
130+
@Test
131+
public void baggageAndTracePropagation() {
132+
OpenTelemetryRule rule = OpenTelemetryRule.create();
133+
Span span = rule.getOpenTelemetry().getTracer("test").spanBuilder("test").startSpan();
134+
try (Scope baggageScope = Baggage.builder().put("key", "value").build().makeCurrent();
135+
Scope spanScope = span.makeCurrent()) {
136+
Map<String, String> carrier = new HashMap<>();
137+
rule.getOpenTelemetry()
138+
.getPropagators()
139+
.getTextMapPropagator()
140+
.inject(Context.current(), carrier, new MapTextMapSetter());
141+
assertThat(carrier).containsEntry("baggage", "key=value");
142+
assertThat(carrier).containsKey("traceparent");
143+
} finally {
144+
span.end();
145+
}
146+
}
147+
148+
public static class MapTextMapSetter implements TextMapSetter<Map<String, String>> {
149+
@Override
150+
public void set(@Nullable Map<String, String> carrier, String key, String value) {
151+
if (carrier != null) {
152+
carrier.put(key, value);
153+
}
154+
}
155+
}
121156
}

sdk/testing/src/test/java/io/opentelemetry/sdk/testing/junit5/OpenTelemetryExtensionTest.java

+34
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,24 @@
1010

1111
import io.opentelemetry.api.GlobalOpenTelemetry;
1212
import io.opentelemetry.api.OpenTelemetry;
13+
import io.opentelemetry.api.baggage.Baggage;
1314
import io.opentelemetry.api.common.Value;
1415
import io.opentelemetry.api.logs.Logger;
1516
import io.opentelemetry.api.metrics.LongCounter;
1617
import io.opentelemetry.api.metrics.Meter;
1718
import io.opentelemetry.api.trace.Span;
1819
import io.opentelemetry.api.trace.Tracer;
20+
import io.opentelemetry.context.Context;
1921
import io.opentelemetry.context.Scope;
22+
import io.opentelemetry.context.propagation.TextMapSetter;
2023
import io.opentelemetry.sdk.trace.data.SpanData;
2124
import java.util.Arrays;
25+
import java.util.HashMap;
2226
import java.util.LinkedHashMap;
27+
import java.util.Map;
2328
import java.util.concurrent.TimeUnit;
2429
import java.util.stream.Collectors;
30+
import javax.annotation.Nullable;
2531
import org.junit.jupiter.api.Test;
2632
import org.junit.jupiter.api.extension.RegisterExtension;
2733

@@ -231,4 +237,32 @@ void afterAll() {
231237
assertThat(extension.getMetrics()).isEmpty();
232238
assertThat(extension.getSpans()).isEmpty();
233239
}
240+
241+
@Test
242+
void baggageAndTracePropagation() {
243+
OpenTelemetryExtension extension = OpenTelemetryExtension.create();
244+
Span span = extension.getOpenTelemetry().getTracer("test").spanBuilder("test").startSpan();
245+
try (Scope baggageScope = Baggage.builder().put("key", "value").build().makeCurrent();
246+
Scope spanScope = span.makeCurrent()) {
247+
Map<String, String> carrier = new HashMap<>();
248+
extension
249+
.getOpenTelemetry()
250+
.getPropagators()
251+
.getTextMapPropagator()
252+
.inject(Context.current(), carrier, new MapTextMapSetter());
253+
assertThat(carrier).containsEntry("baggage", "key=value");
254+
assertThat(carrier).containsKey("traceparent");
255+
} finally {
256+
span.end();
257+
}
258+
}
259+
260+
public static class MapTextMapSetter implements TextMapSetter<Map<String, String>> {
261+
@Override
262+
public void set(@Nullable Map<String, String> carrier, String key, String value) {
263+
if (carrier != null) {
264+
carrier.put(key, value);
265+
}
266+
}
267+
}
234268
}

0 commit comments

Comments
 (0)