def test_clear_correlations(self): self.assertEqual({}, cctx.get_correlations()) ctx = cctx.set_correlation("test", "value") self.assertEqual(cctx.get_correlation("test", context=ctx), "value") ctx = cctx.clear_correlations(context=ctx) self.assertEqual(cctx.get_correlations(context=ctx), {})
def test_propagation(self): traceparent_value = "00-{trace_id}-{span_id}-00".format( trace_id=format(self.TRACE_ID, "032x"), span_id=format(self.SPAN_ID, "016x"), ) tracestate_value = "foo=1,bar=2,baz=3" headers = { "otcorrelationcontext": ["key1=val1,key2=val2"], "traceparent": [traceparent_value], "tracestate": [tracestate_value], } ctx = extract(get_as_list, headers) correlations = correlationcontext.get_correlations(context=ctx) expected = {"key1": "val1", "key2": "val2"} self.assertEqual(correlations, expected) span_context = get_span_from_context(context=ctx).get_context() self.assertEqual(span_context.trace_id, self.TRACE_ID) self.assertEqual(span_context.span_id, self.SPAN_ID) span = trace.DefaultSpan(span_context) ctx = correlationcontext.set_correlation("key3", "val3") ctx = correlationcontext.set_correlation("key4", "val4", context=ctx) ctx = set_span_in_context(span, context=ctx) output = {} inject(dict.__setitem__, output, context=ctx) self.assertEqual(traceparent_value, output["traceparent"]) self.assertIn("key3=val3", output["otcorrelationcontext"]) self.assertIn("key4=val4", output["otcorrelationcontext"]) self.assertIn("foo=1", output["tracestate"]) self.assertIn("bar=2", output["tracestate"]) self.assertIn("baz=3", output["tracestate"])
def test_modifying_correlations(self): ctx = cctx.set_correlation("test", "value") self.assertEqual(cctx.get_correlation("test", context=ctx), "value") correlations = cctx.get_correlations(context=ctx) with self.assertRaises(TypeError): correlations["test"] = "mess-this-up" self.assertEqual(cctx.get_correlation("test", context=ctx), "value")
def test_remove_correlations(self): self.assertEqual({}, cctx.get_correlations()) ctx = cctx.set_correlation("test", "value") ctx = cctx.set_correlation("test2", "value2", context=ctx) ctx = cctx.remove_correlation("test", context=ctx) self.assertEqual(cctx.get_correlation("test", context=ctx), None) self.assertEqual(cctx.get_correlation("test2", context=ctx), "value2")
def test_set_multiple_correlations(self): ctx = cctx.set_correlation("test", "value") ctx = cctx.set_correlation("test2", "value2", context=ctx) self.assertEqual(cctx.get_correlation("test", context=ctx), "value") self.assertEqual(cctx.get_correlation("test2", context=ctx), "value2") self.assertEqual( cctx.get_correlations(context=ctx), {"test": "value", "test2": "value2"}, )
def inject( self, set_in_carrier: httptextformat.Setter[httptextformat.HTTPTextFormatT], carrier: httptextformat.HTTPTextFormatT, context: typing.Optional[Context] = None, ) -> None: """Injects CorrelationContext into the carrier. See `opentelemetry.trace.propagation.httptextformat.HTTPTextFormat.inject` """ correlations = correlationcontext.get_correlations(context=context) if not correlations: return correlation_context_string = _format_correlations(correlations) set_in_carrier( carrier, self._CORRELATION_CONTEXT_HEADER_NAME, correlation_context_string, )
def test_no_context_header(self): correlations = correlationcontext.get_correlations( self.propagator.extract(get_as_list, {})) self.assertEqual(correlations, {})
def _extract(self, header_value): """Test helper""" header = {"otcorrelationcontext": [header_value]} return correlationcontext.get_correlations( self.propagator.extract(get_as_list, header))