Skip to content

Commit 12ec443

Browse files
author
Alex Boten
committed
adding test cases around error formatting
1 parent c47c227 commit 12ec443

File tree

1 file changed

+70
-5
lines changed

1 file changed

+70
-5
lines changed

tests/recorder_test.py

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import socket
2+
import sys
23
import time
3-
import unittest
44

55
import lightstep.constants
66
import lightstep.recorder
77
import lightstep.tracer
8-
import lightstep.recorder
98
from basictracer.span import BasicSpan
109
from basictracer.context import SpanContext
10+
from opentracing.logs import ERROR_KIND, STACK, ERROR_OBJECT
1111
import pytest
1212

1313
from lightstep.crouton import ttypes
@@ -80,9 +80,7 @@ def test_default_tags_set_correctly(recorder):
8080
"access_token": "{your_access_token}",
8181
"component_name": "python/runtime_test",
8282
"periodic_flush_seconds": 0,
83-
"tags": {
84-
"lightstep.hostname": "hostname",
85-
},
83+
"tags": {"lightstep.hostname": "hostname",},
8684
}
8785
new_recorder = lightstep.recorder.Recorder(**runtime_args)
8886
for tag in new_recorder._runtime.tags:
@@ -179,3 +177,70 @@ def dummy_basic_span(recorder, i):
179177
)
180178
span.finish()
181179
return span
180+
181+
182+
def test_exception_formatting(recorder):
183+
mock_connection = MockConnection()
184+
mock_connection.open()
185+
186+
assert len(recorder._span_records) == 0
187+
188+
span = BasicSpan(
189+
lightstep.tracer._LightstepTracer(False, recorder, None),
190+
operation_name="exception span",
191+
context=SpanContext(trace_id=1000, span_id=2000),
192+
start_time=time.time() - 100,
193+
)
194+
span.log_kv({ERROR_KIND: AttributeError})
195+
span.finish()
196+
assert len(recorder._span_records) == 1
197+
assert recorder.flush(mock_connection)
198+
spans = recorder.converter.get_span_records(mock_connection.reports[0])
199+
if hasattr(spans[0], "log_records"):
200+
assert len(spans[0].log_records) == 1
201+
assert len(spans[0].log_records[0].fields) == 1
202+
assert spans[0].log_records[0].fields[0] == ttypes.KeyValue(
203+
Key="error.kind", Value="AttributeError"
204+
)
205+
else:
206+
assert len(spans[0].logs) == 1
207+
assert len(spans[0].logs[0].fields) == 1
208+
assert spans[0].logs[0].fields[0].key == "error.kind"
209+
assert spans[0].logs[0].fields[0].string_value == "AttributeError"
210+
211+
span = BasicSpan(
212+
lightstep.tracer._LightstepTracer(False, recorder, None),
213+
operation_name="exception span",
214+
context=SpanContext(trace_id=1000, span_id=2000),
215+
start_time=time.time() - 100,
216+
)
217+
218+
try:
219+
raise Exception
220+
except Exception: # pylint: disable=broad-except
221+
exc_type, exc_value, exc_tb = sys.exc_info()
222+
span.log_kv({STACK: exc_tb, ERROR_KIND: exc_type, ERROR_OBJECT: exc_value})
223+
224+
span.finish()
225+
assert len(recorder._span_records) == 1
226+
assert recorder.flush(mock_connection)
227+
spans = recorder.converter.get_span_records(mock_connection.reports[1])
228+
if hasattr(spans[0], "log_records"):
229+
assert len(spans[0].log_records) == 1
230+
assert len(spans[0].log_records[0].fields) == 3
231+
assert spans[0].log_records[0].fields[0].Key == "stack"
232+
assert spans[0].log_records[0].fields[1] == ttypes.KeyValue(
233+
Key="error.kind", Value="Exception"
234+
)
235+
assert spans[0].log_records[0].fields[2] == ttypes.KeyValue(
236+
Key="error.object", Value=""
237+
)
238+
else:
239+
assert len(spans[0].logs) == 1
240+
assert len(spans[0].logs[0].fields) == 3
241+
assert spans[0].logs[0].fields[0].key == "stack"
242+
assert spans[0].logs[0].fields[1].key == "error.kind"
243+
assert spans[0].logs[0].fields[1].string_value == "Exception"
244+
assert spans[0].logs[0].fields[2].key == "error.object"
245+
assert spans[0].logs[0].fields[2].string_value == ""
246+

0 commit comments

Comments
 (0)