|
2 | 2 | import mock |
3 | 3 |
|
4 | 4 | try: |
5 | | - from opentelemetry import trace as trace_api |
6 | | - from opentelemetry.trace.status import StatusCanonicalCode |
7 | | - |
8 | | - from opentelemetry.sdk.trace import TracerProvider, export |
| 5 | + from opentelemetry import trace |
| 6 | + from opentelemetry.sdk.trace import TracerProvider |
| 7 | + from opentelemetry.sdk.trace.export import SimpleSpanProcessor |
9 | 8 | from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( |
10 | 9 | InMemorySpanExporter, |
11 | 10 | ) |
| 11 | + from opentelemetry.trace.status import StatusCode |
| 12 | + |
| 13 | + trace.set_tracer_provider(TracerProvider()) |
12 | 14 |
|
13 | 15 | HAS_OPENTELEMETRY_INSTALLED = True |
14 | 16 | except ImportError: |
15 | 17 | HAS_OPENTELEMETRY_INSTALLED = False |
16 | 18 |
|
17 | | - StatusCanonicalCode = mock.Mock() |
| 19 | + StatusCode = mock.Mock() |
| 20 | + |
| 21 | +_TEST_OT_EXPORTER = None |
| 22 | +_TEST_OT_PROVIDER_INITIALIZED = False |
| 23 | + |
| 24 | + |
| 25 | +def get_test_ot_exporter(): |
| 26 | + global _TEST_OT_EXPORTER |
| 27 | + |
| 28 | + if _TEST_OT_EXPORTER is None: |
| 29 | + _TEST_OT_EXPORTER = InMemorySpanExporter() |
| 30 | + return _TEST_OT_EXPORTER |
| 31 | + |
| 32 | + |
| 33 | +def use_test_ot_exporter(): |
| 34 | + global _TEST_OT_PROVIDER_INITIALIZED |
| 35 | + |
| 36 | + if _TEST_OT_PROVIDER_INITIALIZED: |
| 37 | + return |
| 38 | + |
| 39 | + provider = trace.get_tracer_provider() |
| 40 | + if not hasattr(provider, "add_span_processor"): |
| 41 | + return |
| 42 | + provider.add_span_processor(SimpleSpanProcessor(get_test_ot_exporter())) |
| 43 | + _TEST_OT_PROVIDER_INITIALIZED = True |
18 | 44 |
|
19 | 45 |
|
20 | 46 | class OpenTelemetryBase(unittest.TestCase): |
21 | | - def setUp(self): |
| 47 | + @classmethod |
| 48 | + def setUpClass(cls): |
22 | 49 | if HAS_OPENTELEMETRY_INSTALLED: |
23 | | - self.original_tracer_provider = trace_api.get_tracer_provider() |
24 | | - self.tracer_provider = TracerProvider() |
25 | | - self.memory_exporter = InMemorySpanExporter() |
26 | | - span_processor = export.SimpleExportSpanProcessor(self.memory_exporter) |
27 | | - self.tracer_provider.add_span_processor(span_processor) |
28 | | - trace_api.set_tracer_provider(self.tracer_provider) |
| 50 | + use_test_ot_exporter() |
| 51 | + cls.ot_exporter = get_test_ot_exporter() |
29 | 52 |
|
30 | 53 | def tearDown(self): |
31 | 54 | if HAS_OPENTELEMETRY_INSTALLED: |
32 | | - trace_api.set_tracer_provider(self.original_tracer_provider) |
| 55 | + self.ot_exporter.clear() |
33 | 56 |
|
34 | 57 | def assertNoSpans(self): |
35 | 58 | if HAS_OPENTELEMETRY_INSTALLED: |
36 | | - span_list = self.memory_exporter.get_finished_spans() |
| 59 | + span_list = self.ot_exporter.get_finished_spans() |
37 | 60 | self.assertEqual(len(span_list), 0) |
38 | 61 |
|
39 | 62 | def assertSpanAttributes( |
40 | | - self, name, status=StatusCanonicalCode.OK, attributes=None, span=None |
| 63 | + self, name, status=StatusCode.OK, attributes=None, span=None |
41 | 64 | ): |
42 | 65 | if HAS_OPENTELEMETRY_INSTALLED: |
43 | 66 | if not span: |
44 | | - span_list = self.memory_exporter.get_finished_spans() |
| 67 | + span_list = self.ot_exporter.get_finished_spans() |
45 | 68 | self.assertEqual(len(span_list), 1) |
46 | 69 | span = span_list[0] |
47 | 70 |
|
48 | 71 | self.assertEqual(span.name, name) |
49 | | - self.assertEqual(span.status.canonical_code, status) |
| 72 | + self.assertEqual(span.status.status_code, status) |
50 | 73 | self.assertEqual(dict(span.attributes), attributes) |
0 commit comments