예제 #1
0
    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")
예제 #4
0
    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")
예제 #5
0
 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"},
     )
예제 #6
0
    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))