Rename HttpTraceContext to W3CTraceContextPropagator. (#2116)

* Rename HttpTraceContext to W3CTraceContextPropagator.

* Add javadoc.
This commit is contained in:
Christian Neumüller 2020-11-25 02:27:07 +01:00 committed by GitHub
parent 82cac7a7ec
commit bbe8702257
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 357 additions and 254 deletions

View File

@ -6,6 +6,7 @@
package io.opentelemetry.api.trace.propagation;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
import java.util.ArrayList;
import java.util.Arrays;
@ -26,7 +27,7 @@ import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
@State(Scope.Thread)
public class HttpTraceContextExtractBenchmark {
public class W3CTraceContextPropagatorExtractBenchmark {
private static final String TRACEPARENT = "traceparent";
private static final int COUNT = 5;
@ -37,7 +38,8 @@ public class HttpTraceContextExtractBenchmark {
"00-2e7d0ad2390617702e7d0ad239061770-d49582a2de984b86-01",
"00-905734c59b913b4a905734c59b913b4a-776ff807b787538a-00",
"00-68ec932c33b3f2ee68ec932c33b3f2ee-68ec932c33b3f2ee-00");
private final HttpTraceContext httpTraceContext = HttpTraceContext.getInstance();
private final TextMapPropagator w3cTraceContextPropagator =
W3CTraceContextPropagator.getInstance();
private final Getter<Map<String, String>> getter =
new Getter<Map<String, String>>() {
@Override
@ -65,7 +67,7 @@ public class HttpTraceContextExtractBenchmark {
public Context measureExtract() {
Context result = null;
for (int i = 0; i < COUNT; i++) {
result = httpTraceContext.extract(Context.root(), carriers.get(i), getter);
result = w3cTraceContextPropagator.extract(Context.root(), carriers.get(i), getter);
}
return result;
}

View File

@ -10,6 +10,7 @@ import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.context.propagation.TextMapPropagator.Setter;
import java.util.ArrayList;
import java.util.Arrays;
@ -29,7 +30,7 @@ import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
@State(Scope.Thread)
public class HttpTraceContextInjectBenchmark {
public class W3CTraceContextPropagatorInjectBenchmark {
private static final List<SpanContext> spanContexts =
Arrays.asList(
@ -39,7 +40,8 @@ public class HttpTraceContextInjectBenchmark {
createTestSpanContext("905734c59b913b4a905734c59b913b4a", "776ff807b787538a"),
createTestSpanContext("68ec932c33b3f2ee68ec932c33b3f2ee", "68ec932c33b3f2ee"));
private static final int COUNT = 5; // spanContexts.size()
private final HttpTraceContext httpTraceContext = HttpTraceContext.getInstance();
private final TextMapPropagator w3cTraceContextPropagator =
W3CTraceContextPropagator.getInstance();
private final Map<String, String> carrier = new HashMap<>();
private final Setter<Map<String, String>> setter =
new Setter<Map<String, String>>() {
@ -60,7 +62,7 @@ public class HttpTraceContextInjectBenchmark {
@OperationsPerInvocation(COUNT)
public Map<String, String> measureInject() {
for (int i = 0; i < COUNT; i++) {
httpTraceContext.inject(contexts.get(i), carrier, setter);
w3cTraceContextPropagator.inject(contexts.get(i), carrier, setter);
}
return carrier;
}

View File

@ -5,231 +5,45 @@
package io.opentelemetry.api.trace.propagation;
import static io.opentelemetry.api.internal.Utils.checkArgument;
import io.opentelemetry.api.internal.TemporaryBuffers;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.api.trace.TraceStateBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
/**
* Implementation of the TraceContext propagation protocol. See <a
* href=https://github.com/w3c/distributed-tracing>w3c/distributed-tracing</a>.
* Deprecated alias of an implementation of the W3C TraceContext propagation protocol. Use {@link
* W3CTraceContextPropagator} instead.
*/
@Immutable
@Deprecated
public final class HttpTraceContext implements TextMapPropagator {
private static final Logger logger = Logger.getLogger(HttpTraceContext.class.getName());
private static final TraceState TRACE_STATE_DEFAULT = TraceState.builder().build();
static final String TRACE_PARENT = "traceparent";
static final String TRACE_STATE = "tracestate";
private static final List<String> FIELDS =
Collections.unmodifiableList(Arrays.asList(TRACE_PARENT, TRACE_STATE));
private static final String VERSION = "00";
private static final int VERSION_SIZE = 2;
private static final char TRACEPARENT_DELIMITER = '-';
private static final int TRACEPARENT_DELIMITER_SIZE = 1;
private static final int TRACE_ID_HEX_SIZE = TraceId.getHexLength();
private static final int SPAN_ID_HEX_SIZE = SpanId.getHexLength();
private static final int TRACE_OPTION_HEX_SIZE = TraceFlags.getHexLength();
private static final int TRACE_ID_OFFSET = VERSION_SIZE + TRACEPARENT_DELIMITER_SIZE;
private static final int SPAN_ID_OFFSET =
TRACE_ID_OFFSET + TRACE_ID_HEX_SIZE + TRACEPARENT_DELIMITER_SIZE;
private static final int TRACE_OPTION_OFFSET =
SPAN_ID_OFFSET + SPAN_ID_HEX_SIZE + TRACEPARENT_DELIMITER_SIZE;
private static final int TRACEPARENT_HEADER_SIZE = TRACE_OPTION_OFFSET + TRACE_OPTION_HEX_SIZE;
private static final int TRACESTATE_MAX_SIZE = 512;
private static final int TRACESTATE_MAX_MEMBERS = 32;
private static final char TRACESTATE_KEY_VALUE_DELIMITER = '=';
private static final char TRACESTATE_ENTRY_DELIMITER = ',';
private static final Pattern TRACESTATE_ENTRY_DELIMITER_SPLIT_PATTERN =
Pattern.compile("[ \t]*" + TRACESTATE_ENTRY_DELIMITER + "[ \t]*");
private static final Set<String> VALID_VERSIONS;
private static final String VERSION_00 = "00";
private static final HttpTraceContext INSTANCE = new HttpTraceContext();
static {
// A valid version is 1 byte representing an 8-bit unsigned integer, version ff is invalid.
VALID_VERSIONS = new HashSet<>();
for (int i = 0; i < 255; i++) {
String version = Long.toHexString(i);
if (version.length() < 2) {
version = '0' + version;
}
VALID_VERSIONS.add(version);
}
}
private HttpTraceContext() {
// singleton
}
/**
* Returns a singleton instance of a {@link TextMapPropagator} implementing the W3C TraceContext
* propagation. Deprecated: use {@link W3CTraceContextPropagator#getInstance()} instead.
*/
public static HttpTraceContext getInstance() {
return INSTANCE;
}
@Override
public List<String> fields() {
return FIELDS;
return W3CTraceContextPropagator.getInstance().fields();
}
@Override
public <C> void inject(Context context, C carrier, Setter<C> setter) {
Objects.requireNonNull(context, "context");
Objects.requireNonNull(setter, "setter");
SpanContext spanContext = Span.fromContext(context).getSpanContext();
if (!spanContext.isValid()) {
return;
}
char[] chars = TemporaryBuffers.chars(TRACEPARENT_HEADER_SIZE);
chars[0] = VERSION.charAt(0);
chars[1] = VERSION.charAt(1);
chars[2] = TRACEPARENT_DELIMITER;
String traceId = spanContext.getTraceIdAsHexString();
for (int i = 0; i < traceId.length(); i++) {
chars[TRACE_ID_OFFSET + i] = traceId.charAt(i);
}
chars[SPAN_ID_OFFSET - 1] = TRACEPARENT_DELIMITER;
String spanId = spanContext.getSpanIdAsHexString();
for (int i = 0; i < spanId.length(); i++) {
chars[SPAN_ID_OFFSET + i] = spanId.charAt(i);
}
chars[TRACE_OPTION_OFFSET - 1] = TRACEPARENT_DELIMITER;
spanContext.copyTraceFlagsHexTo(chars, TRACE_OPTION_OFFSET);
setter.set(carrier, TRACE_PARENT, new String(chars, 0, TRACEPARENT_HEADER_SIZE));
TraceState traceState = spanContext.getTraceState();
if (traceState.isEmpty()) {
// No need to add an empty "tracestate" header.
return;
}
StringBuilder stringBuilder = new StringBuilder(TRACESTATE_MAX_SIZE);
traceState.forEach(
(key, value) -> {
if (stringBuilder.length() != 0) {
stringBuilder.append(TRACESTATE_ENTRY_DELIMITER);
}
stringBuilder.append(key).append(TRACESTATE_KEY_VALUE_DELIMITER).append(value);
});
setter.set(carrier, TRACE_STATE, stringBuilder.toString());
public <C> void inject(Context context, @Nullable C carrier, Setter<C> setter) {
W3CTraceContextPropagator.getInstance().inject(context, carrier, setter);
}
@Override
public <C /*>>> extends @NonNull Object*/> Context extract(
Context context, @Nullable C carrier, Getter<C> getter) {
Objects.requireNonNull(context, "context");
Objects.requireNonNull(getter, "getter");
SpanContext spanContext = extractImpl(carrier, getter);
if (!spanContext.isValid()) {
return context;
}
return context.with(Span.wrap(spanContext));
}
private static <C> SpanContext extractImpl(C carrier, Getter<C> getter) {
String traceParent = getter.get(carrier, TRACE_PARENT);
if (traceParent == null) {
return SpanContext.getInvalid();
}
SpanContext contextFromParentHeader = extractContextFromTraceParent(traceParent);
if (!contextFromParentHeader.isValid()) {
return contextFromParentHeader;
}
String traceStateHeader = getter.get(carrier, TRACE_STATE);
if (traceStateHeader == null || traceStateHeader.isEmpty()) {
return contextFromParentHeader;
}
try {
TraceState traceState = extractTraceState(traceStateHeader);
return SpanContext.createFromRemoteParent(
contextFromParentHeader.getTraceIdAsHexString(),
contextFromParentHeader.getSpanIdAsHexString(),
contextFromParentHeader.getTraceFlags(),
traceState);
} catch (IllegalArgumentException e) {
logger.fine("Unparseable tracestate header. Returning span context without state.");
return contextFromParentHeader;
}
}
private static SpanContext extractContextFromTraceParent(String traceparent) {
// TODO(bdrutu): Do we need to verify that version is hex and that
// for the version the length is the expected one?
boolean isValid =
(traceparent.length() == TRACEPARENT_HEADER_SIZE
|| (traceparent.length() > TRACEPARENT_HEADER_SIZE
&& traceparent.charAt(TRACEPARENT_HEADER_SIZE) == TRACEPARENT_DELIMITER))
&& traceparent.charAt(TRACE_ID_OFFSET - 1) == TRACEPARENT_DELIMITER
&& traceparent.charAt(SPAN_ID_OFFSET - 1) == TRACEPARENT_DELIMITER
&& traceparent.charAt(TRACE_OPTION_OFFSET - 1) == TRACEPARENT_DELIMITER;
if (!isValid) {
logger.fine("Unparseable traceparent header. Returning INVALID span context.");
return SpanContext.getInvalid();
}
try {
String version = traceparent.substring(0, 2);
if (!VALID_VERSIONS.contains(version)) {
return SpanContext.getInvalid();
}
if (version.equals(VERSION_00) && traceparent.length() > TRACEPARENT_HEADER_SIZE) {
return SpanContext.getInvalid();
}
String traceId =
traceparent.substring(TRACE_ID_OFFSET, TRACE_ID_OFFSET + TraceId.getHexLength());
String spanId = traceparent.substring(SPAN_ID_OFFSET, SPAN_ID_OFFSET + SpanId.getHexLength());
if (TraceId.isValid(traceId) && SpanId.isValid(spanId)) {
byte isSampled = TraceFlags.byteFromHex(traceparent, TRACE_OPTION_OFFSET);
return SpanContext.createFromRemoteParent(traceId, spanId, isSampled, TRACE_STATE_DEFAULT);
}
return SpanContext.getInvalid();
} catch (IllegalArgumentException e) {
logger.fine("Unparseable traceparent header. Returning INVALID span context.");
return SpanContext.getInvalid();
}
}
private static TraceState extractTraceState(String traceStateHeader) {
TraceStateBuilder traceStateBuilder = TraceState.builder();
String[] listMembers = TRACESTATE_ENTRY_DELIMITER_SPLIT_PATTERN.split(traceStateHeader);
checkArgument(
listMembers.length <= TRACESTATE_MAX_MEMBERS, "TraceState has too many elements.");
// Iterate in reverse order because when call builder set the elements is added in the
// front of the list.
for (int i = listMembers.length - 1; i >= 0; i--) {
String listMember = listMembers[i];
int index = listMember.indexOf(TRACESTATE_KEY_VALUE_DELIMITER);
checkArgument(index != -1, "Invalid TraceState list-member format.");
traceStateBuilder.set(listMember.substring(0, index), listMember.substring(index + 1));
}
return traceStateBuilder.build();
public <C> Context extract(Context context, @Nullable C carrier, Getter<C> getter) {
return W3CTraceContextPropagator.getInstance().extract(context, carrier, getter);
}
}

View File

@ -0,0 +1,243 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.api.trace.propagation;
import static io.opentelemetry.api.internal.Utils.checkArgument;
import io.opentelemetry.api.internal.TemporaryBuffers;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.api.trace.TraceStateBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
/**
* Implementation of the W3C TraceContext propagation protocol. See <a
* href="https://www.w3.org/TR/trace-context-1/">W3C Trace Context</a>.
*
* <p>This is the default propagator for {@link SpanContext}s. The {@link SpanContext} type is
* designed to support all the data propagated via W3C propagation natively.
*/
@Immutable
public final class W3CTraceContextPropagator {
private static final Logger logger = Logger.getLogger(W3CTraceContextPropagator.class.getName());
private static final TraceState TRACE_STATE_DEFAULT = TraceState.builder().build();
static final String TRACE_PARENT = "traceparent";
static final String TRACE_STATE = "tracestate";
private static final List<String> FIELDS =
Collections.unmodifiableList(Arrays.asList(TRACE_PARENT, TRACE_STATE));
private static final String VERSION = "00";
private static final int VERSION_SIZE = 2;
private static final char TRACEPARENT_DELIMITER = '-';
private static final int TRACEPARENT_DELIMITER_SIZE = 1;
private static final int TRACE_ID_HEX_SIZE = TraceId.getHexLength();
private static final int SPAN_ID_HEX_SIZE = SpanId.getHexLength();
private static final int TRACE_OPTION_HEX_SIZE = TraceFlags.getHexLength();
private static final int TRACE_ID_OFFSET = VERSION_SIZE + TRACEPARENT_DELIMITER_SIZE;
private static final int SPAN_ID_OFFSET =
TRACE_ID_OFFSET + TRACE_ID_HEX_SIZE + TRACEPARENT_DELIMITER_SIZE;
private static final int TRACE_OPTION_OFFSET =
SPAN_ID_OFFSET + SPAN_ID_HEX_SIZE + TRACEPARENT_DELIMITER_SIZE;
private static final int TRACEPARENT_HEADER_SIZE = TRACE_OPTION_OFFSET + TRACE_OPTION_HEX_SIZE;
private static final int TRACESTATE_MAX_SIZE = 512;
private static final int TRACESTATE_MAX_MEMBERS = 32;
private static final char TRACESTATE_KEY_VALUE_DELIMITER = '=';
private static final char TRACESTATE_ENTRY_DELIMITER = ',';
private static final Pattern TRACESTATE_ENTRY_DELIMITER_SPLIT_PATTERN =
Pattern.compile("[ \t]*" + TRACESTATE_ENTRY_DELIMITER + "[ \t]*");
private static final Set<String> VALID_VERSIONS;
private static final String VERSION_00 = "00";
private static final TextMapPropagator INSTANCE =
new TextMapPropagator() {
@Override
public List<String> fields() {
return FIELDS;
}
@Override
public <C> void inject(Context context, C carrier, Setter<C> setter) {
Objects.requireNonNull(context, "context");
Objects.requireNonNull(setter, "setter");
SpanContext spanContext = Span.fromContext(context).getSpanContext();
if (!spanContext.isValid()) {
return;
}
char[] chars = TemporaryBuffers.chars(TRACEPARENT_HEADER_SIZE);
chars[0] = VERSION.charAt(0);
chars[1] = VERSION.charAt(1);
chars[2] = TRACEPARENT_DELIMITER;
String traceId = spanContext.getTraceIdAsHexString();
for (int i = 0; i < traceId.length(); i++) {
chars[TRACE_ID_OFFSET + i] = traceId.charAt(i);
}
chars[SPAN_ID_OFFSET - 1] = TRACEPARENT_DELIMITER;
String spanId = spanContext.getSpanIdAsHexString();
for (int i = 0; i < spanId.length(); i++) {
chars[SPAN_ID_OFFSET + i] = spanId.charAt(i);
}
chars[TRACE_OPTION_OFFSET - 1] = TRACEPARENT_DELIMITER;
spanContext.copyTraceFlagsHexTo(chars, TRACE_OPTION_OFFSET);
setter.set(carrier, TRACE_PARENT, new String(chars, 0, TRACEPARENT_HEADER_SIZE));
TraceState traceState = spanContext.getTraceState();
if (traceState.isEmpty()) {
// No need to add an empty "tracestate" header.
return;
}
StringBuilder stringBuilder = new StringBuilder(TRACESTATE_MAX_SIZE);
traceState.forEach(
(key, value) -> {
if (stringBuilder.length() != 0) {
stringBuilder.append(TRACESTATE_ENTRY_DELIMITER);
}
stringBuilder.append(key).append(TRACESTATE_KEY_VALUE_DELIMITER).append(value);
});
setter.set(carrier, TRACE_STATE, stringBuilder.toString());
}
@Override
public <C /*>>> extends @NonNull Object*/> Context extract(
Context context, @Nullable C carrier, Getter<C> getter) {
Objects.requireNonNull(context, "context");
Objects.requireNonNull(getter, "getter");
SpanContext spanContext = extractImpl(carrier, getter);
if (!spanContext.isValid()) {
return context;
}
return context.with(Span.wrap(spanContext));
}
};
static {
// A valid version is 1 byte representing an 8-bit unsigned integer, version ff is invalid.
VALID_VERSIONS = new HashSet<>();
for (int i = 0; i < 255; i++) {
String version = Long.toHexString(i);
if (version.length() < 2) {
version = '0' + version;
}
VALID_VERSIONS.add(version);
}
}
private W3CTraceContextPropagator() {
// singleton
}
/**
* Returns a singleton instance of a {@link TextMapPropagator} implementing the W3C TraceContext
* propagation.
*/
public static TextMapPropagator getInstance() {
return INSTANCE;
}
private static <C> SpanContext extractImpl(C carrier, TextMapPropagator.Getter<C> getter) {
String traceParent = getter.get(carrier, TRACE_PARENT);
if (traceParent == null) {
return SpanContext.getInvalid();
}
SpanContext contextFromParentHeader = extractContextFromTraceParent(traceParent);
if (!contextFromParentHeader.isValid()) {
return contextFromParentHeader;
}
String traceStateHeader = getter.get(carrier, TRACE_STATE);
if (traceStateHeader == null || traceStateHeader.isEmpty()) {
return contextFromParentHeader;
}
try {
TraceState traceState = extractTraceState(traceStateHeader);
return SpanContext.createFromRemoteParent(
contextFromParentHeader.getTraceIdAsHexString(),
contextFromParentHeader.getSpanIdAsHexString(),
contextFromParentHeader.getTraceFlags(),
traceState);
} catch (IllegalArgumentException e) {
logger.fine("Unparseable tracestate header. Returning span context without state.");
return contextFromParentHeader;
}
}
private static SpanContext extractContextFromTraceParent(String traceparent) {
// TODO(bdrutu): Do we need to verify that version is hex and that
// for the version the length is the expected one?
boolean isValid =
(traceparent.length() == TRACEPARENT_HEADER_SIZE
|| (traceparent.length() > TRACEPARENT_HEADER_SIZE
&& traceparent.charAt(TRACEPARENT_HEADER_SIZE) == TRACEPARENT_DELIMITER))
&& traceparent.charAt(TRACE_ID_OFFSET - 1) == TRACEPARENT_DELIMITER
&& traceparent.charAt(SPAN_ID_OFFSET - 1) == TRACEPARENT_DELIMITER
&& traceparent.charAt(TRACE_OPTION_OFFSET - 1) == TRACEPARENT_DELIMITER;
if (!isValid) {
logger.fine("Unparseable traceparent header. Returning INVALID span context.");
return SpanContext.getInvalid();
}
try {
String version = traceparent.substring(0, 2);
if (!VALID_VERSIONS.contains(version)) {
return SpanContext.getInvalid();
}
if (version.equals(VERSION_00) && traceparent.length() > TRACEPARENT_HEADER_SIZE) {
return SpanContext.getInvalid();
}
String traceId =
traceparent.substring(TRACE_ID_OFFSET, TRACE_ID_OFFSET + TraceId.getHexLength());
String spanId = traceparent.substring(SPAN_ID_OFFSET, SPAN_ID_OFFSET + SpanId.getHexLength());
if (TraceId.isValid(traceId) && SpanId.isValid(spanId)) {
byte isSampled = TraceFlags.byteFromHex(traceparent, TRACE_OPTION_OFFSET);
return SpanContext.createFromRemoteParent(traceId, spanId, isSampled, TRACE_STATE_DEFAULT);
}
return SpanContext.getInvalid();
} catch (IllegalArgumentException e) {
logger.fine("Unparseable traceparent header. Returning INVALID span context.");
return SpanContext.getInvalid();
}
}
private static TraceState extractTraceState(String traceStateHeader) {
TraceStateBuilder traceStateBuilder = TraceState.builder();
String[] listMembers = TRACESTATE_ENTRY_DELIMITER_SPLIT_PATTERN.split(traceStateHeader);
checkArgument(
listMembers.length <= TRACESTATE_MAX_MEMBERS, "TraceState has too many elements.");
// Iterate in reverse order because when call builder set the elements is added in the
// front of the list.
for (int i = listMembers.length - 1; i >= 0; i--) {
String listMember = listMembers[i];
int index = listMember.indexOf(TRACESTATE_KEY_VALUE_DELIMITER);
checkArgument(index != -1, "Invalid TraceState list-member format.");
traceStateBuilder.set(listMember.substring(0, index), listMember.substring(index + 1));
}
return traceStateBuilder.build();
}
}

View File

@ -11,6 +11,7 @@ import com.google.common.collect.ImmutableMap;
import edu.berkeley.cs.jqf.fuzz.Fuzz;
import edu.berkeley.cs.jqf.fuzz.JQF;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
import java.util.Map;
import javax.annotation.Nullable;
@ -18,13 +19,14 @@ import org.junit.runner.RunWith;
@RunWith(JQF.class)
@SuppressWarnings("JavadocMethod")
public class HttpTraceContextFuzzTest {
private final HttpTraceContext httpTraceContext = HttpTraceContext.getInstance();
public class W3CTraceContextPropagatorFuzzTest {
private final TextMapPropagator w3cTraceContextPropagator =
W3CTraceContextPropagator.getInstance();
@Fuzz
public void safeForRandomInputs(String traceParentHeader, String traceStateHeader) {
Context context =
httpTraceContext.extract(
w3cTraceContextPropagator.extract(
Context.root(),
ImmutableMap.of("traceparent", traceParentHeader, "tracestate", traceStateHeader),
new Getter<Map<String, String>>() {

View File

@ -5,8 +5,8 @@
package io.opentelemetry.api.trace.propagation;
import static io.opentelemetry.api.trace.propagation.HttpTraceContext.TRACE_PARENT;
import static io.opentelemetry.api.trace.propagation.HttpTraceContext.TRACE_STATE;
import static io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.TRACE_PARENT;
import static io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator.TRACE_STATE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry;
@ -17,6 +17,7 @@ import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
import io.opentelemetry.context.propagation.TextMapPropagator.Setter;
import java.util.Collections;
@ -26,8 +27,8 @@ import java.util.Map;
import javax.annotation.Nullable;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link HttpTraceContext}. */
class HttpTraceContextTest {
/** Unit tests for {@link W3CTraceContextPropagator}. */
class W3CTraceContextPropagatorTest {
private static final TraceState TRACE_STATE_DEFAULT = TraceState.builder().build();
private static final TraceState TRACE_STATE_NOT_DEFAULT =
@ -57,7 +58,8 @@ class HttpTraceContextTest {
private static final String TRACESTATE_NOT_DEFAULT_ENCODING = "bar=baz,foo=bar";
private static final String TRACESTATE_NOT_DEFAULT_ENCODING_WITH_SPACES =
"bar=baz , foo=bar";
private final HttpTraceContext httpTraceContext = HttpTraceContext.getInstance();
private final TextMapPropagator w3cTraceContextPropagator =
W3CTraceContextPropagator.getInstance();
private static SpanContext getSpanContext(Context context) {
return Span.fromContext(context).getSpanContext();
@ -70,7 +72,7 @@ class HttpTraceContextTest {
@Test
void inject_Nothing() {
Map<String, String> carrier = new LinkedHashMap<>();
httpTraceContext.inject(Context.current(), carrier, setter);
w3cTraceContextPropagator.inject(Context.current(), carrier, setter);
assertThat(carrier).hasSize(0);
}
@ -82,7 +84,7 @@ class HttpTraceContextTest {
SpanContext.create(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT),
Context.current());
httpTraceContext.inject(
w3cTraceContextPropagator.inject(
context,
null,
(Setter<Map<String, String>>) (ignored, key, value) -> carrier.put(key, value));
@ -92,7 +94,7 @@ class HttpTraceContextTest {
@Test
void inject_invalidContext() {
Map<String, String> carrier = new LinkedHashMap<>();
httpTraceContext.inject(
w3cTraceContextPropagator.inject(
withSpanContext(
SpanContext.create(
TraceId.getInvalid(),
@ -113,7 +115,7 @@ class HttpTraceContextTest {
SpanContext.create(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT),
Context.current());
httpTraceContext.inject(context, carrier, setter);
w3cTraceContextPropagator.inject(context, carrier, setter);
assertThat(carrier).containsExactly(entry(TRACE_PARENT, TRACEPARENT_HEADER_SAMPLED));
}
@ -125,7 +127,7 @@ class HttpTraceContextTest {
SpanContext.create(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_DEFAULT),
Context.current());
httpTraceContext.inject(context, carrier, setter);
w3cTraceContextPropagator.inject(context, carrier, setter);
assertThat(carrier).containsExactly(entry(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED));
}
@ -137,7 +139,7 @@ class HttpTraceContextTest {
SpanContext.create(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_NOT_DEFAULT),
Context.current());
httpTraceContext.inject(context, carrier, setter);
w3cTraceContextPropagator.inject(context, carrier, setter);
assertThat(carrier)
.containsExactly(
entry(TRACE_PARENT, TRACEPARENT_HEADER_SAMPLED),
@ -152,7 +154,7 @@ class HttpTraceContextTest {
SpanContext.create(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_NOT_DEFAULT),
Context.current());
httpTraceContext.inject(context, carrier, setter);
w3cTraceContextPropagator.inject(context, carrier, setter);
assertThat(carrier)
.containsExactly(
entry(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED),
@ -163,7 +165,7 @@ class HttpTraceContextTest {
void extract_Nothing() {
// Context remains untouched.
assertThat(
httpTraceContext.extract(
w3cTraceContextPropagator.extract(
Context.current(), Collections.<String, String>emptyMap(), getter))
.isSameAs(Context.current());
}
@ -172,7 +174,8 @@ class HttpTraceContextTest {
void extract_SampledContext() {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_SAMPLED);
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT));
@ -182,7 +185,8 @@ class HttpTraceContextTest {
void extract_NullCarrier() {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_SAMPLED);
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT));
@ -193,9 +197,9 @@ class HttpTraceContextTest {
String traceParent = "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-03";
Map<String, String> extractCarrier = new LinkedHashMap<>();
extractCarrier.put(TRACE_PARENT, traceParent);
Context context = httpTraceContext.extract(Context.current(), extractCarrier, getter);
Context context = w3cTraceContextPropagator.extract(Context.current(), extractCarrier, getter);
Map<String, String> injectCarrier = new LinkedHashMap<>();
httpTraceContext.inject(context, injectCarrier, setter);
w3cTraceContextPropagator.inject(context, injectCarrier, setter);
assertThat(extractCarrier).isEqualTo(injectCarrier);
}
@ -203,7 +207,8 @@ class HttpTraceContextTest {
void extract_NotSampledContext() {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED);
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_DEFAULT));
@ -214,7 +219,8 @@ class HttpTraceContextTest {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_SAMPLED);
carrier.put(TRACE_STATE, TRACESTATE_NOT_DEFAULT_ENCODING);
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_NOT_DEFAULT));
@ -225,7 +231,8 @@ class HttpTraceContextTest {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED);
carrier.put(TRACE_STATE, TRACESTATE_NOT_DEFAULT_ENCODING);
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_NOT_DEFAULT));
@ -235,7 +242,8 @@ class HttpTraceContextTest {
void extract_NotSampledContext_NextVersion() {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, "01-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-00-02");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_DEFAULT));
@ -246,7 +254,8 @@ class HttpTraceContextTest {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED);
carrier.put(TRACE_STATE, "");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_DEFAULT));
@ -257,7 +266,8 @@ class HttpTraceContextTest {
Map<String, String> carrier = new LinkedHashMap<>();
carrier.put(TRACE_PARENT, TRACEPARENT_HEADER_NOT_SAMPLED);
carrier.put(TRACE_STATE, TRACESTATE_NOT_DEFAULT_ENCODING_WITH_SPACES);
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), carrier, getter)))
assertThat(
getSpanContext(w3cTraceContextPropagator.extract(Context.current(), carrier, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_NOT_DEFAULT));
@ -267,7 +277,9 @@ class HttpTraceContextTest {
void extract_EmptyHeader() {
Map<String, String> invalidHeaders = new LinkedHashMap<>();
invalidHeaders.put(TRACE_PARENT, "");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -276,7 +288,9 @@ class HttpTraceContextTest {
Map<String, String> invalidHeaders = new LinkedHashMap<>();
invalidHeaders.put(
TRACE_PARENT, "00-" + "abcdefghijklmnopabcdefghijklmnop" + "-" + SPAN_ID_BASE16 + "-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -284,7 +298,9 @@ class HttpTraceContextTest {
void extract_InvalidTraceId_Size() {
Map<String, String> invalidHeaders = new LinkedHashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "00-" + SPAN_ID_BASE16 + "-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -292,7 +308,9 @@ class HttpTraceContextTest {
void extract_InvalidSpanId() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + "abcdefghijklmnop" + "-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -300,7 +318,9 @@ class HttpTraceContextTest {
void extract_InvalidSpanId_Size() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "00-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -308,7 +328,9 @@ class HttpTraceContextTest {
void extract_InvalidTraceFlags() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-gh");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -316,7 +338,9 @@ class HttpTraceContextTest {
void extract_InvalidTraceFlags_Size() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-0100");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -325,7 +349,9 @@ class HttpTraceContextTest {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-01");
invalidHeaders.put(TRACE_STATE, "foo=bar;test=test");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT));
@ -336,7 +362,9 @@ class HttpTraceContextTest {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-01");
invalidHeaders.put(TRACE_STATE, "foo=bar,test-test");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT));
@ -347,7 +375,9 @@ class HttpTraceContextTest {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-01");
invalidHeaders.put(TRACE_STATE, "test-test");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT));
@ -357,7 +387,9 @@ class HttpTraceContextTest {
void extract_InvalidVersion_ff() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "ff-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -365,7 +397,9 @@ class HttpTraceContextTest {
void extract_InvalidTraceparent_extraTrailing() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-00-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
@ -373,7 +407,9 @@ class HttpTraceContextTest {
void extract_ValidTraceparent_nextVersion_extraTrailing() {
Map<String, String> invalidHeaders = new HashMap<>();
invalidHeaders.put(TRACE_PARENT, "01-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-00-01");
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), invalidHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), invalidHeaders, getter)))
.isEqualTo(
SpanContext.createFromRemoteParent(
TRACE_ID_BASE16, SPAN_ID_BASE16, TraceFlags.getDefault(), TRACE_STATE_DEFAULT));
@ -381,7 +417,7 @@ class HttpTraceContextTest {
@Test
void fieldsList() {
assertThat(httpTraceContext.fields()).containsExactly(TRACE_PARENT, TRACE_STATE);
assertThat(w3cTraceContextPropagator.fields()).containsExactly(TRACE_PARENT, TRACE_STATE);
}
@Test
@ -393,7 +429,9 @@ class HttpTraceContextTest {
@Test
void extract_emptyCarrier() {
Map<String, String> emptyHeaders = new HashMap<>();
assertThat(getSpanContext(httpTraceContext.extract(Context.current(), emptyHeaders, getter)))
assertThat(
getSpanContext(
w3cTraceContextPropagator.extract(Context.current(), emptyHeaders, getter)))
.isSameAs(SpanContext.getInvalid());
}
}

View File

@ -15,6 +15,7 @@ import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
import io.opentelemetry.context.propagation.TextMapPropagator.Setter;
@ -25,7 +26,7 @@ import java.util.Map;
import javax.annotation.Nullable;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link io.opentelemetry.api.trace.propagation.HttpTraceContext}. */
/** Unit tests for {@link W3CTraceContextPropagator}. */
class B3PropagatorTest {
private static final TraceState TRACE_STATE_DEFAULT = TraceState.builder().build();

View File

@ -16,7 +16,7 @@ import io.opentelemetry.api.trace.SpanId;
import io.opentelemetry.api.trace.TraceFlags;
import io.opentelemetry.api.trace.TraceId;
import io.opentelemetry.api.trace.TraceState;
import io.opentelemetry.api.trace.propagation.HttpTraceContext;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapPropagator;
import java.util.Arrays;
@ -34,7 +34,7 @@ class TraceMultiPropagatorTest {
private static final TextMapPropagator PROPAGATOR1 = B3Propagator.getInstance();
private static final TextMapPropagator PROPAGATOR2 =
B3Propagator.builder().injectMultipleHeaders().build();
private static final TextMapPropagator PROPAGATOR3 = HttpTraceContext.getInstance();
private static final TextMapPropagator PROPAGATOR3 = W3CTraceContextPropagator.getInstance();
private static final TextMapPropagator.Getter<Map<String, String>> getter =
new TextMapPropagator.Getter<Map<String, String>>() {

View File

@ -8,7 +8,7 @@ package io.opentelemetry;
import com.google.gson.Gson;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.propagation.HttpTraceContext;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
@ -33,7 +33,8 @@ public class Application {
private static final OpenTelemetry openTelemetry;
static {
OpenTelemetry.setGlobalPropagators(ContextPropagators.create(HttpTraceContext.getInstance()));
OpenTelemetry.setGlobalPropagators(
ContextPropagators.create(W3CTraceContextPropagator.getInstance()));
openTelemetry = OpenTelemetry.get();
}

View File

@ -6,7 +6,7 @@
package io.opentelemetry.sdk.testing.junit4;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.propagation.HttpTraceContext;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
@ -55,7 +55,7 @@ public class OpenTelemetryRule extends ExternalResource {
OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setPropagators(ContextPropagators.create(HttpTraceContext.getInstance()))
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.setTracerProvider(tracerProvider)
.build();

View File

@ -8,7 +8,7 @@ package io.opentelemetry.sdk.testing.junit5;
import static io.opentelemetry.sdk.testing.assertj.TracesAssert.assertThat;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.propagation.HttpTraceContext;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.testing.assertj.TracesAssert;
@ -61,7 +61,7 @@ public class OpenTelemetryExtension
OpenTelemetrySdk openTelemetry =
OpenTelemetrySdk.builder()
.setPropagators(ContextPropagators.create(HttpTraceContext.getInstance()))
.setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
.setTracerProvider(tracerProvider)
.build();