def test_custom_msgpack_encode(): encoder = MsgpackEncoder() refencoder = RefMsgpackEncoder() trace = gen_trace(nspans=50) # Note that we assert on the decoded versions because the encoded # can vary due to non-deterministic map key/value positioning assert decode(refencoder.encode_trace(trace)) == decode( encoder.encode_trace(trace)) ref_encoded = refencoder.encode_traces([trace, trace]) encoded = encoder.encode_traces([trace, trace]) assert decode(encoded) == decode(ref_encoded) # Empty trace (not that this should be done in practice) assert decode(refencoder.encode_trace([])) == decode( encoder.encode_trace([])) s = Span(None, None) # Need to .finish() to have a duration since the old implementation will not encode # duration_ns, the new one will encode as None s.finish() assert decode(refencoder.encode_trace([s])) == decode( encoder.encode_trace([s]))
def test_custom_msgpack_join_encoded(): encoder = MsgpackEncoder() refencoder = RefMsgpackEncoder() trace = gen_trace(nspans=50) ref = refencoder.join_encoded([refencoder.encode_trace(trace) for _ in range(10)]) custom = encoder.join_encoded([encoder.encode_trace(trace) for _ in range(10)]) assert decode(ref) == decode(custom) ref = refencoder.join_encoded([refencoder.encode_trace(trace) for _ in range(1)]) custom = encoder.join_encoded([encoder.encode_trace(trace) for _ in range(1)]) assert decode(ref) == decode(custom)
def test_join_encoded_msgpack(self): # test encoding for MsgPack format traces = [] traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) traces.append([ Span(name='client.testing', tracer=None), Span(name='client.testing', tracer=None), ]) encoder = MsgpackEncoder() # Encode each individual trace on it's own encoded_traces = [encoder.encode_trace(trace) for trace in traces] # Join the encoded traces together data = encoder.join_encoded(encoded_traces) # Parse the encoded data items = msgpack.unpackb(data) # test the encoded output that should be a string # and the output must be flatten assert isinstance(data, msgpack_type) assert len(items) == 2 assert len(items[0]) == 2 assert len(items[1]) == 2 for i in range(2): for j in range(2): assert b'client.testing' == items[i][j][b'name']
def test_msgpack_span_property_variations(span): refencoder = RefMsgpackEncoder() encoder = MsgpackEncoder() # Finish the span to ensure a duration exists. span.finish() trace = [span] assert decode(refencoder.encode_trace(trace)) == decode(encoder.encode_trace(trace))
def test_span_types(span, tags): refencoder = RefMsgpackEncoder() encoder = MsgpackEncoder() span.set_tags(tags) # Finish the span to ensure a duration exists. span.finish() trace = [span] assert decode(refencoder.encode_trace(trace)) == decode(encoder.encode_trace(trace))