|
5 | 5 | from asyncpg import Connection, Record, cursor
|
6 | 6 | from wrapt import ObjectProxy
|
7 | 7 |
|
| 8 | +from opentelemetry import trace as trace_api |
8 | 9 | from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor
|
9 | 10 | from opentelemetry.test.test_base import TestBase
|
10 | 11 |
|
@@ -105,3 +106,36 @@ async def exec_mock(*args, **kwargs):
|
105 | 106 | spans = self.memory_exporter.get_finished_spans()
|
106 | 107 | self.assertEqual(len(spans), 2)
|
107 | 108 | self.assertEqual([span.status.is_ok for span in spans], [True, True])
|
| 109 | + |
| 110 | + def test_no_op_tracer_provider(self): |
| 111 | + AsyncPGInstrumentor().uninstrument() |
| 112 | + AsyncPGInstrumentor().instrument( |
| 113 | + tracer_provider=trace_api.NoOpTracerProvider() |
| 114 | + ) |
| 115 | + |
| 116 | + # Mock out all interaction with postgres |
| 117 | + async def bind_mock(*args, **kwargs): |
| 118 | + return [] |
| 119 | + |
| 120 | + async def exec_mock(*args, **kwargs): |
| 121 | + return [], None, True |
| 122 | + |
| 123 | + conn = mock.Mock() |
| 124 | + conn.is_closed = lambda: False |
| 125 | + |
| 126 | + conn._protocol = mock.Mock() |
| 127 | + conn._protocol.bind = bind_mock |
| 128 | + conn._protocol.execute = exec_mock |
| 129 | + conn._protocol.bind_execute = exec_mock |
| 130 | + conn._protocol.close_portal = bind_mock |
| 131 | + |
| 132 | + state = mock.Mock() |
| 133 | + state.closed = False |
| 134 | + |
| 135 | + # init the cursor and fetch a single record |
| 136 | + crs = cursor.Cursor(conn, "SELECT * FROM test", state, [], Record) |
| 137 | + asyncio.run(crs._init(1)) |
| 138 | + asyncio.run(crs.fetch(1)) |
| 139 | + |
| 140 | + spans = self.memory_exporter.get_finished_spans() |
| 141 | + self.assertEqual(len(spans), 0) |
0 commit comments