def test_django_request_distributed(client, test_spans): """ When making a request to a Django app With distributed tracing headers The django.request span properly inherits from the distributed trace """ headers = { get_wsgi_header(HTTP_HEADER_TRACE_ID): "12345", get_wsgi_header(HTTP_HEADER_PARENT_ID): "78910", get_wsgi_header(HTTP_HEADER_SAMPLING_PRIORITY): USER_KEEP, } resp = client.get("/", **headers) assert resp.status_code == 200 assert resp.content == b"Hello, test app." # Assert that the trace properly inherits from the distributed headers # DEV: Do not use `test_spans.get_root_span()` since that expects `parent_id is None` root = test_spans.find_span(name="django.request") root.assert_matches( name="django.request", trace_id=12345, parent_id=78910, metrics={ SAMPLING_PRIORITY_KEY: USER_KEEP, }, )
def test_extract_bad_values(trace_id, parent_span_id, sampling_priority, dd_origin): headers = dict() wsgi_headers = dict() if trace_id is not NOT_SET: headers[HTTP_HEADER_TRACE_ID] = trace_id wsgi_headers[get_wsgi_header(HTTP_HEADER_TRACE_ID)] = trace_id if parent_span_id is not NOT_SET: headers[HTTP_HEADER_PARENT_ID] = parent_span_id wsgi_headers[get_wsgi_header(HTTP_HEADER_PARENT_ID)] = parent_span_id if sampling_priority is not NOT_SET: headers[HTTP_HEADER_SAMPLING_PRIORITY] = sampling_priority wsgi_headers[get_wsgi_header( HTTP_HEADER_SAMPLING_PRIORITY)] = sampling_priority if dd_origin is not NOT_SET: headers[HTTP_HEADER_ORIGIN] = dd_origin wsgi_headers[get_wsgi_header(HTTP_HEADER_ORIGIN)] = dd_origin # x-datadog-*headers context = HTTPPropagator.extract(headers) assert context.trace_id is None assert context.span_id is None assert context.sampling_priority is None assert context.dd_origin is None # HTTP_X_DATADOG_* headers context = HTTPPropagator.extract(wsgi_headers) assert context.trace_id is None assert context.span_id is None assert context.sampling_priority is None assert context.dd_origin is None
def generate_headers(self): headers = json.loads(self.headers) if self.wsgi_style: headers = { utils.get_wsgi_header(header): value for header, value in headers.items() } for i in range(self.extra_headers): header = "x-test-header-{}".format(i) if self.wsgi_style: header = utils.get_wsgi_header(header) headers[header] = str(i) return headers
def test_django_request_distributed_disabled(client, test_spans): """ When making a request to a Django app With distributed tracing headers When distributed tracing is disabled The django.request span doesn't inherit from the distributed trace """ headers = { get_wsgi_header(HTTP_HEADER_TRACE_ID): "12345", get_wsgi_header(HTTP_HEADER_PARENT_ID): "78910", get_wsgi_header(HTTP_HEADER_SAMPLING_PRIORITY): USER_KEEP, } with BaseTestCase.override_config("django", dict(distributed_tracing_enabled=False)): resp = client.get("/", **headers) assert resp.status_code == 200 assert resp.content == b"Hello, test app." # Assert the trace doesn't inherit from the distributed trace root = test_spans.find_span(name="django.request") assert root.trace_id != 12345 assert root.parent_id is None
def test_http_header_tracing_disabled(client, test_spans): headers = { get_wsgi_header("my-header"): "my_value", } resp = client.get("/", **headers) assert resp.status_code == 200 assert resp.content == b"Hello, test app." root = test_spans.get_root_span() assert root.get_tag("http.request.headers.my-header") is None assert root.get_tag("http.response.headers.my-response-header") is None
def test_http_header_tracing_enabled(client, test_spans): with BaseTestCase.override_config("django", {}): config.django.http.trace_headers(["my-header", "my-response-header"]) headers = { get_wsgi_header("my-header"): "my_value", } resp = client.get("/", **headers) assert resp.status_code == 200 assert resp.content == b"Hello, test app." root = test_spans.get_root_span() assert root.get_tag("http.request.headers.my-header") == "my_value" assert root.get_tag("http.response.headers.my-response-header") == "my_response_value"
def test_get_wsgi_header(self): assert get_wsgi_header( "x-datadog-trace-id") == "HTTP_X_DATADOG_TRACE_ID"
def test_get_wsgi_header(self): assert get_wsgi_header( 'x-datadog-trace-id') == 'HTTP_X_DATADOG_TRACE_ID'