def test_prepare(): trace = trace_factory.get_or_create_trace() with warnings.catch_warnings(record=True) as w: warnings.simplefilter('always') trace.prepare() assert not trace.events assert trace.exceptions == [] assert len(w) == 1 trace.clear_events() trace.add_event(EventMock()) with warnings.catch_warnings(record=True) as w: warnings.simplefilter('always') trace.prepare() assert not trace.events assert trace.exceptions == [] assert len(w) == 1 trace.clear_events() trace.add_event(EventMock()) with warnings.catch_warnings(record=True) as w: trace.prepare() trace.prepare() # this call should NOT trigger a warning assert not trace.events assert trace.exceptions == [] assert len(w) == 1
def test_add_event(): event = EventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() for i in range(10): # verify we can add more then 1 event trace.add_event(event) assert event is trace.events[i] assert event.terminated
def test_set_error_sanity(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) msg = 'oops' trace.set_error(ValueError(msg)) assert trace.to_dict()['events'][0]['exception']['message'] == msg assert len(trace.to_dict()['events'][0]['exception']['traceback']) > 1
def test_trace_url_sanity(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) trace_url = trace.get_trace_url() assert trace_url == TRACE_URL_PREFIX.format( id=event.resource['metadata']['trace_id'], start_time=int(event.start_time) )
def test_set_error_string(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) msg = 'oops' trace.set_error(msg) assert trace.to_dict()['events'][0]['exception']['message'] == msg assert trace.to_dict()['events'][0]['exception']['type'] == ( EpsagonException.__name__)
def test_custom_labels_override_trace(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) trace.add_label('test_label', 'test_value1') trace.add_label('test_label', 'test_value2') trace_metadata = trace.to_dict()['events'][0]['resource']['metadata'] assert trace_metadata.get('labels') is not None assert json.loads(trace_metadata['labels']) == {'test_label': 'test_value2'}
def test_set_error_with_traceback(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) msg = 'oops' traceback_data = 'test_value' trace.set_error(ValueError(msg), traceback_data=traceback_data) assert trace.to_dict()['events'][0]['exception']['message'] == msg assert (trace.to_dict()['events'][0]['exception']['traceback'] == traceback_data)
def test_lambda_trace_url_sanity(): event = LambdaRunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) trace_url = trace.get_trace_url() assert trace_url == LAMBDA_TRACE_URL_PREFIX.format( aws_account=event.resource['metadata']['aws_account'], region=event.resource['metadata']['region'], function_name=event.resource['name'], request_id=event.event_id, request_time=int(event.start_time) )
def test_multi_value_labels_sanity(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) trace.add_label('test_label', { 'test2_label': 15, 'test3_label': 'test', 4: 'hey' }) trace_metadata = trace.to_dict()['events'][0]['resource']['metadata'] assert trace_metadata.get('labels') is not None assert json.loads(trace_metadata['labels']) == { 'test_label.test2_label': '15', 'test_label.test3_label': 'test', 'test_label.4': 'hey', }
def test_custom_labels_sanity(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) trace.add_label('test_label', 'test_value') trace.add_label('test_label_2', 42) trace.add_label('test_label_3', 42.2) trace.add_label('test_label_invalid', {}) trace_metadata = trace.to_dict()['events'][0]['resource']['metadata'] assert trace_metadata.get('labels') is not None assert json.loads(trace_metadata['labels']) == { 'test_label': 'test_value', 'test_label_2': '42', 'test_label_3': '42.2', }
def test_custom_labels_sanity(): event = RunnerEventMock() trace = trace_factory.get_or_create_trace() trace.clear_events() trace.set_runner(event) trace.add_label('test_label', 'test_value') trace.add_label('test_label_2', 42) trace.add_label('test_label_3', 42.2) trace.add_label('test_label_4', True) # This is not an invalid label, but it won't be added because dict is empty. trace.add_label('test_label_invalid', {}) trace_metadata = trace.to_dict()['events'][0]['resource']['metadata'] assert trace_metadata.get('labels') is not None assert json.loads(trace_metadata['labels']) == { 'test_label': 'test_value', 'test_label_2': 42, 'test_label_3': 42.2, 'test_label_4': True, }