Skip to content

Commit d100784

Browse files
committed
tests: Adapt GEvent tests to OTel spec
Signed-off-by: Varsha GS <[email protected]>
1 parent 7e19bee commit d100784

File tree

2 files changed

+62
-65
lines changed

2 files changed

+62
-65
lines changed

tests/frameworks/test_gevent.py

Lines changed: 61 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,123 +2,120 @@
22
# (c) Copyright Instana Inc. 2020
33

44
import os
5-
import unittest
5+
import pytest
66

7+
import urllib3
78
import gevent
89
from gevent.pool import Group
9-
import urllib3
10-
from opentracing.scope_managers.gevent import GeventScopeManager
10+
from typing import Generator
1111

1212
import tests.apps.flask_app
13-
from instana.span import SDKSpan
1413
from instana.singletons import tracer
15-
from ..helpers import testenv, get_spans_by_filter
14+
from tests.helpers import testenv, get_spans_by_filter, filter_test_span
1615

1716

18-
@unittest.skipIf(not os.environ.get("GEVENT_STARLETTE_TEST"), reason="")
19-
class TestGEvent(unittest.TestCase):
20-
def setUp(self):
21-
self.http = urllib3.HTTPConnectionPool('127.0.0.1', port=testenv["flask_port"], maxsize=20)
22-
self.recorder = tracer.recorder
23-
self.recorder.clear_spans()
24-
tracer._scope_manager = GeventScopeManager()
17+
# Skip the tests if the environment variable `GEVENT_STARLETTE_TEST` is not set
18+
pytestmark = pytest.mark.skipif(not os.environ.get("GEVENT_STARLETTE_TEST"), reason="GEVENT_STARLETTE_TEST not set")
19+
2520

26-
def tearDown(self):
27-
""" Do nothing for now """
28-
pass
21+
class TestGEvent:
22+
@classmethod
23+
def setup_class(cls) -> None:
24+
"""Setup that runs once before all tests in the class"""
25+
cls.http = urllib3.HTTPConnectionPool('127.0.0.1', port=testenv["flask_port"], maxsize=20)
26+
cls.recorder = tracer.span_processor
27+
28+
@pytest.fixture(autouse=True)
29+
def setUp(self) -> Generator[None, None, None]:
30+
"""Clear all spans before each test run"""
31+
self.recorder.clear_spans()
2932

3033
def make_http_call(self, n=None):
34+
"""Helper function to make HTTP calls"""
3135
return self.http.request('GET', testenv["flask_server"] + '/')
3236

3337
def spawn_calls(self):
34-
with tracer.start_active_span('spawn_calls'):
38+
"""Helper function to spawn multiple HTTP calls"""
39+
with tracer.start_as_current_span('spawn_calls'):
3540
jobs = []
3641
jobs.append(gevent.spawn(self.make_http_call))
3742
jobs.append(gevent.spawn(self.make_http_call))
3843
jobs.append(gevent.spawn(self.make_http_call))
3944
gevent.joinall(jobs, timeout=2)
4045

4146
def spawn_imap_unordered(self):
47+
"""Helper function to test imap_unordered"""
4248
igroup = Group()
4349
result = []
44-
with tracer.start_active_span('test'):
50+
with tracer.start_as_current_span('test'):
4551
for i in igroup.imap_unordered(self.make_http_call, range(3)):
4652
result.append(i)
4753

4854
def launch_gevent_chain(self):
49-
with tracer.start_active_span('test'):
55+
"""Helper function to launch a chain of gevent calls"""
56+
with tracer.start_as_current_span('test'):
5057
gevent.spawn(self.spawn_calls).join()
5158

