def test_context_to_readable_headers(self): for url_encoding in [False, True]: codec = TextCodec(url_encoding=url_encoding, trace_id_header='Trace_ID', baggage_header_prefix='Trace-Attr-') ctx = SpanContext(trace_id=256, span_id=127, parent_id=None, flags=1) carrier = {} codec.inject(ctx, carrier) assert carrier == {'trace-id': '100:7f:0:1'} ctx._baggage = { 'fry': 'Leela', 'bender': 'Countess de la Roca', } carrier = {} codec.inject(ctx, carrier) if url_encoding: assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess%20de%20la%20Roca', 'trace-attr-fry': 'Leela' } else: assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess de la Roca', 'trace-attr-fry': 'Leela' }
def test_context_to_readable_headers(self): for url_encoding in [False, True]: codec = TextCodec(url_encoding=url_encoding, trace_id_header='Trace_ID', baggage_header_prefix='Trace-Attr-') ctx = SpanContext(trace_id=256, span_id=127, parent_id=None, flags=1) carrier = {} codec.inject(ctx, carrier) assert carrier == {'trace-id': '100:7f:0:1'} ctx._baggage = { 'fry': u'Leela', 'bender': 'Countess de la Roca', b'key1': bytes(chr(255)), u'key2-caf\xe9': 'caf\xc3\xa9', u'key3': u'caf\xe9', 'key4-caf\xc3\xa9': 'value', } carrier = {} codec.inject(ctx, carrier) # NB: the reverse transformation is not exact, e.g. this fails: # assert ctx._baggage == codec.extract(carrier)._baggage # But fully supporting lossless Unicode baggage is not the goal. if url_encoding: assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess%20de%20la%20Roca', 'trace-attr-fry': 'Leela', 'trace-attr-key1': '%FF', 'trace-attr-key2-caf\xc3\xa9': 'caf%C3%A9', 'trace-attr-key3': 'caf%C3%A9', 'trace-attr-key4-caf\xc3\xa9': 'value', }, 'with url_encoding = %s' % url_encoding for key, val in six.iteritems(carrier): assert isinstance(key, str) or isinstance(key, newstr) assert isinstance(val, str) or isinstance( val, newstr), '%s' % type(val) else: assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess de la Roca', 'trace-attr-fry': 'Leela', 'trace-attr-key1': '\xff', u'trace-attr-key2-caf\xe9': 'caf\xc3\xa9', u'trace-attr-key3': u'caf\xe9', 'trace-attr-key4-caf\xc3\xa9': 'value', }, 'with url_encoding = %s' % url_encoding
def test_context_to_readable_headers(self): for url_encoding in [False, True]: codec = TextCodec( url_encoding=url_encoding, trace_id_header='Trace_ID', baggage_header_prefix='Trace-Attr-') ctx = SpanContext( trace_id=256, span_id=127, parent_id=None, flags=1 ) carrier = {} codec.inject(ctx, carrier) assert carrier == {'trace-id': '100:7f:0:1'} ctx._baggage = { 'bender': 'Countess de la Roca', 'fry': u'Leela', b'key1': bytes(chr(75)) if six.PY2 else bytes([75]), u'key2': 'cafe', u'key3': u'\U0001F47E', } carrier = {} codec.inject(ctx, carrier) # NB: the reverse transformation is not exact, e.g. this fails: # assert ctx._baggage == codec.extract(carrier)._baggage # But fully supporting lossless Unicode baggage is not the goal. if url_encoding: assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess%20de%20la%20Roca', 'trace-attr-fry': 'Leela', 'trace-attr-key1': 'K', 'trace-attr-key2': 'cafe', 'trace-attr-key3': '%F0%9F%91%BE', }, 'with url_encoding = %s' % url_encoding for key, val in six.iteritems(carrier): assert isinstance(key, str) assert isinstance(val, str), '%s' % type(val) else: assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess de la Roca', 'trace-attr-fry': 'Leela', 'trace-attr-key1': 'K', u'trace-attr-key2': 'cafe', 'trace-attr-key3': u'\U0001F47E', }, 'with url_encoding = %s' % url_encoding
def test_context_to_readable_headers(self): codec = TextCodec(trace_id_header='Trace_ID', baggage_header_prefix='Trace-Attr-') span = Span(trace_id=256, span_id=127, parent_id=None, flags=1, operation_name='x', tracer=None, start_time=1) carrier = {} codec.inject(span, carrier) assert carrier == {'trace-id': '100:7f:0:1'} span.set_baggage_item('Fry', 'Leela') span.set_baggage_item('Bender', 'Countess de la Roca') carrier = {} codec.inject(span, carrier) assert carrier == { 'trace-id': '100:7f:0:1', 'trace-attr-bender': 'Countess de la Roca', 'trace-attr-fry': 'Leela'}
def test_wrong_carrier(self): codec = TextCodec() with self.assertRaises(InvalidCarrierException): codec.inject(span_context={}, carrier=[]) # array is no good with self.assertRaises(InvalidCarrierException): codec.extract(carrier=[])