Skip to content

Commit af1d5c2

Browse files
author
Peter Giacomo Lombardo
authored
Tests: Custom service names in SDK spans & Tornado Refactor (#250)
* SDK: Add tests to validate custom service names * Refactor Tornado tests
1 parent b80bc97 commit af1d5c2

File tree

7 files changed

+91
-28
lines changed

7 files changed

+91
-28
lines changed

tests/apps/__init__.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import threading
55

66
if 'GEVENT_TEST' not in os.environ and 'CASSANDRA_TEST' not in os.environ:
7-
87
if sys.version_info >= (3, 5, 3):
98
# Background RPC application
109
#
@@ -31,19 +30,4 @@
3130
print("Starting background aiohttp server...")
3231
aio_server.start()
3332

34-
if sys.version_info >= (3, 5, 3):
35-
# Background Tornado application
36-
from .tornado import run_server
37-
38-
# Spawn our background Tornado app that the tests will throw
39-
# requests at.
40-
tornado_server = threading.Thread(target=run_server)
41-
tornado_server.daemon = True
42-
tornado_server.name = "Background Tornado server"
43-
print("Starting background Tornado server...")
44-
tornado_server.start()
45-
46-
# from .celery import start as start_celery
47-
# start_celery()
48-
4933
time.sleep(1)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import os
2+
import sys
3+
from ...helpers import testenv
4+
from ..utils import launch_background_thread
5+
6+
app_thread = None
7+
8+
if app_thread is None and sys.version_info >= (3, 5, 3) and 'GEVENT_TEST' not in os.environ and 'CASSANDRA_TEST' not in os.environ:
9+
testenv["tornado_port"] = 10813
10+
testenv["tornado_server"] = ("http://127.0.0.1:" + str(testenv["tornado_port"]))
11+
12+
# Background Tornado application
13+
from .app import run_server
14+
15+
app_thread = launch_background_thread(run_server, "Tornado")
16+

tests/apps/tornado.py renamed to tests/apps/tornado_server/app.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010

1111
import asyncio
1212

13-
from ..helpers import testenv
14-
15-
16-
testenv["tornado_port"] = 10813
17-
testenv["tornado_server"] = ("http://127.0.0.1:" + str(testenv["tornado_port"]))
13+
from ...helpers import testenv
1814

1915

2016
class Application(tornado.web.Application):

tests/frameworks/test_tornado_client.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
from __future__ import absolute_import
22

3+
import time
34
import asyncio
45
import unittest
56

67
import tornado
78
from tornado.httpclient import AsyncHTTPClient
9+
from instana.singletons import tornado_tracer
810

9-
from instana.singletons import async_tracer, tornado_tracer, agent
10-
11+
import tests.apps.tornado_server
1112
from ..helpers import testenv
1213

1314
from nose.plugins.skip import SkipTest
1415
raise SkipTest("Non deterministic tests TBR")
1516

16-
1717
class TestTornadoClient(unittest.TestCase):
1818

1919
def setUp(self):
@@ -39,6 +39,7 @@ async def test():
3939
response = tornado.ioloop.IOLoop.current().run_sync(test)
4040
assert isinstance(response, tornado.httpclient.HTTPResponse)
4141

42+
time.sleep(0.5)
4243
spans = self.recorder.queued_spans()
4344

4445
self.assertEqual(3, len(spans))
@@ -97,6 +98,7 @@ async def test():
9798
response = tornado.ioloop.IOLoop.current().run_sync(test)
9899
assert isinstance(response, tornado.httpclient.HTTPResponse)
99100

101+
time.sleep(0.5)
100102
spans = self.recorder.queued_spans()
101103
self.assertEqual(3, len(spans))
102104

@@ -154,8 +156,8 @@ async def test():
154156
response = tornado.ioloop.IOLoop.current().run_sync(test)
155157
assert isinstance(response, tornado.httpclient.HTTPResponse)
156158

159+
time.sleep(0.5)
157160
spans = self.recorder.queued_spans()
158-
159161
self.assertEqual(4, len(spans))
160162

161163
server301_span = spans[0]
@@ -227,6 +229,7 @@ async def test():
227229
response = tornado.ioloop.IOLoop.current().run_sync(test)
228230
assert isinstance(response, tornado.httpclient.HTTPResponse)
229231

232+
time.sleep(0.5)
230233
spans = self.recorder.queued_spans()
231234
self.assertEqual(3, len(spans))
232235

@@ -287,6 +290,7 @@ async def test():
287290
response = tornado.ioloop.IOLoop.current().run_sync(test)
288291
assert isinstance(response, tornado.httpclient.HTTPResponse)
289292

293+
time.sleep(0.5)
290294
spans = self.recorder.queued_spans()
291295
self.assertEqual(3, len(spans))
292296

@@ -347,6 +351,7 @@ async def test():
347351
response = tornado.ioloop.IOLoop.current().run_sync(test)
348352
assert isinstance(response, tornado.httpclient.HTTPResponse)
349353

354+
time.sleep(0.5)
350355
spans = self.recorder.queued_spans()
351356
self.assertEqual(3, len(spans))
352357

@@ -404,6 +409,7 @@ async def test():
404409
response = tornado.ioloop.IOLoop.current().run_sync(test)
405410
assert isinstance(response, tornado.httpclient.HTTPResponse)
406411

412+
time.sleep(0.5)
407413
spans = self.recorder.queued_spans()
408414
self.assertEqual(3, len(spans))
409415

tests/frameworks/test_tornado_server.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
from __future__ import absolute_import
22

3+
import time
34
import asyncio
45
import aiohttp
56
import unittest
6-
import time
77

88
import tornado
99
from tornado.httpclient import AsyncHTTPClient
1010

11-
from instana.singletons import async_tracer, agent
11+
import tests.apps.tornado_server
1212

13+
from instana.singletons import async_tracer, agent
1314
from ..helpers import testenv, get_first_span_by_name, get_first_span_by_filter
1415

1516

@@ -51,6 +52,7 @@ async def test():
5152

5253
response = tornado.ioloop.IOLoop.current().run_sync(test)
5354

55+
time.sleep(0.5)
5456
spans = self.recorder.queued_spans()
5557
self.assertEqual(3, len(spans))
5658

@@ -183,6 +185,7 @@ async def test():
183185

184186
response = tornado.ioloop.IOLoop.current().run_sync(test)
185187

188+
time.sleep(0.5)
186189
spans = self.recorder.queued_spans()
187190
self.assertEqual(3, len(spans))
188191

@@ -202,6 +205,7 @@ async def test():
202205

203206
response = tornado.ioloop.IOLoop.current().run_sync(test)
204207

208+
time.sleep(0.5)
205209
spans = self.recorder.queued_spans()
206210
self.assertEqual(4, len(spans))
207211

@@ -280,6 +284,7 @@ async def test():
280284

281285
response = tornado.ioloop.IOLoop.current().run_sync(test)
282286

287+
time.sleep(0.5)
283288
spans = self.recorder.queued_spans()
284289
self.assertEqual(3, len(spans))
285290

@@ -343,6 +348,7 @@ async def test():
343348

344349
response = tornado.ioloop.IOLoop.current().run_sync(test)
345350

351+
time.sleep(0.5)
346352
spans = self.recorder.queued_spans()
347353
self.assertEqual(3, len(spans))
348354

@@ -407,6 +413,7 @@ async def test():
407413

408414
response = tornado.ioloop.IOLoop.current().run_sync(test)
409415

416+
time.sleep(0.5)
410417
spans = self.recorder.queued_spans()
411418
self.assertEqual(3, len(spans))
412419

@@ -471,6 +478,7 @@ async def test():
471478

472479
response = tornado.ioloop.IOLoop.current().run_sync(test)
473480

481+
time.sleep(0.5)
474482
spans = self.recorder.queued_spans()
475483
self.assertEqual(3, len(spans))
476484

@@ -542,6 +550,7 @@ async def test():
542550

543551
response = tornado.ioloop.IOLoop.current().run_sync(test)
544552

553+
time.sleep(0.5)
545554
spans = self.recorder.queued_spans()
546555
self.assertEqual(3, len(spans))
547556

tests/opentracing/__init__.py

Whitespace-only changes.

tests/opentracing/test_ot_span.py

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@
66
import opentracing
77
from uuid import UUID
88
from instana.util import to_json
9-
from instana.singletons import tracer
9+
from instana.singletons import agent, tracer
10+
from ..helpers import get_first_span_by_filter
1011

1112
PY2 = sys.version_info[0] == 2
1213
PY3 = sys.version_info[0] == 3
1314

15+
1416
class TestOTSpan(unittest.TestCase):
1517
def setUp(self):
1618
""" Clear all spans before a test run """
19+
agent.options.service_name = None
1720
opentracing.tracer = tracer
1821
recorder = opentracing.tracer.recorder
1922
recorder.clear_spans()
@@ -215,3 +218,52 @@ def test_tag_names(self):
215218
json_data = to_json(test_span)
216219
assert(json_data)
217220

221+
def test_custom_service_name(self):
222+
# Set a custom service name
223+
agent.options.service_name = "custom_service_name"
224+
225+
with tracer.start_active_span('entry_span') as scope:
226+
scope.span.set_tag('span.kind', 'server')
227+
scope.span.set_tag(u'type', 'entry_span')
228+
229+
with tracer.start_active_span('intermediate_span', child_of=scope.span) as exit_scope:
230+
exit_scope.span.set_tag(u'type', 'intermediate_span')
231+
232+
with tracer.start_active_span('exit_span', child_of=scope.span) as exit_scope:
233+
exit_scope.span.set_tag('span.kind', 'client')
234+
exit_scope.span.set_tag(u'type', 'exit_span')
235+
236+
spans = tracer.recorder.queued_spans()
237+
assert len(spans) == 3
238+
239+
filter = lambda span: span.n == "sdk" and span.data['sdk']['name'] == "entry_span"
240+
entry_span = get_first_span_by_filter(spans, filter)
241+
assert (entry_span)
242+
243+
filter = lambda span: span.n == "sdk" and span.data['sdk']['name'] == "intermediate_span"
244+
intermediate_span = get_first_span_by_filter(spans, filter)
245+
assert (intermediate_span)
246+
247+
filter = lambda span: span.n == "sdk" and span.data['sdk']['name'] == "exit_span"
248+
exit_span = get_first_span_by_filter(spans, filter)
249+
assert (exit_span)
250+
251+
# Custom service name should be set on ENTRY spans and none other
252+
assert(entry_span)
253+
assert(len(entry_span.data['sdk']['custom']['tags']) == 2)
254+
assert(entry_span.data['sdk']['custom']['tags']['type'] == 'entry_span')
255+
assert(entry_span.data['service'] == 'custom_service_name')
256+
assert(entry_span.k == 1)
257+
258+
assert(intermediate_span)
259+
assert(len(intermediate_span.data['sdk']['custom']['tags']) == 1)
260+
assert(intermediate_span.data['sdk']['custom']['tags']['type'] == 'intermediate_span')
261+
assert("service" not in intermediate_span.data)
262+
assert(intermediate_span.k == 3)
263+
264+
assert(exit_span)
265+
assert(len(exit_span.data['sdk']['custom']['tags']) == 2)
266+
assert(exit_span.data['sdk']['custom']['tags']['type'] == 'exit_span')
267+
assert("service" not in intermediate_span.data)
268+
assert(exit_span.k == 2)
269+

0 commit comments

Comments
 (0)