diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/BaseShimObject.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/BaseShimObject.java index 6806dba31a8..3a5f3cce49e 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/BaseShimObject.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/BaseShimObject.java @@ -6,7 +6,6 @@ package io.opentelemetry.opentracingshim; import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; abstract class BaseShimObject { @@ -28,7 +27,7 @@ SpanContextShimTable spanContextTable() { return telemetryInfo.spanContextTable(); } - ContextPropagators propagators() { + OpenTracingPropagators propagators() { return telemetryInfo.propagators(); } } diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingPropagators.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingPropagators.java new file mode 100644 index 00000000000..44b3ef3be57 --- /dev/null +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingPropagators.java @@ -0,0 +1,52 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.opentracingshim; + +import io.opentelemetry.context.propagation.TextMapPropagator; + +/** + * Container for {@link io.opentracing.propagation.Format.Builtin#TEXT_MAP} and {@link + * io.opentracing.propagation.Format.Builtin#HTTP_HEADERS} format propagators. + */ +public class OpenTracingPropagators { + private final TextMapPropagator textMapPropagator; + private final TextMapPropagator httpHeadersPropagator; + + OpenTracingPropagators( + TextMapPropagator textMapPropagator, TextMapPropagator httpHeadersPropagator) { + this.textMapPropagator = textMapPropagator; + this.httpHeadersPropagator = httpHeadersPropagator; + } + + /** + * Returns a new builder instance for {@link OpenTracingPropagators}. + * + * @return a new builder instance for {@link OpenTracingPropagators}. + */ + public static OpenTracingPropagatorsBuilder builder() { + return new OpenTracingPropagatorsBuilder(); + } + + /** + * Returns the propagator for {@link io.opentracing.propagation.Format.Builtin#TEXT_MAP} format. + * + * @return the propagator for {@link io.opentracing.propagation.Format.Builtin#TEXT_MAP} format. + */ + public TextMapPropagator textMapPropagator() { + return textMapPropagator; + } + + /** + * Returns the propagator for {@link io.opentracing.propagation.Format.Builtin#HTTP_HEADERS} + * format. + * + * @return the propagator for {@link io.opentracing.propagation.Format.Builtin#HTTP_HEADERS} + * format. + */ + public TextMapPropagator httpHeadersPropagator() { + return httpHeadersPropagator; + } +} diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingPropagatorsBuilder.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingPropagatorsBuilder.java new file mode 100644 index 00000000000..06ceabe3715 --- /dev/null +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingPropagatorsBuilder.java @@ -0,0 +1,43 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.opentracingshim; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.context.propagation.TextMapPropagator; +import java.util.Objects; + +/** Builder for {@link OpenTracingPropagators}. */ +public class OpenTracingPropagatorsBuilder { + + private TextMapPropagator textMapPropagator = + GlobalOpenTelemetry.getPropagators().getTextMapPropagator(); + private TextMapPropagator httpHeadersPropagator = + GlobalOpenTelemetry.getPropagators().getTextMapPropagator(); + + /** Set propagator for {@link io.opentracing.propagation.Format.Builtin#TEXT_MAP} format. */ + public OpenTracingPropagatorsBuilder setTextMap(TextMapPropagator textMapPropagator) { + Objects.requireNonNull(textMapPropagator, "textMapPropagator"); + this.textMapPropagator = textMapPropagator; + return this; + } + + /** Set propagator for {@link io.opentracing.propagation.Format.Builtin#HTTP_HEADERS} format. */ + public OpenTracingPropagatorsBuilder setHttpHeaders(TextMapPropagator httpHeadersPropagator) { + Objects.requireNonNull(httpHeadersPropagator, "httpHeadersPropagator"); + this.httpHeadersPropagator = httpHeadersPropagator; + return this; + } + + /** + * Constructs a new instance of the {@link OpenTracingPropagators} based on the builder's values. + * If propagators are not set then {@code GlobalOpenTelemetry.getPropagators()} is used. + * + * @return a new Propagators instance. + */ + public OpenTracingPropagators build() { + return new OpenTracingPropagators(textMapPropagator, httpHeadersPropagator); + } +} diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingShim.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingShim.java index ee9f63583e0..1d4e7928004 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingShim.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/OpenTracingShim.java @@ -18,16 +18,34 @@ public final class OpenTracingShim { private OpenTracingShim() {} /** - * Creates a {@code io.opentracing.Tracer} shim out of {@code OpenTelemetry.getTracerProvider()} - * and {@code OpenTelemetry.getPropagators()}. + * Creates a {@code io.opentracing.Tracer} shim out of {@code + * GlobalOpenTelemetry.getTracerProvider()} and {@code GlobalOpenTelemetry.getPropagators()}. * * @return a {@code io.opentracing.Tracer}. */ public static io.opentracing.Tracer createTracerShim() { - return new TracerShim( - new TelemetryInfo( - getTracer(GlobalOpenTelemetry.getTracerProvider()), - GlobalOpenTelemetry.getPropagators())); + return createTracerShim(getTracer(GlobalOpenTelemetry.getTracerProvider())); + } + + /** + * Creates a {@code io.opentracing.Tracer} shim using provided Tracer instance and {@code + * GlobalOpenTelemetry.getPropagators()}. + * + * @return a {@code io.opentracing.Tracer}. + */ + public static io.opentracing.Tracer createTracerShim(Tracer tracer) { + return createTracerShim(tracer, OpenTracingPropagators.builder().build()); + } + + /** + * Creates a {@code io.opentracing.Tracer} shim using provided Tracer instance and {@code + * OpenTracingPropagators} instance. + * + * @return a {@code io.opentracing.Tracer}. + */ + public static io.opentracing.Tracer createTracerShim( + Tracer tracer, OpenTracingPropagators propagators) { + return new TracerShim(new TelemetryInfo(tracer, propagators)); } /** @@ -37,9 +55,12 @@ public static io.opentracing.Tracer createTracerShim() { * @return a {@code io.opentracing.Tracer}. */ public static io.opentracing.Tracer createTracerShim(OpenTelemetry openTelemetry) { - return new TracerShim( - new TelemetryInfo( - getTracer(openTelemetry.getTracerProvider()), openTelemetry.getPropagators())); + return createTracerShim( + getTracer(openTelemetry.getTracerProvider()), + OpenTracingPropagators.builder() + .setTextMap(openTelemetry.getPropagators().getTextMapPropagator()) + .setHttpHeaders(openTelemetry.getPropagators().getTextMapPropagator()) + .build()); } private static Tracer getTracer(TracerProvider tracerProvider) { diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java index e184fb89f81..94969dd78c4 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java @@ -8,6 +8,8 @@ import io.opentelemetry.api.baggage.Baggage; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentracing.propagation.Format; import io.opentracing.propagation.TextMapExtract; import io.opentracing.propagation.TextMapInject; import java.util.HashMap; @@ -22,24 +24,21 @@ final class Propagation extends BaseShimObject { super(telemetryInfo); } - void injectTextMap(SpanContextShim contextShim, TextMapInject carrier) { + void injectTextMap(SpanContextShim contextShim, Format format, TextMapInject carrier) { Context context = Context.current().with(Span.wrap(contextShim.getSpanContext())); context = context.with(contextShim.getBaggage()); - propagators().getTextMapPropagator().inject(context, carrier, SETTER_INSTANCE); + getPropagator(format).inject(context, carrier, SETTER_INSTANCE); } @Nullable - SpanContextShim extractTextMap(TextMapExtract carrier) { + SpanContextShim extractTextMap(Format format, TextMapExtract carrier) { Map carrierMap = new HashMap<>(); for (Map.Entry entry : carrier) { carrierMap.put(entry.getKey(), entry.getValue()); } - Context context = - propagators() - .getTextMapPropagator() - .extract(Context.current(), carrierMap, GETTER_INSTANCE); + Context context = getPropagator(format).extract(Context.current(), carrierMap, GETTER_INSTANCE); Span span = Span.fromContext(context); if (!span.getSpanContext().isValid()) { @@ -49,6 +48,13 @@ SpanContextShim extractTextMap(TextMapExtract carrier) { return new SpanContextShim(telemetryInfo, span.getSpanContext(), Baggage.fromContext(context)); } + private TextMapPropagator getPropagator(Format format) { + if (format == Format.Builtin.HTTP_HEADERS) { + return propagators().httpHeadersPropagator(); + } + return propagators().textMapPropagator(); + } + static final class TextMapSetter implements io.opentelemetry.context.propagation.TextMapSetter { private TextMapSetter() {} diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TelemetryInfo.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TelemetryInfo.java index 8c59ce06074..9617f1b32d9 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TelemetryInfo.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TelemetryInfo.java @@ -7,7 +7,6 @@ import io.opentelemetry.api.baggage.Baggage; import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; /** * Utility class that holds a Tracer, a BaggageManager, and related objects that are core part of @@ -17,12 +16,12 @@ final class TelemetryInfo { private final Tracer tracer; private final Baggage emptyBaggage; - private final ContextPropagators propagators; + private final OpenTracingPropagators openTracingPropagators; private final SpanContextShimTable spanContextTable; - TelemetryInfo(Tracer tracer, ContextPropagators propagators) { + TelemetryInfo(Tracer tracer, OpenTracingPropagators openTracingPropagators) { this.tracer = tracer; - this.propagators = propagators; + this.openTracingPropagators = openTracingPropagators; this.emptyBaggage = Baggage.empty(); this.spanContextTable = new SpanContextShimTable(); } @@ -39,7 +38,7 @@ Baggage emptyBaggage() { return emptyBaggage; } - ContextPropagators propagators() { - return propagators; + OpenTracingPropagators propagators() { + return openTracingPropagators; } } diff --git a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TracerShim.java b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TracerShim.java index dce25374773..66080728517 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TracerShim.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/TracerShim.java @@ -65,7 +65,7 @@ public void inject(SpanContext context, Format format, C carrier) { if (format == Format.Builtin.TEXT_MAP || format == Format.Builtin.TEXT_MAP_INJECT || format == Format.Builtin.HTTP_HEADERS) { - propagation.injectTextMap(contextShim, (TextMapInject) carrier); + propagation.injectTextMap(contextShim, format, (TextMapInject) carrier); } } @@ -76,7 +76,7 @@ public SpanContext extract(Format format, C carrier) { if (format == Format.Builtin.TEXT_MAP || format == Format.Builtin.TEXT_MAP_EXTRACT || format == Format.Builtin.HTTP_HEADERS) { - return propagation.extractTextMap((TextMapExtract) carrier); + return propagation.extractTextMap(format, (TextMapExtract) carrier); } } catch (RuntimeException e) { logger.log( diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/CustomTextMapPropagator.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/CustomTextMapPropagator.java new file mode 100644 index 00000000000..4d3aed3c073 --- /dev/null +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/CustomTextMapPropagator.java @@ -0,0 +1,43 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.opentracingshim; + +import io.opentelemetry.context.Context; +import io.opentelemetry.context.propagation.TextMapGetter; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.context.propagation.TextMapSetter; +import java.util.Collection; +import java.util.Collections; +import javax.annotation.Nullable; + +class CustomTextMapPropagator implements TextMapPropagator { + private boolean extracted; + private boolean injected; + + @Override + public Collection fields() { + return Collections.emptyList(); + } + + @Override + public void inject(Context context, @Nullable C carrier, TextMapSetter setter) { + injected = true; + } + + @Override + public Context extract(Context context, @Nullable C carrier, TextMapGetter getter) { + extracted = true; + return context; + } + + public boolean isExtracted() { + return extracted; + } + + public boolean isInjected() { + return injected; + } +} diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/OpenTracingShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/OpenTracingShimTest.java index 7289f2d6b45..901977fb40e 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/OpenTracingShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/OpenTracingShimTest.java @@ -11,7 +11,9 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.sdk.trace.SdkTracerProvider; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; @@ -34,9 +36,31 @@ void createTracerShim_fromOpenTelemetryInstance() { OpenTelemetry openTelemetry = mock(OpenTelemetry.class); SdkTracerProvider sdk = SdkTracerProvider.builder().build(); when(openTelemetry.getTracerProvider()).thenReturn(sdk); - when(openTelemetry.getPropagators()).thenReturn(mock(ContextPropagators.class)); + ContextPropagators contextPropagators = mock(ContextPropagators.class); + when(contextPropagators.getTextMapPropagator()).thenReturn(mock(TextMapPropagator.class)); + when(openTelemetry.getPropagators()).thenReturn(contextPropagators); TracerShim tracerShim = (TracerShim) OpenTracingShim.createTracerShim(openTelemetry); assertThat(tracerShim.tracer()).isEqualTo(sdk.get("opentracingshim")); } + + @Test + void createTracerShim_withPropagators() { + Tracer tracer = mock(Tracer.class); + + TextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + TextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + + TracerShim tracerShim = + (TracerShim) + OpenTracingShim.createTracerShim( + tracer, + OpenTracingPropagators.builder() + .setTextMap(textMapPropagator) + .setHttpHeaders(httpHeadersPropagator) + .build()); + + assertThat(tracerShim.propagators().textMapPropagator()).isSameAs(textMapPropagator); + assertThat(tracerShim.propagators().httpHeadersPropagator()).isSameAs(httpHeadersPropagator); + } } diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/PropagationTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/PropagationTest.java new file mode 100644 index 00000000000..e0ac8448037 --- /dev/null +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/PropagationTest.java @@ -0,0 +1,86 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.opentracingshim; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class PropagationTest { + private final Tracer tracer = SdkTracerProvider.builder().build().get("PropagationTest"); + + @BeforeEach + @AfterEach + void setUp() { + GlobalOpenTelemetry.resetForTest(); + } + + @Test + public void defaultPropagators() { + Propagation propagation = + new Propagation(new TelemetryInfo(tracer, OpenTracingPropagators.builder().build())); + assertThat(propagation.propagators().textMapPropagator()) + .isSameAs(propagation.propagators().httpHeadersPropagator()); + } + + @Test + public void textMapPropagator() { + TextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + + Propagation propagation = + new Propagation( + new TelemetryInfo( + tracer, OpenTracingPropagators.builder().setTextMap(textMapPropagator).build())); + + assertThat(propagation.propagators().textMapPropagator()) + .isNotSameAs(propagation.propagators().httpHeadersPropagator()); + + assertThat(propagation.propagators().textMapPropagator()).isSameAs(textMapPropagator); + } + + @Test + public void httpHeadersPropagator() { + TextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + + Propagation propagation = + new Propagation( + new TelemetryInfo( + tracer, + OpenTracingPropagators.builder().setHttpHeaders(httpHeadersPropagator).build())); + + assertThat(propagation.propagators().textMapPropagator()) + .isNotSameAs(propagation.propagators().httpHeadersPropagator()); + + assertThat(propagation.propagators().httpHeadersPropagator()).isSameAs(httpHeadersPropagator); + } + + @Test + public void bothCustomPropagator() { + TextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + TextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + + Propagation propagation = + new Propagation( + new TelemetryInfo( + tracer, + OpenTracingPropagators.builder() + .setTextMap(textMapPropagator) + .setHttpHeaders(httpHeadersPropagator) + .build())); + + assertThat(propagation.propagators().textMapPropagator()) + .isNotSameAs(propagation.propagators().httpHeadersPropagator()); + + assertThat(propagation.propagators().textMapPropagator()).isSameAs(textMapPropagator); + assertThat(propagation.propagators().httpHeadersPropagator()).isSameAs(httpHeadersPropagator); + } +} diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java index db859c4dc9b..df6b9356a8e 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java @@ -8,21 +8,28 @@ import static io.opentelemetry.opentracingshim.TestUtils.getBaggageMap; import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.sdk.trace.ReadableSpan; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.data.SpanData; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class SpanBuilderShimTest { private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build(); private final Tracer tracer = tracerSdkFactory.get("SpanShimTest"); - private final TelemetryInfo telemetryInfo = new TelemetryInfo(tracer, ContextPropagators.noop()); + private final TelemetryInfo telemetryInfo = + new TelemetryInfo(tracer, OpenTracingPropagators.builder().build()); private static final String SPAN_NAME = "Span"; + @BeforeEach + void setUp() { + GlobalOpenTelemetry.resetForTest(); + } + @Test void baggage_parent() { SpanShim parentSpan = (SpanShim) new SpanBuilderShim(telemetryInfo, SPAN_NAME).start(); diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java index 1c1f6324e7f..a6a745ab85d 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanShimTest.java @@ -10,7 +10,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; -import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.sdk.trace.ReadableSpan; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.data.SpanData; @@ -24,7 +23,8 @@ class SpanShimTest { private final SdkTracerProvider tracerSdkFactory = SdkTracerProvider.builder().build(); private final Tracer tracer = tracerSdkFactory.get("SpanShimTest"); - private final TelemetryInfo telemetryInfo = new TelemetryInfo(tracer, ContextPropagators.noop()); + private final TelemetryInfo telemetryInfo = + new TelemetryInfo(tracer, OpenTracingPropagators.builder().build()); private Span span; private static final String SPAN_NAME = "Span"; diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/TracerShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/TracerShimTest.java index e76af895940..28729c8d71d 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/TracerShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/TracerShimTest.java @@ -7,7 +7,7 @@ import static org.assertj.core.api.Assertions.assertThat; -import io.opentelemetry.context.propagation.ContextPropagators; +import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.sdk.testing.junit5.OpenTelemetryExtension; import io.opentracing.Scope; import io.opentracing.Span; @@ -31,14 +31,13 @@ class TracerShimTest { @RegisterExtension public OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create(); TracerShim tracerShim; + Tracer tracer; @BeforeEach void setUp() { + tracer = otelTesting.getOpenTelemetry().getTracer("opentracingshim"); tracerShim = - new TracerShim( - new TelemetryInfo( - otelTesting.getOpenTelemetry().getTracer("opentracingshim"), - ContextPropagators.noop())); + new TracerShim(new TelemetryInfo(tracer, OpenTracingPropagators.builder().build())); } @Test @@ -82,6 +81,86 @@ void inject_nullContext() { assertThat(map).isEmpty(); } + @Test + void inject_textMap() { + Map map = new HashMap<>(); + CustomTextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + CustomTextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + TelemetryInfo telemetryInfo = + new TelemetryInfo( + tracer, + OpenTracingPropagators.builder() + .setTextMap(textMapPropagator) + .setHttpHeaders(httpHeadersPropagator) + .build()); + tracerShim = new TracerShim(telemetryInfo); + io.opentelemetry.api.trace.Span span = telemetryInfo.tracer().spanBuilder("span").startSpan(); + SpanContext context = new SpanShim(telemetryInfo, span).context(); + + tracerShim.inject(context, Format.Builtin.TEXT_MAP, new TextMapAdapter(map)); + assertThat(textMapPropagator.isInjected()).isTrue(); + assertThat(httpHeadersPropagator.isInjected()).isFalse(); + } + + @Test + void inject_httpHeaders() { + Map map = new HashMap<>(); + CustomTextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + CustomTextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + TelemetryInfo telemetryInfo = + new TelemetryInfo( + tracer, + OpenTracingPropagators.builder() + .setTextMap(textMapPropagator) + .setHttpHeaders(httpHeadersPropagator) + .build()); + tracerShim = new TracerShim(telemetryInfo); + io.opentelemetry.api.trace.Span span = telemetryInfo.tracer().spanBuilder("span").startSpan(); + SpanContext context = new SpanShim(telemetryInfo, span).context(); + + tracerShim.inject(context, Format.Builtin.HTTP_HEADERS, new TextMapAdapter(map)); + assertThat(textMapPropagator.isInjected()).isFalse(); + assertThat(httpHeadersPropagator.isInjected()).isTrue(); + } + + @Test + void extract_textMap() { + Map map = new HashMap<>(); + CustomTextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + CustomTextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + tracerShim = + new TracerShim( + new TelemetryInfo( + tracer, + OpenTracingPropagators.builder() + .setTextMap(textMapPropagator) + .setHttpHeaders(httpHeadersPropagator) + .build())); + + tracerShim.extract(Format.Builtin.TEXT_MAP, new TextMapAdapter(map)); + assertThat(textMapPropagator.isExtracted()).isTrue(); + assertThat(httpHeadersPropagator.isExtracted()).isFalse(); + } + + @Test + void extract_httpHeaders() { + Map map = new HashMap<>(); + CustomTextMapPropagator textMapPropagator = new CustomTextMapPropagator(); + CustomTextMapPropagator httpHeadersPropagator = new CustomTextMapPropagator(); + tracerShim = + new TracerShim( + new TelemetryInfo( + tracer, + OpenTracingPropagators.builder() + .setTextMap(textMapPropagator) + .setHttpHeaders(httpHeadersPropagator) + .build())); + + tracerShim.extract(Format.Builtin.HTTP_HEADERS, new TextMapAdapter(map)); + assertThat(textMapPropagator.isExtracted()).isFalse(); + assertThat(httpHeadersPropagator.isExtracted()).isTrue(); + } + @Test void close() { tracerShim.close();