Skip to content

Commit 62c1928

Browse files
committed
tests(asyncio): adapt tests to OTel usage.
Signed-off-by: Paulo Vital <[email protected]>
1 parent 39660af commit 62c1928

File tree

2 files changed

+69
-61
lines changed

2 files changed

+69
-61
lines changed

tests/conftest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
collect_ignore_glob.append("*clients/test_sql*")
4646

4747
collect_ignore_glob.append("*frameworks/test_aiohttp*")
48-
collect_ignore_glob.append("*frameworks/test_asyncio*")
4948
collect_ignore_glob.append("*frameworks/test_celery*")
5049
collect_ignore_glob.append("*frameworks/test_gevent*")
5150
collect_ignore_glob.append("*frameworks/test_grpcio*")

tests/frameworks/test_asyncio.py

Lines changed: 69 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,140 +2,149 @@
22
# (c) Copyright Instana Inc. 2020
33

44
import asyncio
5+
from typing import Any, Dict, Generator, Optional
6+
57
import aiohttp
6-
import unittest
8+
import pytest
79

8-
import tests.apps.flask_app
9-
from ..helpers import testenv
10+
import tests.apps.flask_app # noqa: F401
1011
from instana.configurator import config
11-
from instana.singletons import async_tracer
12-
12+
from instana.singletons import tracer
13+
from tests.helpers import testenv
14+
15+
16+
class TestAsyncio:
17+
async def fetch(
18+
self,
19+
session: aiohttp.ClientSession,
20+
url: str,
21+
headers: Optional[Dict[str, Any]] = None,
22+
params: Optional[Dict[str, Any]] = None,
23+
):
24+
try:
25+
async with session.get(url, headers=headers, params=params) as response:
26+
return response
27+
except aiohttp.web_exceptions.HTTPException:
28+
pass
1329

14-
class TestAsyncio(unittest.TestCase):
15-
def setUp(self):
16-
""" Clear all spans before a test run """
17-
self.recorder = async_tracer.recorder
30+
@pytest.fixture(autouse=True)
31+
def _resource(self) -> Generator[None, None, None]:
32+
"""SetUp and TearDown"""
33+
# setup
34+
# Clear all spans before a test run
35+
self.recorder = tracer.span_processor
1836
self.recorder.clear_spans()
1937

2038
# New event loop for every test
2139
self.loop = asyncio.new_event_loop()
2240
asyncio.set_event_loop(None)
2341

2442
# Restore default
25-
config['asyncio_task_context_propagation']['enabled'] = False
26-
27-
def tearDown(self):
28-
""" Purge the queue """
29-
pass
30-
31-
async def fetch(self, session, url, headers=None):
32-
try:
33-
async with session.get(url, headers=headers) as response:
34-
return response
35-
except aiohttp.web_exceptions.HTTPException:
36-
pass
37-
38-
def test_ensure_future_with_context(self):
43+
config["asyncio_task_context_propagation"]["enabled"] = False
44+
yield
45+
# teardown
46+
# Close the loop if running
47+
if self.loop.is_running():
48+
self.loop.close()
49+
50+
def test_ensure_future_with_context(self) -> None:
3951
async def run_later(msg="Hello"):
40-
# print("run_later: %s" % async_tracer.active_span.operation_name)
4152
async with aiohttp.ClientSession() as session:
4253
return await self.fetch(session, testenv["flask_server"] + "/")
4354

4455
async def test():
45-
with async_tracer.start_active_span('test'):
46-
asyncio.ensure_future(run_later("Hello"))
56+
with tracer.start_as_current_span("test"):
57+
asyncio.ensure_future(run_later("Hello OTel"))
4758
await asyncio.sleep(0.5)
4859

4960
# Override default task context propagation
50-
config['asyncio_task_context_propagation']['enabled'] = True
61+
config["asyncio_task_context_propagation"]["enabled"] = True
5162

5263
self.loop.run_until_complete(test())
5364

5465
spans = self.recorder.queued_spans()
55-
self.assertEqual(3, len(spans))
66+
assert len(spans) == 3
5667

5768
test_span = spans[0]
5869
wsgi_span = spans[1]
5970
aioclient_span = spans[2]
6071

61-
self.assertEqual(test_span.t, wsgi_span.t)
62-
self.assertEqual(test_span.t, aioclient_span.t)
72+
assert test_span.t == wsgi_span.t
73+
assert aioclient_span.t == test_span.t
6374

