mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-02 19:47:17 +08:00
Consistent way of not instrumenting multiple times (#549)
This commit is contained in:
@ -19,6 +19,7 @@ import fastapi
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
import opentelemetry.instrumentation.fastapi as otel_fastapi
|
||||
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
|
||||
from opentelemetry.sdk.resources import Resource
|
||||
from opentelemetry.semconv.trace import SpanAttributes
|
||||
from opentelemetry.test.test_base import TestBase
|
||||
@ -57,6 +58,47 @@ class TestFastAPIManualInstrumentation(TestBase):
|
||||
super().tearDown()
|
||||
self.env_patch.stop()
|
||||
self.exclude_patch.stop()
|
||||
with self.disable_logging():
|
||||
self._instrumentor.uninstrument()
|
||||
self._instrumentor.uninstrument_app(self._app)
|
||||
|
||||
def test_instrument_app_with_instrument(self):
|
||||
if not isinstance(self, TestAutoInstrumentation):
|
||||
self._instrumentor.instrument()
|
||||
self._client.get("/foobar")
|
||||
spans = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(spans), 3)
|
||||
for span in spans:
|
||||
self.assertIn("/foobar", span.name)
|
||||
|
||||
def test_uninstrument_app(self):
|
||||
self._client.get("/foobar")
|
||||
spans = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(spans), 3)
|
||||
# pylint: disable=import-outside-toplevel
|
||||
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
|
||||
|
||||
self._app.add_middleware(HTTPSRedirectMiddleware)
|
||||
self._instrumentor.uninstrument_app(self._app)
|
||||
print(self._app.user_middleware[0].cls)
|
||||
self.assertFalse(
|
||||
isinstance(
|
||||
self._app.user_middleware[0].cls, OpenTelemetryMiddleware
|
||||
)
|
||||
)
|
||||
self._client = TestClient(self._app)
|
||||
resp = self._client.get("/foobar")
|
||||
self.assertEqual(200, resp.status_code)
|
||||
span_list = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(span_list), 3)
|
||||
|
||||
def test_uninstrument_app_after_instrument(self):
|
||||
if not isinstance(self, TestAutoInstrumentation):
|
||||
self._instrumentor.instrument()
|
||||
self._instrumentor.uninstrument_app(self._app)
|
||||
self._client.get("/foobar")
|
||||
spans = self.memory_exporter.get_finished_spans()
|
||||
self.assertEqual(len(spans), 0)
|
||||
|
||||
def test_basic_fastapi_call(self):
|
||||
self._client.get("/foobar")
|
||||
|
Reference in New Issue
Block a user