def test_start_span_cb(self): def test_cb(span, request): span.operation_name = 'foo/' + request.method span.set_tag('component', 'tornado-client') tornado_opentracing.init_client_tracing(self.tracer, start_span_cb=test_cb) with tornado_context(): response = self.http_fetch(self.get_url('/')) self.assertEqual(response.code, 200) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertTrue(spans[0].finished) self.assertEqual(spans[0].operation_name, 'foo/GET') self.assertEqual( spans[0].tags, { 'component': 'tornado-client', 'span.kind': 'client', 'http.url': self.get_url('/'), 'http.method': 'GET', 'http.status_code': 200, })
def test_start_span_cb_exception(self): def test_cb(span, request): raise RuntimeError('This should not happen') tornado_opentracing.init_client_tracing(self.tracer, start_span_cb=test_cb) with tornado_context(): response = self.http_fetch(self.get_url('/')) self.assertEqual(response.code, 200) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertFalse(spans[0].tags.get('error', False))
def test_simple(self): with tornado_context(): response = self.http_fetch(self.get_url('/'), self.stop) self.assertEqual(response.code, 200) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertTrue(spans[0].finished) self.assertEqual(spans[0].operation_name, 'GET') self.assertEqual(spans[0].tags, { 'component': 'tornado', 'span.kind': 'client', 'http.url': self.get_url('/'), 'http.method': 'GET', 'http.status_code': 200, })
def test_server_not_found(self): tornado_opentracing.init_client_tracing(self.tracer) with tornado_context(): response = self.http_fetch(self.get_url('/doesnotexist'), raise_error=False) self.assertEqual(response.code, 404) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertEqual(spans[0].operation_name, 'GET') tags = spans[0].tags self.assertEqual(tags.get('http.status_code', None), 404) self.assertEqual(tags.get('error', None), None) # no error. self.assertEqual(len(spans[0].logs), 0)
def test_request_obj(self): tornado_opentracing.init_client_tracing(self.tracer) with tornado_context(): response = self.http_fetch(HTTPRequest(self.get_url('/'))) self.assertEqual(response.code, 200) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertTrue(spans[0].finished) self.assertEqual(spans[0].operation_name, 'GET') self.assertEqual(spans[0].tags, { 'component': 'tornado', 'span.kind': 'client', 'http.url': self.get_url('/'), 'http.method': 'GET', 'http.status_code': 200, })
def test_simple(self): tornado_opentracing.init_client_tracing(tracing) with tornado_context(): response = self.http_fetch(self.get_url('/decorated')) self.assertEqual(response.code, 200) spans = tracing.tracer.finished_spans() self.assertEqual(len(spans), 2) # Client span = spans[1] self.assertTrue(span.finished) self.assertEqual(span.operation_name, 'GET') self.assertEqual( span.tags, { 'component': 'tornado', 'span.kind': 'client', 'http.url': self.get_url('/decorated'), 'http.method': 'GET', 'http.status_code': 200, }) # Server span2 = spans[0] self.assertTrue(span2.finished) self.assertEqual(span2.operation_name, 'DecoratedHandler') self.assertEqual( span2.tags, { 'component': 'tornado', 'span.kind': 'server', 'http.url': '/decorated', 'http.method': 'GET', 'http.status_code': 200, 'protocol': 'http', }) # Make sure the context was propagated, # and the client/server have the proper child_of relationship. self.assertEqual(span.context.trace_id, span2.context.trace_id) self.assertEqual(span.context.span_id, span2.parent_id)
def test_explicit_parameters(self): tornado_opentracing.init_client_tracing(self.tracer) with tornado_context(): response = self.http_fetch( self.get_url('/error'), raise_error=False, method='POST', body='') self.assertEqual(response.code, 500) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertTrue(spans[0].finished) self.assertEqual(spans[0].operation_name, 'POST') self.assertEqual(spans[0].tags, { 'component': 'tornado', 'span.kind': 'client', 'http.url': self.get_url('/error'), 'http.method': 'POST', 'http.status_code': 500, })
def test_server_error(self): tornado_opentracing.init_client_tracing(self.tracer) with tornado_context(): response = self.http_fetch(self.get_url('/error')) self.assertEqual(response.code, 500) spans = self.tracer.finished_spans() self.assertEqual(len(spans), 1) self.assertTrue(spans[0].finished) self.assertEqual(spans[0].operation_name, 'GET') tags = spans[0].tags self.assertEqual(tags.get('http.status_code', None), 500) self.assertEqual(tags.get('error', None), True) logs = spans[0].logs self.assertEqual(len(logs), 1) self.assertEqual(logs[0].key_values.get('event', None), 'error') self.assertTrue( isinstance(logs[0].key_values.get('error.object', None), Exception))