64-
self.assertEqual(test_span.p, None)
65-
self.assertEqual(wsgi_span.p, aioclient_span.s)
66-
self.assertEqual(aioclient_span.p, test_span.s)
75+
assert not test_span.p
76+
assert wsgi_span.p == aioclient_span.s
77+
assert aioclient_span.p == test_span.s
6778

68-
def test_ensure_future_without_context(self):
79+
def test_ensure_future_without_context(self) -> None:
6980
async def run_later(msg="Hello"):
70-
# print("run_later: %s" % async_tracer.active_span.operation_name)
7181
async with aiohttp.ClientSession() as session:
7282
return await self.fetch(session, testenv["flask_server"] + "/")
7383

7484
async def test():
75-
with async_tracer.start_active_span('test'):
76-
asyncio.ensure_future(run_later("Hello"))
85+
with tracer.start_as_current_span("test"):
86+
asyncio.ensure_future(run_later("Hello OTel"))
7787
await asyncio.sleep(0.5)
7888

7989
self.loop.run_until_complete(test())
8090

8191
spans = self.recorder.queued_spans()
8292

83-
self.assertEqual(2, len(spans))
84-
self.assertEqual("sdk", spans[0].n)
85-
self.assertEqual("wsgi", spans[1].n)
93+
assert len(spans) == 2
94+
assert spans[0].n == "sdk"
95+
assert spans[1].n == "wsgi"
8696

8797
# Without the context propagated, we should get two separate traces
88-
self.assertNotEqual(spans[0].t, spans[1].t)
98+
assert spans[0].t != spans[1].t
8999

90100
if hasattr(asyncio, "create_task"):
91-
def test_create_task_with_context(self):
101+
102+
def test_create_task_with_context(self) -> None:
92103
async def run_later(msg="Hello"):
93-
# print("run_later: %s" % async_tracer.active_span.operation_name)
94104
async with aiohttp.ClientSession() as session:
95105
return await self.fetch(session, testenv["flask_server"] + "/")
96106

97107
async def test():
98-
with async_tracer.start_active_span('test'):
99-
asyncio.create_task(run_later("Hello"))
108+
with tracer.start_as_current_span("test"):
109+
asyncio.create_task(run_later("Hello OTel"))
100110
await asyncio.sleep(0.5)
101111

102112
# Override default task context propagation
103-
config['asyncio_task_context_propagation']['enabled'] = True
113+
config["asyncio_task_context_propagation"]["enabled"] = True
104114

105115
self.loop.run_until_complete(test())
106116

107117
spans = self.recorder.queued_spans()
108-
self.assertEqual(3, len(spans))
118+
assert len(spans) == 3
109119

110120
test_span = spans[0]
111121
wsgi_span = spans[1]
112122
aioclient_span = spans[2]
113123

114-
self.assertEqual(test_span.t, wsgi_span.t)
115-
self.assertEqual(test_span.t, aioclient_span.t)
124+
assert wsgi_span.t == test_span.t
125+
assert aioclient_span.t == test_span.t
116126

117-
self.assertEqual(test_span.p, None)
118-
self.assertEqual(wsgi_span.p, aioclient_span.s)
119-
self.assertEqual(aioclient_span.p, test_span.s)
127+
assert not test_span.p
128+
assert wsgi_span.p == aioclient_span.s
129+
assert aioclient_span.p == test_span.s
120130

121-
def test_create_task_without_context(self):
131+
def test_create_task_without_context(self) -> None:
122132
async def run_later(msg="Hello"):
123-
# print("run_later: %s" % async_tracer.active_span.operation_name)
124133
async with aiohttp.ClientSession() as session:
125134
return await self.fetch(session, testenv["flask_server"] + "/")
126135

127136
async def test():
128-
with async_tracer.start_active_span('test'):
129-
asyncio.create_task(run_later("Hello"))
137+
with tracer.start_as_current_span("test"):
138+
asyncio.create_task(run_later("Hello OTel"))
130139
await asyncio.sleep(0.5)
131140

132141
self.loop.run_until_complete(test())
133142

134143
spans = self.recorder.queued_spans()
135144

136-
self.assertEqual(2, len(spans))
137-
self.assertEqual("sdk", spans[0].n)
138-
self.assertEqual("wsgi", spans[1].n)
145+
assert len(spans) == 2
146+
assert spans[0].n == "sdk"
147+
assert spans[1].n == "wsgi"
139148

140149
# Without the context propagated, we should get two separate traces
141-
self.assertNotEqual(spans[0].t, spans[1].t)
150+
assert spans[0].t != spans[1].t

0 commit comments

Comments
 (0)