42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
from opentelemetry.sdk.trace import TracerProvider
|
|
|
|
from app import telemetry
|
|
|
|
|
|
def test_telemetry_is_fail_open_without_endpoint(monkeypatch) -> None:
|
|
monkeypatch.delenv("OTEL_EXPORTER_OTLP_ENDPOINT", raising=False)
|
|
monkeypatch.setattr(telemetry, "_runtime", None)
|
|
|
|
assert telemetry.init_telemetry("test-service") is None
|
|
|
|
|
|
def test_structlog_processor_adds_active_trace_context_only() -> None:
|
|
provider = TracerProvider()
|
|
tracer = provider.get_tracer("test")
|
|
event = {"event": "safe", "request_id": "request-1"}
|
|
|
|
with tracer.start_as_current_span("operation"):
|
|
result = telemetry.add_trace_context(None, "info", event)
|
|
|
|
assert result["event"] == "safe"
|
|
assert result["request_id"] == "request-1"
|
|
assert len(result["trace_id"]) == 32
|
|
assert len(result["span_id"]) == 16
|
|
assert set(result) == {"event", "request_id", "trace_id", "span_id"}
|
|
|
|
|
|
def test_no_active_span_does_not_invent_trace_context() -> None:
|
|
result = telemetry.add_trace_context(None, "info", {"event": "safe"})
|
|
assert result == {"event": "safe"}
|
|
|
|
|
|
def test_async_origin_creates_link_without_parenting_worker_span() -> None:
|
|
tracer = TracerProvider().get_tracer("test")
|
|
with tracer.start_as_current_span("request"):
|
|
traceparent = telemetry.current_traceparent()
|
|
origin_trace_id = telemetry.current_trace_id()
|
|
|
|
links = telemetry.origin_links(traceparent)
|
|
assert len(links) == 1
|
|
assert format(links[0].context.trace_id, "032x") == origin_trace_id
|