Files
chromium_depot_tools/infra_lib/telemetry/trace_unittest.py
Struan Shrimpton 3be09c6d74 telemetry: Fix imports
Logging was missing from __init__.py which broke under mac. This adds
that back in and remove unused imports from other files. The os check
is also moved up to be the first thing we look for since is_google_host
does not work with mac at the moment.

Bug:326277821
Change-Id: I3f28838d367eb9583332fd33ad35d71c0851fe4b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6604498
Commit-Queue: Struan Shrimpton <sshrimp@google.com>
Reviewed-by: Ben Pastene <bpastene@chromium.org>
2025-05-30 15:29:30 -07:00

77 lines
2.4 KiB
Python

# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Test the trace implementation."""
import contextlib
from typing import Sequence
from opentelemetry import trace as trace_api
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace import export as export_sdk
from . import trace as trace
class SpanExporterStub(export_sdk.SpanExporter):
"""Stub for SpanExporter."""
def __init__(self) -> None:
self._spans = []
@property
def spans(self):
return self._spans
def export(
self, spans: Sequence[trace_sdk.ReadableSpan]
) -> export_sdk.SpanExportResult:
self._spans.extend(spans)
return export_sdk.SpanExportResult.SUCCESS
def test_span_to_capture_keyboard_interrupt_as_decorator() -> None:
"""Test span can capture KeyboardInterrupt as decorator."""
exporter = SpanExporterStub()
provider = trace.TracerProvider(trace_sdk.TracerProvider())
provider.add_span_processor(
export_sdk.BatchSpanProcessor(span_exporter=exporter))
tracer = provider.get_tracer(__name__)
@tracer.start_as_current_span("test-span")
def test_function() -> None:
raise KeyboardInterrupt()
with contextlib.suppress(KeyboardInterrupt):
test_function()
provider.shutdown()
assert len(exporter.spans) == 1
assert exporter.spans[0].events[0].name == "exception"
assert (exporter.spans[0].events[0].attributes["exception.type"] ==
"KeyboardInterrupt")
assert exporter.spans[0].status.status_code == trace_api.StatusCode.OK
def test_span_to_capture_keyboard_interrupt_in_context() -> None:
"""Test span can capture KeyboardInterrupt in context."""
exporter = SpanExporterStub()
provider = trace.TracerProvider(trace_sdk.TracerProvider())
provider.add_span_processor(
export_sdk.BatchSpanProcessor(span_exporter=exporter))
tracer = provider.get_tracer(__name__)
with contextlib.suppress(KeyboardInterrupt):
with tracer.start_as_current_span("test-span"):
raise KeyboardInterrupt()
provider.shutdown()
assert len(exporter.spans) == 1
assert exporter.spans[0].events[0].name == "exception"
assert (exporter.spans[0].events[0].attributes["exception.type"] ==
"KeyboardInterrupt")
assert exporter.spans[0].status.status_code == trace_api.StatusCode.OK