|
31 | 31 | )
|
32 | 32 | from opentelemetry.sdk import resources
|
33 | 33 | from opentelemetry.sdk.trace import Span
|
| 34 | +from opentelemetry.sdk.trace.id_generator import RandomIdGenerator |
34 | 35 | from opentelemetry.semconv.trace import SpanAttributes
|
35 | 36 | from opentelemetry.test.test_base import TestBase
|
36 | 37 | from opentelemetry.test.wsgitestutil import WsgiTestBase
|
37 |
| -from opentelemetry.trace import SpanKind, StatusCode |
| 38 | +from opentelemetry.trace import ( |
| 39 | + SpanKind, |
| 40 | + StatusCode, |
| 41 | + format_span_id, |
| 42 | + format_trace_id, |
| 43 | +) |
38 | 44 | from opentelemetry.util.http import get_excluded_urls, get_traced_request_attrs
|
39 | 45 |
|
40 | 46 | # pylint: disable=import-error
|
@@ -331,6 +337,29 @@ def response_hook(span, request, response):
|
331 | 337 | self.assertIsInstance(response_hook_args[2], HttpResponse)
|
332 | 338 | self.assertEqual(response_hook_args[2], response)
|
333 | 339 |
|
| 340 | + async def test_trace_parent(self): |
| 341 | + id_generator = RandomIdGenerator() |
| 342 | + trace_id = format_trace_id(id_generator.generate_trace_id()) |
| 343 | + span_id = format_span_id(id_generator.generate_span_id()) |
| 344 | + traceparent_value = f"00-{trace_id}-{span_id}-01" |
| 345 | + |
| 346 | + Client().get( |
| 347 | + "/span_name/1234/", traceparent=traceparent_value, |
| 348 | + ) |
| 349 | + span = self.memory_exporter.get_finished_spans()[0] |
| 350 | + |
| 351 | + self.assertEqual( |
| 352 | + trace_id, format_trace_id(span.get_span_context().trace_id), |
| 353 | + ) |
| 354 | + self.assertIsNotNone(span.parent) |
| 355 | + self.assertEqual( |
| 356 | + trace_id, format_trace_id(span.parent.trace_id), |
| 357 | + ) |
| 358 | + self.assertEqual( |
| 359 | + span_id, format_span_id(span.parent.span_id), |
| 360 | + ) |
| 361 | + self.memory_exporter.clear() |
| 362 | + |
334 | 363 | def test_trace_response_headers(self):
|
335 | 364 | response = Client().get("/span_name/1234/")
|
336 | 365 |
|
|
0 commit comments