5259
def test_spawning(self):
5360
gevent.spawn(self.launch_gevent_chain)
54-
5561
gevent.sleep(2)
56-
62+
5763
spans = self.recorder.queued_spans()
58-
59-
self.assertEqual(8, len(spans))
60-
61-
span_filter = lambda span: span.n == "sdk" \
62-
and span.data['sdk']['name'] == 'test' and span.p == None
63-
test_spans = get_spans_by_filter(spans, span_filter)
64-
self.assertIsNotNone(test_spans)
65-
self.assertEqual(len(test_spans), 1)
66-
64+
65+
assert len(spans) == 8
66+
67+
test_spans = get_spans_by_filter(spans, filter_test_span)
68+
assert test_spans
69+
assert len(test_spans) == 1
70+
6771
test_span = test_spans[0]
68-
self.assertTrue(type(test_spans[0]) is SDKSpan)
69-
72+
7073
span_filter = lambda span: span.n == "sdk" \
71-
and span.data['sdk']['name'] == 'spawn_calls' and span.p == test_span.s
74+
and span.data['sdk']['name'] == 'spawn_calls' and span.p == test_span.s
7275
spawn_spans = get_spans_by_filter(spans, span_filter)
73-
self.assertIsNotNone(spawn_spans)
74-
self.assertEqual(len(spawn_spans), 1)
75-
76+
assert spawn_spans
77+
assert len(spawn_spans) == 1
78+
7679
spawn_span = spawn_spans[0]
77-
self.assertTrue(type(spawn_spans[0]) is SDKSpan)
78-
80+
7981
span_filter = lambda span: span.n == "urllib3"
8082
urllib3_spans = get_spans_by_filter(spans, span_filter)
81-
83+
8284
for urllib3_span in urllib3_spans:
8385
# spans should all have the same test span parent
84-
self.assertEqual(urllib3_span.t, spawn_span.t)
85-
self.assertEqual(urllib3_span.p, spawn_span.s)
86-
86+
assert urllib3_span.t == spawn_span.t
87+
assert urllib3_span.p == spawn_span.s
88+
8789
# find the wsgi span generated from this urllib3 request
8890
span_filter = lambda span: span.n == "wsgi" and span.p == urllib3_span.s
8991
wsgi_spans = get_spans_by_filter(spans, span_filter)
90-
self.assertIsNotNone(wsgi_spans)
91-
self.assertEqual(len(wsgi_spans), 1)
92+
assert wsgi_spans is not None
93+
assert len(wsgi_spans) == 1
9294

9395
def test_imap_unordered(self):
94-
gevent.spawn(self.spawn_imap_unordered())
95-
96+
gevent.spawn(self.spawn_imap_unordered)
9697
gevent.sleep(2)
97-
98+
9899
spans = self.recorder.queued_spans()
99-
self.assertEqual(7, len(spans))
100-
101-
span_filter = lambda span: span.n == "sdk" \
102-
and span.data['sdk']['name'] == 'test' and span.p == None
103-
test_spans = get_spans_by_filter(spans, span_filter)
104-
self.assertIsNotNone(test_spans)
105-
self.assertEqual(len(test_spans), 1)
106-
100+
assert len(spans) == 7
101+
102+
test_spans = get_spans_by_filter(spans, filter_test_span)
103+
assert test_spans is not None
104+
assert len(test_spans) == 1
105+
107106
test_span = test_spans[0]
108-
self.assertTrue(type(test_spans[0]) is SDKSpan)
109-
107+
110108
span_filter = lambda span: span.n == "urllib3"
111109
urllib3_spans = get_spans_by_filter(spans, span_filter)
112-
self.assertEqual(len(urllib3_spans), 3)
113-
110+
assert len(urllib3_spans) == 3
111+
114112
for urllib3_span in urllib3_spans:
115113
# spans should all have the same test span parent
116-
self.assertEqual(urllib3_span.t, test_span.t)
117-
self.assertEqual(urllib3_span.p, test_span.s)
118-
114+
assert urllib3_span.t == test_span.t
115+
assert urllib3_span.p == test_span.s
116+
119117
# find the wsgi span generated from this urllib3 request
120118
span_filter = lambda span: span.n == "wsgi" and span.p == urllib3_span.s
121119
wsgi_spans = get_spans_by_filter(spans, span_filter)
122-
self.assertIsNotNone(wsgi_spans)
123-
self.assertEqual(len(wsgi_spans), 1)
124-
120+
assert wsgi_spans is not None
121+
assert len(wsgi_spans) == 1

tests/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def fail_with_message_and_span_dump(msg, spans):
108108
pytest.fail(msg + span_dump, True)
109109

110110

111-
def is_test_span(span):
111+
def filter_test_span(span):
112112
"""
113113
return the filter for test span
114114
"""

0 commit comments

Comments
 (0)