|
2 | 2 | from mock import MagicMock |
3 | 3 | import mock |
4 | 4 | import time |
5 | | -from sentry_sdk.integrations.opentelemetry.span_processor import SentrySpanProcessor |
| 5 | +from sentry_sdk.integrations.opentelemetry.span_processor import ( |
| 6 | + SentrySpanProcessor, |
| 7 | + link_trace_context_to_error_event, |
| 8 | +) |
6 | 9 | from sentry_sdk.tracing import Span, Transaction |
7 | 10 |
|
8 | | -from opentelemetry.trace import SpanKind |
| 11 | +from opentelemetry.trace import SpanKind, SpanContext |
9 | 12 |
|
10 | 13 |
|
11 | 14 | def test_is_sentry_span(): |
@@ -403,3 +406,56 @@ def test_on_end_sentry_span(): |
403 | 406 | fake_sentry_span, otel_span |
404 | 407 | ) |
405 | 408 | fake_sentry_span.finish.assert_called_once() |
| 409 | + |
| 410 | + |
| 411 | +def test_link_trace_context_to_error_event(): |
| 412 | + """ |
| 413 | + Test that the trace context is added to the error event. |
| 414 | + """ |
| 415 | + fake_client = MagicMock() |
| 416 | + fake_client.options = {"instrumenter": "otel"} |
| 417 | + fake_client |
| 418 | + |
| 419 | + current_hub = MagicMock() |
| 420 | + current_hub.client = fake_client |
| 421 | + |
| 422 | + fake_hub = MagicMock() |
| 423 | + fake_hub.current = current_hub |
| 424 | + |
| 425 | + span_id = "1234567890abcdef" |
| 426 | + trace_id = "1234567890abcdef1234567890abcdef" |
| 427 | + |
| 428 | + fake_trace_context = { |
| 429 | + "bla": "blub", |
| 430 | + "foo": "bar", |
| 431 | + "baz": 123, |
| 432 | + } |
| 433 | + |
| 434 | + sentry_span = MagicMock() |
| 435 | + sentry_span.get_trace_context = MagicMock(return_value=fake_trace_context) |
| 436 | + |
| 437 | + otel_span_map = { |
| 438 | + span_id: sentry_span, |
| 439 | + } |
| 440 | + |
| 441 | + span_context = SpanContext( |
| 442 | + trace_id=int(trace_id, 16), |
| 443 | + span_id=int(span_id, 16), |
| 444 | + is_remote=True, |
| 445 | + ) |
| 446 | + otel_span = MagicMock() |
| 447 | + otel_span.get_span_context = MagicMock(return_value=span_context) |
| 448 | + |
| 449 | + fake_event = {"event_id": "1234567890abcdef1234567890abcdef"} |
| 450 | + |
| 451 | + with mock.patch( |
| 452 | + "sentry_sdk.integrations.opentelemetry.span_processor.get_current_span", |
| 453 | + return_value=otel_span, |
| 454 | + ): |
| 455 | + event = link_trace_context_to_error_event(fake_event, otel_span_map) |
| 456 | + |
| 457 | + assert event |
| 458 | + assert event == fake_event # the event is changed in place inside the function |
| 459 | + assert "contexts" in event |
| 460 | + assert "trace" in event["contexts"] |
| 461 | + assert event["contexts"]["trace"] == fake_trace_context |
0 commit comments