def test_zipkin_logging_server_context_emit_spans_with_firehose( add_span_mock, flush_mock, time_mock, fake_endpoint ): # This lengthy function tests that the logging context properly # logs both client and server spans. trace_id = "000000000000000f" parent_span_id = "0000000000000001" server_span_id = "0000000000000002" client_span_id = "0000000000000003" client_span_name = "breadcrumbs" client_svc_name = "svc" attr = ZipkinAttrs( trace_id=trace_id, span_id=server_span_id, parent_span_id=parent_span_id, flags=None, is_sampled=True, ) tracer = MockTracer() client_span = Span( trace_id=trace_id, name=client_span_name, parent_id=server_span_id, span_id=client_span_id, kind=Kind.CLIENT, timestamp=26.0, duration=4.0, local_endpoint=create_endpoint(service_name=client_svc_name), annotations={"ann2": 2, "cs": 26, "cr": 30}, tags={"bann2": "yiss"}, ) tracer.get_spans().append(client_span) transport_handler = mock.Mock() firehose_handler = mock.Mock() context = logging_helper.ZipkinLoggingContext( zipkin_attrs=attr, endpoint=fake_endpoint, span_name="GET /foo", transport_handler=transport_handler, report_root_timestamp=True, get_tracer=lambda: tracer, firehose_handler=firehose_handler, service_name="test_server", encoding=Encoding.V1_JSON, ) context.start_timestamp = 24 context.response_status_code = 200 context.tags = {"k": "v"} time_mock.return_value = 42 context.emit_spans() call_args = add_span_mock.call_args_list firehose_client_log_call, client_log_call = call_args[0], call_args[2] firehose_server_log_call, server_log_call = call_args[1], call_args[3] assert ( server_log_call[0][1].build_v1_span() == firehose_server_log_call[0][1].build_v1_span() ) assert ( server_log_call[0][1].build_v1_span() == Span( trace_id=trace_id, name="GET /foo", parent_id=parent_span_id, span_id=server_span_id, kind=Kind.SERVER, timestamp=24.0, duration=18.0, local_endpoint=fake_endpoint, annotations={"sr": 24, "ss": 42}, tags={"k": "v"}, ).build_v1_span() ) assert client_log_call[0][1] == firehose_client_log_call[0][1] == client_span assert flush_mock.call_count == 2
def test_init(self, mock_generate_kind): # Test that all arguments are correctly saved zipkin_attrs = ZipkinAttrs(None, None, None, None, None) transport = MockTransportHandler() firehose = MockTransportHandler() stack = Stack([]) span_storage = SpanStorage() tracer = MockTracer() context = tracer.zipkin_span( service_name="test_service", span_name="test_span", zipkin_attrs=zipkin_attrs, transport_handler=transport, max_span_batch_size=10, annotations={"test_annotation": 1}, binary_annotations={"status": "200"}, port=80, sample_rate=100.0, include=("cs", "cr"), add_logging_annotation=True, report_root_timestamp=True, use_128bit_trace_id=True, host="127.0.0.255", context_stack=stack, span_storage=span_storage, firehose_handler=firehose, kind=Kind.CLIENT, timestamp=1234, duration=10, encoding=Encoding.V2_JSON, ) assert context.service_name == "test_service" assert context.span_name == "test_span" assert context.zipkin_attrs_override == zipkin_attrs assert context.transport_handler == transport assert context.max_span_batch_size == 10 assert context.annotations == {"test_annotation": 1} assert context.binary_annotations == {"status": "200"} assert context.port == 80 assert context.sample_rate == 100.0 assert context.add_logging_annotation is True assert context.report_root_timestamp_override is True assert context.use_128bit_trace_id is True assert context.host == "127.0.0.255" assert context._context_stack == stack assert context._span_storage == span_storage assert context.firehose_handler == firehose assert mock_generate_kind.call_count == 1 assert mock_generate_kind.call_args == mock.call( context, Kind.CLIENT, ("cs", "cr"), ) assert context.timestamp == 1234 assert context.duration == 10 assert context.encoding == Encoding.V2_JSON assert context._tracer == tracer # Check for backward compatibility assert tracer.get_spans() == span_storage assert tracer.get_context() == stack
def test_set_thread_local_tracer(mock_tl): tracer = MockTracer() storage._set_thread_local_tracer(tracer) assert storage._get_thread_local_tracer() == tracer
def test_zipkin_logging_server_context_emit_spans(add_span_mock, flush_mock, time_mock, fake_endpoint): # This lengthy function tests that the logging context properly # logs both client and server spans. trace_id = '000000000000000f' parent_span_id = '0000000000000001' server_span_id = '0000000000000002' client_span_id = '0000000000000003' client_span_name = 'breadcrumbs' attr = ZipkinAttrs( trace_id=trace_id, span_id=server_span_id, parent_span_id=parent_span_id, flags=None, is_sampled=True, ) tracer = MockTracer() client_span = Span( trace_id=trace_id, name=client_span_name, parent_id=server_span_id, span_id=client_span_id, kind=Kind.CLIENT, timestamp=26.0, duration=4.0, local_endpoint=create_endpoint(service_name='test_server', ), annotations={ 'ann2': 2, 'cs': 26, 'cr': 30 }, tags={'bann2': 'yiss'}, ) tracer.get_spans().append(client_span) transport_handler = mock.Mock() context = logging_helper.ZipkinLoggingContext( zipkin_attrs=attr, endpoint=fake_endpoint, span_name='GET /foo', transport_handler=transport_handler, report_root_timestamp=True, get_tracer=lambda: tracer, service_name='test_server', encoding=Encoding.V1_JSON, ) context.start_timestamp = 24 context.response_status_code = 200 context.tags = {'k': 'v'} time_mock.return_value = 42 context.emit_spans() client_log_call, server_log_call = add_span_mock.call_args_list assert server_log_call[0][1].build_v1_span() == Span( trace_id=trace_id, name='GET /foo', parent_id=parent_span_id, span_id=server_span_id, kind=Kind.SERVER, timestamp=24.0, duration=18.0, local_endpoint=fake_endpoint, annotations={ 'sr': 24, 'ss': 42 }, tags={ 'k': 'v' }, ).build_v1_span() assert client_log_call[0][1] == client_span assert flush_mock.call_count == 1