diff --git a/api/src/main/java/io/opentelemetry/trace/SpanContext.java b/api/src/main/java/io/opentelemetry/trace/SpanContext.java index 9b79833408..b514f9b84e 100644 --- a/api/src/main/java/io/opentelemetry/trace/SpanContext.java +++ b/api/src/main/java/io/opentelemetry/trace/SpanContext.java @@ -120,8 +120,7 @@ public abstract class SpanContext { public abstract byte getTraceFlags(); public void copyTraceFlagsHexTo(char[] dest, int destOffset) { - dest[destOffset] = '0'; - dest[destOffset + 1] = isSampled() ? '1' : '0'; + BigendianEncoding.byteToBase16String(getTraceFlags(), dest, destOffset); } /** diff --git a/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java b/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java index 37ae48f10d..a9b2eb9039 100644 --- a/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java +++ b/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java @@ -177,6 +177,17 @@ class HttpTraceContextTest { TRACE_ID_BASE16, SPAN_ID_BASE16, SAMPLED_TRACE_OPTIONS, TRACE_STATE_DEFAULT)); } + @Test + void extractAndInject_MoreFlags() { + String traceParent = "00-" + TRACE_ID_BASE16 + "-" + SPAN_ID_BASE16 + "-03"; + Map extractCarrier = new LinkedHashMap<>(); + extractCarrier.put(TRACE_PARENT, traceParent); + Context context = httpTraceContext.extract(Context.current(), extractCarrier, getter); + Map injectCarrier = new LinkedHashMap<>(); + httpTraceContext.inject(context, injectCarrier, setter); + assertThat(extractCarrier).isEqualTo(injectCarrier); + } + @Test void extract_NotSampledContext() { Map carrier = new LinkedHashMap<>();