|
|
@@ -12,7 +12,7 @@ |
|
|
|
# See the License for the specific language governing permissions and |
|
|
|
# limitations under the License. |
|
|
|
|
|
|
|
from typing import cast |
|
|
|
from typing import Awaitable, cast |
|
|
|
|
|
|
|
from twisted.internet import defer |
|
|
|
from twisted.test.proto_helpers import MemoryReactorClock |
|
|
@@ -227,8 +227,6 @@ class LogContextScopeManagerTestCase(TestCase): |
|
|
|
Test whether we can use `@trace_with_opname` (`@trace`) and `@tag_args` |
|
|
|
with functions that return deferreds |
|
|
|
""" |
|
|
|
reactor = MemoryReactorClock() |
|
|
|
|
|
|
|
with LoggingContext("root context"): |
|
|
|
|
|
|
|
@trace_with_opname("fixture_deferred_func", tracer=self._tracer) |
|
|
@@ -240,9 +238,6 @@ class LogContextScopeManagerTestCase(TestCase): |
|
|
|
|
|
|
|
result_d1 = fixture_deferred_func() |
|
|
|
|
|
|
|
# let the tasks complete |
|
|
|
reactor.pump((2,) * 8) |
|
|
|
|
|
|
|
self.assertEqual(self.successResultOf(result_d1), "foo") |
|
|
|
|
|
|
|
# the span should have been reported |
|
|
@@ -256,8 +251,6 @@ class LogContextScopeManagerTestCase(TestCase): |
|
|
|
Test whether we can use `@trace_with_opname` (`@trace`) and `@tag_args` |
|
|
|
with async functions |
|
|
|
""" |
|
|
|
reactor = MemoryReactorClock() |
|
|
|
|
|
|
|
with LoggingContext("root context"): |
|
|
|
|
|
|
|
@trace_with_opname("fixture_async_func", tracer=self._tracer) |
|
|
@@ -267,9 +260,6 @@ class LogContextScopeManagerTestCase(TestCase): |
|
|
|
|
|
|
|
d1 = defer.ensureDeferred(fixture_async_func()) |
|
|
|
|
|
|
|
# let the tasks complete |
|
|
|
reactor.pump((2,) * 8) |
|
|
|
|
|
|
|
self.assertEqual(self.successResultOf(d1), "foo") |
|
|
|
|
|
|
|
# the span should have been reported |
|
|
@@ -277,3 +267,34 @@ class LogContextScopeManagerTestCase(TestCase): |
|
|
|
[span.operation_name for span in self._reporter.get_spans()], |
|
|
|
["fixture_async_func"], |
|
|
|
) |
|
|
|
|
|
|
|
def test_trace_decorator_awaitable_return(self) -> None: |
|
|
|
""" |
|
|
|
Test whether we can use `@trace_with_opname` (`@trace`) and `@tag_args` |
|
|
|
with functions that return an awaitable (e.g. a coroutine) |
|
|
|
""" |
|
|
|
with LoggingContext("root context"): |
|
|
|
# Something we can return without `await` to get a coroutine |
|
|
|
async def fixture_async_func() -> str: |
|
|
|
return "foo" |
|
|
|
|
|
|
|
# The actual kind of function we want to test that returns an awaitable |
|
|
|
@trace_with_opname("fixture_awaitable_return_func", tracer=self._tracer) |
|
|
|
@tag_args |
|
|
|
def fixture_awaitable_return_func() -> Awaitable[str]: |
|
|
|
return fixture_async_func() |
|
|
|
|
|
|
|
# Something we can run with `defer.ensureDeferred(runner())` and pump the |
|
|
|
# whole async tasks through to completion. |
|
|
|
async def runner() -> str: |
|
|
|
return await fixture_awaitable_return_func() |
|
|
|
|
|
|
|
d1 = defer.ensureDeferred(runner()) |
|
|
|
|
|
|
|
self.assertEqual(self.successResultOf(d1), "foo") |
|
|
|
|
|
|
|
# the span should have been reported |
|
|
|
self.assertEqual( |
|
|
|
[span.operation_name for span in self._reporter.get_spans()], |
|
|
|
["fixture_awaitable_return_func"], |
|
|
|
) |