|
24 | 24 | get_labeler_attributes, |
25 | 25 | set_labeler, |
26 | 26 | ) |
| 27 | +from opentelemetry.instrumentation._labeler._internal import _labeler_context |
27 | 28 |
|
28 | 29 |
|
29 | 30 | class TestLabeler(unittest.TestCase): |
@@ -183,3 +184,39 @@ def context_worker(context_id, results): |
183 | 184 | "value": f"context_{i_operation}", |
184 | 185 | } |
185 | 186 | self.assertEqual(results[i_operation], expected) |
| 187 | + |
| 188 | + |
| 189 | +class TestLabelerContextVar(unittest.TestCase): |
| 190 | + def setUp(self): |
| 191 | + clear_labeler() |
| 192 | + |
| 193 | + def test_contextvar_name_and_api_consistency(self): |
| 194 | + self.assertEqual(_labeler_context.name, "otel_labeler") |
| 195 | + labeler = get_labeler() |
| 196 | + labeler.add("test", "value") |
| 197 | + ctx_labeler = _labeler_context.get() |
| 198 | + self.assertIs(labeler, ctx_labeler) |
| 199 | + |
| 200 | + def test_contextvar_isolation(self): |
| 201 | + def context_worker(worker_id, results): |
| 202 | + labeler = get_labeler() |
| 203 | + labeler.add("worker_id", worker_id) |
| 204 | + results[worker_id] = labeler.get_attributes() |
| 205 | + |
| 206 | + results = {} |
| 207 | + for worker_id in range(3): |
| 208 | + ctx = contextvars.copy_context() |
| 209 | + ctx.run(context_worker, worker_id, results) |
| 210 | + for worker_id in range(3): |
| 211 | + expected = {"worker_id": worker_id} |
| 212 | + self.assertEqual(results[worker_id], expected) |
| 213 | + |
| 214 | + def test_clear_and_get_labeler_contextvar(self): |
| 215 | + labeler = get_labeler() |
| 216 | + labeler.add("test", "value") |
| 217 | + self.assertIs(_labeler_context.get(), labeler) |
| 218 | + clear_labeler() |
| 219 | + self.assertIsNone(_labeler_context.get()) |
| 220 | + new_labeler = get_labeler() |
| 221 | + self.assertIsNot(new_labeler, labeler) |
| 222 | + self.assertEqual(new_labeler.get_attributes(), {}) |
0 commit comments