diff --git a/ddtrace/propagation/http.py b/ddtrace/propagation/http.py index 979754f1396..7d86f7a79b8 100644 --- a/ddtrace/propagation/http.py +++ b/ddtrace/propagation/http.py @@ -107,9 +107,12 @@ def _extract_header_value(possible_header_names, headers, default=None): def _hex_id_to_dd_id(hex_id): # type: (str) -> int """Helper to convert hex ids into Datadog compatible ints - If the id is > 64 bit then truncate the trailing 64 bit. + If the id is > 64 bit and 128bit trace_id generation is disabled then truncate the trailing 64 bit. "463ac35c9f6413ad48485a3953bb6124" -> "48485a3953bb6124" -> 5208512171318403364 + Otherwise convert the full trace id into lower case hex values. """ + if config._128_bit_trace_id_enabled: + return int(hex_id, 16) return int(hex_id[-16:], 16) @@ -118,9 +121,11 @@ def _hex_id_to_dd_id(hex_id): def _dd_id_to_b3_id(dd_id): # type: (int) -> str - """Helper to convert Datadog trace/span int ids into hex ids""" - # DEV: `hex(dd_id)` will give us `0xDEADBEEF` - # DEV: this gives us lowercase hex, which is what we want + """Helper to convert Datadog trace/span int ids into lower case hex values""" + if dd_id > _MAX_UINT_64BITS: + # b3 trace ids can have the length of 16 or 32 characters: + # https://github.com/openzipkin/b3-propagation#traceid + return "{:032x}".format(dd_id) return "{:016x}".format(dd_id) diff --git a/releasenotes/notes/128bit-trace-id-support-b3-w3c-b5746f84a509fa24.yaml b/releasenotes/notes/128bit-trace-id-support-b3-w3c-b5746f84a509fa24.yaml new file mode 100644 index 00000000000..8b54425d499 --- /dev/null +++ b/releasenotes/notes/128bit-trace-id-support-b3-w3c-b5746f84a509fa24.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + tracing: Adds support for 128 bit trace ids for b3 and w3c distributing tracing headers. diff --git a/tests/tracer/test_propagation.py b/tests/tracer/test_propagation.py index 7fa7c5a04e6..dcde3334989 100644 --- a/tests/tracer/test_propagation.py +++ b/tests/tracer/test_propagation.py @@ -6,12 +6,12 @@ import pytest from ddtrace.context import Context -from ddtrace.internal.constants import HIGHER_ORDER_TRACE_ID_BITS from ddtrace.internal.constants import PROPAGATION_STYLE_B3 from ddtrace.internal.constants import PROPAGATION_STYLE_B3_SINGLE_HEADER from ddtrace.internal.constants import PROPAGATION_STYLE_DATADOG from ddtrace.internal.constants import _PROPAGATION_STYLE_NONE from ddtrace.internal.constants import _PROPAGATION_STYLE_W3C_TRACECONTEXT +from ddtrace.internal.utils.formats import asbool from ddtrace.propagation._utils import get_wsgi_header from ddtrace.propagation.http import HTTPPropagator from ddtrace.propagation.http import HTTP_HEADER_ORIGIN @@ -51,35 +51,103 @@ def test_inject(tracer): assert tags == set(["_dd.p.test=value", "_dd.p.other=value"]) -@pytest.mark.parametrize( - "trace_id", - [ - 2 ** 128 - 1, - 2 ** 127 + 1, - 2 ** 65 - 1, - 2 ** 64 + 1, - 2 ** 127 + 2 ** 63, - ], +@pytest.mark.subprocess( + env=dict(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", DD_TRACE_PROPAGATION_STYLE=PROPAGATION_STYLE_DATADOG), ) -def test_inject_128bit_trace_id(tracer, trace_id): - # Get 64 least significant bits and convert result to a base 10 integer - trace_id_64bit = trace_id & 2 ** 64 - 1 - # Get the hex representation of the 64 most signicant bits - trace_id_hob_hex = "{:032x}".format(trace_id)[:16] +def test_inject_128bit_trace_id_datadog(): + from ddtrace.context import Context + from ddtrace.internal.constants import HIGHER_ORDER_TRACE_ID_BITS + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer - ctx = Context(trace_id=trace_id, meta={"_dd.t.tid": trace_id_hob_hex}) - tracer.context_provider.activate(ctx) - with tracer.trace("global_root_span") as span: - assert span.trace_id == trace_id - assert span._trace_id_64bits == trace_id_64bit + tracer = DummyTracer() - headers = {} - HTTPPropagator.inject(span.context, headers) + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + # Get the hex representation of the 64 most signicant bits + trace_id_hob_hex = "{:032x}".format(trace_id)[:16] + ctx = Context(trace_id=trace_id, meta={"_dd.t.tid": trace_id_hob_hex}) + tracer.context_provider.activate(ctx) + with tracer.trace("global_root_span") as span: + assert span.trace_id == trace_id + headers = {} + HTTPPropagator.inject(span.context, headers) + assert headers == { + "x-datadog-trace-id": str(span._trace_id_64bits), + "x-datadog-parent-id": str(span.span_id), + "x-datadog-tags": "=".join([HIGHER_ORDER_TRACE_ID_BITS, trace_id_hob_hex]), + } - assert trace_id_64bit == int(headers[HTTP_HEADER_TRACE_ID]) == span._trace_id_64bits, headers - # The ordering is non-deterministic, so compare as a list of tags - tags = set(headers[_HTTP_HEADER_TAGS].split(",")) - assert "=".join([HIGHER_ORDER_TRACE_ID_BITS, trace_id_hob_hex]) in tags + +@pytest.mark.subprocess( + env=dict(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", DD_TRACE_PROPAGATION_STYLE=PROPAGATION_STYLE_B3), +) +def test_inject_128bit_trace_id_b3multi(): + from ddtrace.context import Context + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer + + tracer = DummyTracer() + + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + ctx = Context(trace_id=trace_id) + tracer.context_provider.activate(ctx) + with tracer.trace("global_root_span") as span: + assert span.trace_id == trace_id + headers = {} + HTTPPropagator.inject(span.context, headers) + trace_id_hex = "{:032x}".format(span.trace_id) + span_id_hex = "{:016x}".format(span.span_id) + assert headers == {"x-b3-traceid": trace_id_hex, "x-b3-spanid": span_id_hex} + + +@pytest.mark.subprocess( + env=dict( + DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", + DD_TRACE_PROPAGATION_STYLE=PROPAGATION_STYLE_B3_SINGLE_HEADER, + ), +) +def test_inject_128bit_trace_id_b3_single_header(): + from ddtrace.context import Context + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer + + tracer = DummyTracer() + + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + ctx = Context(trace_id=trace_id) + tracer.context_provider.activate(ctx) + with tracer.trace("global_root_span") as span: + assert span.trace_id == trace_id + headers = {} + HTTPPropagator.inject(span.context, headers) + trace_id_hex = "{:032x}".format(span.trace_id) + span_id_hex = "{:016x}".format(span.span_id) + assert headers == {"b3": "%s-%s" % (trace_id_hex, span_id_hex)} + + +@pytest.mark.subprocess( + env=dict( + DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", + DD_TRACE_PROPAGATION_STYLE=_PROPAGATION_STYLE_W3C_TRACECONTEXT, + ), +) +def test_inject_128bit_trace_id_tracecontext(): + from ddtrace.context import Context + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer + + tracer = DummyTracer() + + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + ctx = Context(trace_id=trace_id) + tracer.context_provider.activate(ctx) + with tracer.trace("global_root_span") as span: + assert span.trace_id == trace_id + headers = {} + HTTPPropagator.inject(span.context, headers) + trace_id_hex = "{:032x}".format(span.trace_id) + span_id_hex = "{:016x}".format(span.span_id) + assert headers == {"traceparent": "00-%s-%s-00" % (trace_id_hex, span_id_hex)} def test_inject_tags_unicode(tracer): @@ -218,45 +286,119 @@ def test_extract(tracer): @pytest.mark.subprocess( - env=dict(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true"), - parametrize={ - "TEST_TRACE_ID": [ - str(2 ** 128 - 1), - str(2 ** 127 + 1), - str(2 ** 65 - 1), - str(2 ** 64 + 1), - str(2 ** 127 + 2 ** 63), - ] - }, + env=dict(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", DD_TRACE_PROPAGATION_STYLE=PROPAGATION_STYLE_DATADOG), ) -def test_extract_128bit_trace_ids(): - import os - +def test_extract_128bit_trace_ids_datadog(): from ddtrace.internal.constants import HIGHER_ORDER_TRACE_ID_BITS from ddtrace.propagation.http import HTTPPropagator from tests.utils import DummyTracer tracer = DummyTracer() - trace_id = int(os.getenv("TEST_TRACE_ID")) - trace_id_64bit = trace_id & 2 ** 64 - 1 - # Get the hex representation of the 64 most signicant bits - trace_id_hob_hex = "{:032x}".format(trace_id)[:16] + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + trace_id_hex = "{:032x}".format(trace_id) + span_id = 1 + # Get the hex representation of the 64 most signicant bits + trace_id_64bit = trace_id & 2 ** 64 - 1 + headers = { + "x-datadog-trace-id": str(trace_id_64bit), + "x-datadog-parent-id": str(span_id), + "x-datadog-tags": "=".join([HIGHER_ORDER_TRACE_ID_BITS, trace_id_hex[:16]]), + } - headers = { - "x-datadog-trace-id": str(trace_id_64bit), - "x-datadog-tags": "=".join([HIGHER_ORDER_TRACE_ID_BITS, trace_id_hob_hex]), - } + context = HTTPPropagator.extract(headers) + tracer.context_provider.activate(context) + with tracer.trace("local_root_span") as span: + assert span.trace_id == trace_id + assert span.parent_id == span_id + assert HIGHER_ORDER_TRACE_ID_BITS not in span.context._meta + with tracer.trace("child_span") as child_span: + assert child_span.trace_id == trace_id - context = HTTPPropagator.extract(headers) - tracer.context_provider.activate(context) +@pytest.mark.subprocess( + env=dict(DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", DD_TRACE_PROPAGATION_STYLE=PROPAGATION_STYLE_B3), +) +def test_extract_128bit_trace_ids_b3multi(): + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer - with tracer.trace("local_root_span") as span: - assert span.trace_id == trace_id - assert HIGHER_ORDER_TRACE_ID_BITS not in span.context._meta - with tracer.trace("child_span") as child_span: - assert child_span.trace_id == trace_id + tracer = DummyTracer() + + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + trace_id_hex = "{:032x}".format(trace_id) + span_id = 1 + span_id_hex = "{:016x}".format(span_id) + headers = { + "x-b3-traceid": trace_id_hex, + "x-b3-spanid": span_id_hex, + } + + context = HTTPPropagator.extract(headers) + tracer.context_provider.activate(context) + with tracer.trace("local_root_span") as span: + assert span.trace_id == trace_id + assert span.parent_id == span_id + with tracer.trace("child_span") as child_span: + assert child_span.trace_id == trace_id + + +@pytest.mark.subprocess( + env=dict( + DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", + DD_TRACE_PROPAGATION_STYLE=PROPAGATION_STYLE_B3_SINGLE_HEADER, + ), +) +def test_extract_128bit_trace_ids_b3_single_header(): + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer + + tracer = DummyTracer() + + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + trace_id_hex = "{:032x}".format(trace_id) + span_id = 1 + span_id_hex = "{:016x}".format(span_id) + headers = { + "b3": "%s-%s-1" % (trace_id_hex, span_id_hex), + } + + context = HTTPPropagator.extract(headers) + tracer.context_provider.activate(context) + with tracer.trace("local_root_span") as span: + assert span.trace_id == trace_id + assert span.parent_id == span_id + with tracer.trace("child_span") as child_span: + assert child_span.trace_id == trace_id + + +@pytest.mark.subprocess( + env=dict( + DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED="true", + DD_TRACE_PROPAGATION_STYLE=_PROPAGATION_STYLE_W3C_TRACECONTEXT, + ), +) +def test_extract_128bit_trace_ids_tracecontext(): + from ddtrace.propagation.http import HTTPPropagator + from tests.utils import DummyTracer + + tracer = DummyTracer() + + for trace_id in [2 ** 128 - 1, 2 ** 127 + 1, 2 ** 65 - 1, 2 ** 64 + 1, 2 ** 127 + 2 ** 63]: + trace_id_hex = "{:032x}".format(trace_id) + span_id = 1 + span_id_hex = "{:016x}".format(span_id) + headers = { + "traceparent": "00-%s-%s-01" % (trace_id_hex, span_id_hex), + } + + context = HTTPPropagator.extract(headers) + tracer.context_provider.activate(context) + with tracer.trace("local_root_span") as span: + assert span.trace_id == trace_id + assert span.parent_id == span_id + with tracer.trace("child_span") as child_span: + assert child_span.trace_id == trace_id def test_extract_unicode(tracer): @@ -456,15 +598,22 @@ def test_get_wsgi_header(tracer): # for testing with other propagation styles TRACECONTEXT_HEADERS_VALID_BASIC = { - _HTTP_HEADER_TRACEPARENT: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + _HTTP_HEADER_TRACEPARENT: "00-80f198ee56343ba864fe8b2a57d3eff7-00f067aa0ba902b7-01", _HTTP_HEADER_TRACESTATE: "dd=s:2;o:rum", } TRACECONTEXT_HEADERS_VALID = { - _HTTP_HEADER_TRACEPARENT: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + _HTTP_HEADER_TRACEPARENT: "00-80f198ee56343ba864fe8b2a57d3eff7-00f067aa0ba902b7-01", _HTTP_HEADER_TRACESTATE: "dd=s:2;o:rum;t.dm:-4;t.usr.id:baz64,congo=t61rcWkgMzE", } +if asbool(os.getenv("DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED")): + TRACE_ID = 171395628812617415352188477958425669623 + TRACE_ID_HEX = "80f198ee56343ba864fe8b2a57d3eff7" +else: + TRACE_ID = 7277407061855694839 + TRACE_ID_HEX = "000000000000000064fe8b2a57d3eff7" + @pytest.mark.parametrize( "sampling_priority_tp,sampling_priority_ts,expected_sampling_priority", @@ -492,9 +641,9 @@ def test_tracecontext_get_sampling_priority(sampling_priority_tp, sampling_prior "headers,expected_tuple,expected_logging,expected_exception", [ ( - "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority - (11803532876627986230, 67667974448284343, 1), + (TRACE_ID, 67667974448284343, 1), None, None, ), @@ -505,41 +654,41 @@ def test_tracecontext_get_sampling_priority(sampling_priority_tp, sampling_prior ValueError, ), ( - "00-4bf92f3577b34da6a3ce929d0e0e4736-0000000000000000-01", + "00-%s-0000000000000000-01" % (TRACE_ID_HEX,), None, None, ValueError, ), ( - "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00", + "00-%s-00f067aa0ba902b7-00" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority - (11803532876627986230, 67667974448284343, 0), + (TRACE_ID, 67667974448284343, 0), None, None, ), ( - "01-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-what-the-future-looks-like", + "01-%s-00f067aa0ba902b7-01-what-the-future-looks-like" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority - (11803532876627986230, 67667974448284343, 1), + (TRACE_ID, 67667974448284343, 1), ["unsupported traceparent version:'01', still attempting to parse"], None, ), ( - "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01-v00-can-not-have-future-values", + "00-%s-00f067aa0ba902b7-01-v00-can-not-have-future-values" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority - (11803532876627986230, 67667974448284343, 1), + (TRACE_ID, 67667974448284343, 1), [], ValueError, ), ( - "0-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "0-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority None, [], ValueError, ), ( - "ff-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "ff-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority None, [], @@ -560,9 +709,9 @@ def test_tracecontext_get_sampling_priority(sampling_priority_tp, sampling_prior ValueError, ), ( # we still parse the trace flag and analyze the it as a bit field - "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-02", + "00-%s-00f067aa0ba902b7-02" % (TRACE_ID_HEX,), # tp, trace_id, span_id, sampling_priority - (11803532876627986230, 67667974448284343, 0), + (TRACE_ID, 67667974448284343, 0), [], None, ), @@ -795,14 +944,14 @@ def test_extract_tracestate(caplog, ts_string, expected_tuple, expected_logging, ( TRACECONTEXT_HEADERS_VALID, { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { "tracestate": "dd=s:2;o:rum;t.dm:-4;t.usr.id:baz64,congo=t61rcWkgMzE", "_dd.p.dm": "-4", "_dd.p.usr.id": "baz64", "_dd.origin": "rum", - "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "traceparent": TRACECONTEXT_HEADERS_VALID[_HTTP_HEADER_TRACEPARENT], }, "metrics": {"_sampling_priority_v1": 2}, }, @@ -810,12 +959,12 @@ def test_extract_tracestate(caplog, ts_string, expected_tuple, expected_logging, ( TRACECONTEXT_HEADERS_VALID_BASIC, { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { "tracestate": "dd=s:2;o:rum", "_dd.origin": "rum", - "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "traceparent": TRACECONTEXT_HEADERS_VALID_BASIC[_HTTP_HEADER_TRACEPARENT], }, "metrics": {"_sampling_priority_v1": 2}, }, @@ -829,13 +978,13 @@ def test_extract_tracestate(caplog, ts_string, expected_tuple, expected_logging, ), ( { - _HTTP_HEADER_TRACEPARENT: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + _HTTP_HEADER_TRACEPARENT: "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), }, { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { - "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "traceparent": "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), }, "metrics": {"_sampling_priority_v1": 1.0}, }, @@ -880,7 +1029,7 @@ def test_extract_tracecontext(headers, expected_context): HTTP_HEADER_SAMPLING_PRIORITY: "sample", } B3_HEADERS_VALID = { - _HTTP_HEADER_B3_TRACE_ID: "463ac35c9f6413ad48485a3953bb6124", + _HTTP_HEADER_B3_TRACE_ID: "80f198ee56343ba864fe8b2a57d3eff7", _HTTP_HEADER_B3_SPAN_ID: "a2fb4a1d1a96d312", _HTTP_HEADER_B3_SAMPLED: "1", } @@ -977,7 +1126,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3], B3_HEADERS_VALID, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -988,7 +1137,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3], {get_wsgi_header(name): value for name, value in B3_HEADERS_VALID.items()}, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1003,7 +1152,7 @@ def test_extract_tracecontext(headers, expected_context): _HTTP_HEADER_B3_FLAGS: "1", }, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 2, "dd_origin": None, @@ -1019,7 +1168,7 @@ def test_extract_tracecontext(headers, expected_context): "X-B3-ParentSpanId": "05e3ac9a4f6e3b90", }, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 0, "dd_origin": None, @@ -1033,7 +1182,7 @@ def test_extract_tracecontext(headers, expected_context): _HTTP_HEADER_B3_SPAN_ID: B3_HEADERS_VALID[_HTTP_HEADER_B3_SPAN_ID], }, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": None, "dd_origin": None, @@ -1046,7 +1195,7 @@ def test_extract_tracecontext(headers, expected_context): _HTTP_HEADER_B3_TRACE_ID: B3_HEADERS_VALID[_HTTP_HEADER_B3_TRACE_ID], }, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": None, "sampling_priority": None, "dd_origin": None, @@ -1075,7 +1224,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_DATADOG, PROPAGATION_STYLE_B3, PROPAGATION_STYLE_B3_SINGLE_HEADER], B3_HEADERS_VALID, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1087,7 +1236,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3_SINGLE_HEADER], B3_SINGLE_HEADERS_VALID, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1100,7 +1249,7 @@ def test_extract_tracecontext(headers, expected_context): get_wsgi_header(_HTTP_HEADER_B3_SINGLE): B3_SINGLE_HEADERS_VALID[_HTTP_HEADER_B3_SINGLE], }, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1113,7 +1262,7 @@ def test_extract_tracecontext(headers, expected_context): get_wsgi_header(_HTTP_HEADER_B3_SINGLE): B3_SINGLE_HEADERS_VALID[_HTTP_HEADER_B3_SINGLE], }, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1139,7 +1288,7 @@ def test_extract_tracecontext(headers, expected_context): _HTTP_HEADER_B3_SINGLE: "80f198ee56343ba864fe8b2a57d3eff7-e457b5a2e4d86bd1", }, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": None, "dd_origin": None, @@ -1156,7 +1305,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_DATADOG, PROPAGATION_STYLE_B3, PROPAGATION_STYLE_B3_SINGLE_HEADER], B3_SINGLE_HEADERS_VALID, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1167,7 +1316,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3_SINGLE_HEADER], {_HTTP_HEADER_B3_SINGLE: B3_SINGLE_HEADERS_VALID[_HTTP_HEADER_B3_SINGLE] + "-05e3ac9a4f6e3b90-extra-data-here"}, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1248,7 +1397,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3], ALL_HEADERS, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1259,7 +1408,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3], {get_wsgi_header(name): value for name, value in ALL_HEADERS.items()}, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1270,7 +1419,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3, PROPAGATION_STYLE_B3_SINGLE_HEADER], ALL_HEADERS, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1281,7 +1430,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3_SINGLE_HEADER], ALL_HEADERS, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1317,7 +1466,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_B3, PROPAGATION_STYLE_DATADOG], B3_SINGLE_HEADERS_VALID, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1328,7 +1477,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3, PROPAGATION_STYLE_B3_SINGLE_HEADER, PROPAGATION_STYLE_DATADOG], B3_HEADERS_VALID, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1339,7 +1488,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_DATADOG, PROPAGATION_STYLE_B3], B3_HEADERS_VALID, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1350,7 +1499,7 @@ def test_extract_tracecontext(headers, expected_context): [PROPAGATION_STYLE_B3_SINGLE_HEADER], {get_wsgi_header(name): value for name, value in ALL_HEADERS.items()}, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1379,7 +1528,7 @@ def test_extract_tracecontext(headers, expected_context): ["b3"], B3_HEADERS_VALID, { - "trace_id": 5208512171318403364, + "trace_id": TRACE_ID, "span_id": 11744061942159299346, "sampling_priority": 1, "dd_origin": None, @@ -1392,7 +1541,7 @@ def test_extract_tracecontext(headers, expected_context): [_PROPAGATION_STYLE_W3C_TRACECONTEXT], TRACECONTEXT_HEADERS_VALID_BASIC, { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "sampling_priority": 2, "dd_origin": "rum", @@ -1453,7 +1602,7 @@ def test_propagation_extract_w_config(name, styles, headers, expected_context, r [PROPAGATION_STYLE_B3_SINGLE_HEADER], ALL_HEADERS, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1486,7 +1635,7 @@ def test_propagation_extract_w_config(name, styles, headers, expected_context, r [PROPAGATION_STYLE_B3_SINGLE_HEADER], ALL_HEADERS, { - "trace_id": 7277407061855694839, + "trace_id": TRACE_ID, "span_id": 16453819474850114513, "sampling_priority": 1, "dd_origin": None, @@ -1782,12 +1931,12 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "valid_tracecontext", [_PROPAGATION_STYLE_W3C_TRACECONTEXT], { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { "tracestate": "dd=s:2;o:rum", "_dd.origin": "rum", - "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "traceparent": TRACECONTEXT_HEADERS_VALID_BASIC[_HTTP_HEADER_TRACEPARENT], }, "metrics": {"_sampling_priority_v1": 2}, }, @@ -1797,13 +1946,13 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "only_traceparent", [_PROPAGATION_STYLE_W3C_TRACECONTEXT], { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { - "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "traceparent": "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), }, }, - {_HTTP_HEADER_TRACEPARENT: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00"}, + {_HTTP_HEADER_TRACEPARENT: "00-%s-00f067aa0ba902b7-00" % (TRACE_ID_HEX,)}, ), ( "only_tracestate", @@ -1812,7 +1961,7 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "meta": { "tracestate": "dd=s:2;o:rum", "_dd.origin": "rum", - "traceparent": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01", + "traceparent": "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), }, "metrics": {"_sampling_priority_v1": 2}, }, @@ -1822,7 +1971,7 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "no_context_traceparent", [_PROPAGATION_STYLE_W3C_TRACECONTEXT], { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { "tracestate": "dd=s:2;o:rum", @@ -1831,7 +1980,7 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "metrics": {"_sampling_priority_v1": 2}, }, { - _HTTP_HEADER_TRACEPARENT: "00-0000000000000000a3ce929d0e0e4736-00f067aa0ba902b7-01", + _HTTP_HEADER_TRACEPARENT: "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), _HTTP_HEADER_TRACESTATE: "dd=s:2;o:rum", }, ), @@ -1839,7 +1988,7 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "tracestate_additional_list_members", [_PROPAGATION_STYLE_W3C_TRACECONTEXT], { - "trace_id": 11803532876627986230, + "trace_id": TRACE_ID, "span_id": 67667974448284343, "meta": { "tracestate": "dd=s:2;o:rum,congo=baz123", @@ -1848,7 +1997,7 @@ def test_DD_TRACE_PROPAGATION_STYLE_EXTRACT_overrides_DD_TRACE_PROPAGATION_STYLE "metrics": {"_sampling_priority_v1": 2}, }, { - _HTTP_HEADER_TRACEPARENT: "00-0000000000000000a3ce929d0e0e4736-00f067aa0ba902b7-01", + _HTTP_HEADER_TRACEPARENT: "00-%s-00f067aa0ba902b7-01" % (TRACE_ID_HEX,), _HTTP_HEADER_TRACESTATE: "dd=s:2;o:rum,congo=baz123", }, ),