def test_no_span_but_in_trace(self):
     with ContextHelper():
         tracer = tracer_module.Tracer(sampler=AlwaysOnSampler())
         wrapped_span = OpenCensusSpan()
         assert wrapped_span.span_instance.name == "span"
         assert wrapped_span.span_instance.context_tracer.trace_id == tracer.span_context.trace_id
         wrapped_span.finish()
         tracer.finish()
 def test_no_span_passed_in_with_no_environ(self):
     with ContextHelper() as ctx:
         tracer = OpenCensusSpan.get_current_tracer()
         wrapped_span = OpenCensusSpan()
         assert wrapped_span.span_instance.name == "span"
         assert wrapped_span.span_instance.context_tracer.span_context.trace_id == tracer.span_context.trace_id
         assert ctx.orig_tracer == tracer
         wrapped_span.finish()
 def test_add_attribute(self):
     with ContextHelper() as ctx:
         trace = tracer_module.Tracer(sampler=AlwaysOnSampler())
         parent = trace.start_span()
         wrapped_class = OpenCensusSpan(span=parent)
         wrapped_class.add_attribute("test", "test2")
         assert wrapped_class.span_instance.attributes["test"] == "test2"
         assert parent.attributes["test"] == "test2"
Esempio n. 4
0
def test_distributed_tracing_policy_with_user_agent():
    """Test policy working with user agent."""
    with ContextHelper(environ={"AZURE_HTTP_USER_AGENT": "mytools"}):
        exporter = MockExporter()
        trace = tracer_module.Tracer(sampler=AlwaysOnSampler(), exporter=exporter)
        with trace.span("parent"):
            tracing_context.current_span.set(OpenCensusSpan(trace.current_span()))
            policy = DistributedTracingPolicy()

            request = HttpRequest("GET", "http://127.0.0.1")
            request.headers["x-ms-client-request-id"] = "some client request id"

            pipeline_request = PipelineRequest(request, PipelineContext(None))

            user_agent = UserAgentPolicy()
            user_agent.on_request(pipeline_request)
            policy.on_request(pipeline_request)

            response = HttpResponse(request, None)
            response.headers = request.headers
            response.status_code = 202
            response.headers["x-ms-request-id"] = "some request id"
            pipeline_response = PipelineResponse(request, response, PipelineContext(None))

            ctx = trace.span_context
            header = trace.propagator.to_headers(ctx)
            assert request.headers.get("traceparent") == header.get("traceparent")

            policy.on_response(pipeline_request, pipeline_response)

            time.sleep(0.001)
            policy.on_request(pipeline_request)
            policy.on_exception(pipeline_request)

            user_agent.on_response(pipeline_request, pipeline_response)

        trace.finish()
        exporter.build_tree()
        parent = exporter.root
        network_span = parent.children[0]
        assert network_span.span_data.name == "/"
        assert network_span.span_data.attributes.get("http.method") == "GET"
        assert network_span.span_data.attributes.get("component") == "http"
        assert network_span.span_data.attributes.get("http.url") == "http://127.0.0.1"
        assert network_span.span_data.attributes.get("http.user_agent").endswith("mytools")
        assert network_span.span_data.attributes.get("x-ms-request-id") == "some request id"
        assert network_span.span_data.attributes.get("x-ms-client-request-id") == "some client request id"
        assert network_span.span_data.attributes.get("http.status_code") == 202

        network_span = parent.children[1]
        assert network_span.span_data.name == "/"
        assert network_span.span_data.attributes.get("http.method") == "GET"
        assert network_span.span_data.attributes.get("component") == "http"
        assert network_span.span_data.attributes.get("http.url") == "http://127.0.0.1"
        assert network_span.span_data.attributes.get("http.user_agent").endswith("mytools")
        assert network_span.span_data.attributes.get("x-ms-client-request-id") == "some client request id"
        assert network_span.span_data.attributes.get("x-ms-request-id") is None
        assert network_span.span_data.attributes.get("http.status_code") == 504
Esempio n. 5
0
 def test_span_passed_in(self):
     with ContextHelper():
         tracer = tracer_module.Tracer(sampler=AlwaysOnSampler())
         with tracer.start_span(name="parent") as parent:
             wrapped_span = OpenCensusSpan(parent)
         assert wrapped_span.span_instance.name == "parent"
         assert wrapped_span.span_instance.context_tracer.trace_id == tracer.span_context.trace_id
         wrapped_span.finish()
         tracer.finish()
Esempio n. 6
0
def test_distributed_tracing_policy_solo():
    """Test policy with no other policy and happy path"""
    with ContextHelper():
        exporter = MockExporter()
        trace = tracer_module.Tracer(sampler=AlwaysOnSampler(),
                                     exporter=exporter)
        with trace.span("parent"):
            tracing_context.current_span.set(
                OpenCensusSpan(trace.current_span()))
            policy = DistributedTracingPolicy()

            request = HttpRequest("GET", "http://127.0.0.1/temp?query=query")

            pipeline_request = PipelineRequest(request, PipelineContext(None))
            policy.on_request(pipeline_request)

            response = HttpResponse(request, None)
            response.headers = request.headers
            response.status_code = 202
            response.headers["x-ms-request-id"] = "some request id"

            ctx = trace.span_context
            header = trace.propagator.to_headers(ctx)
            assert request.headers.get("traceparent") == header.get(
                "traceparent")

            policy.on_response(
                pipeline_request,
                PipelineResponse(request, response, PipelineContext(None)))
            time.sleep(0.001)
            policy.on_request(pipeline_request)
            policy.on_exception(pipeline_request)

        trace.finish()
        exporter.build_tree()
        parent = exporter.root
        network_span = parent.children[0]
        assert network_span.span_data.name == "/temp"
        assert network_span.span_data.attributes.get("http.method") == "GET"
        assert network_span.span_data.attributes.get("component") == "http"
        assert network_span.span_data.attributes.get(
            "http.url") == "http://127.0.0.1/temp?query=query"
        assert network_span.span_data.attributes.get("http.user_agent") is None
        assert network_span.span_data.attributes.get(
            "x-ms-request-id") == "some request id"
        assert network_span.span_data.attributes.get("http.status_code") == 202

        network_span = parent.children[1]
        assert network_span.span_data.name == "/temp"
        assert network_span.span_data.attributes.get("http.method") == "GET"
        assert network_span.span_data.attributes.get("component") == "http"
        assert network_span.span_data.attributes.get(
            "http.url") == "http://127.0.0.1/temp?query=query"
        assert network_span.span_data.attributes.get("http.user_agent") is None
        assert network_span.span_data.attributes.get("x-ms-request-id") == None
        assert network_span.span_data.attributes.get("http.status_code") == 504
Esempio n. 7
0
 def test_links(self):
     with ContextHelper() as ctx:
         trace = tracer_module.Tracer(sampler=AlwaysOnSampler())
         og_header = {"traceparent": "00-2578531519ed94423ceae67588eff2c9-231ebdc614cb9ddd-01"}
         wrapped_class = OpenCensusSpan()
         OpenCensusSpan.link_from_headers(og_header)
         assert len(wrapped_class.span_instance.links) == 1
         link = wrapped_class.span_instance.links[0]
         assert link.trace_id == "2578531519ed94423ceae67588eff2c9"
         assert link.span_id == "231ebdc614cb9ddd"
Esempio n. 8
0
 def test_set_span_context(self):
     with ContextHelper(environ={"AZURE_SDK_TRACING_IMPLEMENTATION": "opencensus"}):
         wrapper = settings.tracing_implementation()
         assert wrapper is OpenCensusSpan
         assert tracing_context.current_span.get() is None
         assert wrapper.get_current_span() is None
         parent = OpenCensusSpan()
         common.set_span_contexts(parent)
         assert parent.span_instance == wrapper.get_current_span()
         assert tracing_context.current_span.get() == parent
Esempio n. 9
0
 def test_to_header(self):
     with ContextHelper() as ctx:
         og_header = {"traceparent": "00-2578531519ed94423ceae67588eff2c9-231ebdc614cb9ddd-01"}
         ctx = tracer_module.trace_context_http_header_format.TraceContextPropagator().from_headers(og_header)
         trace = tracer_module.Tracer(sampler=AlwaysOnSampler(), span_context=ctx)
         wrapped_class = OpenCensusSpan()
         headers = wrapped_class.to_header()
         new_header = {
             "traceparent": "00-2578531519ed94423ceae67588eff2c9-{}-01".format(wrapped_class.span_instance.span_id)
         }
         assert headers == new_header
Esempio n. 10
0
 def test_start_finish(self):
     with ContextHelper() as ctx:
         tracer = tracer_module.Tracer(sampler=AlwaysOnSampler())
         parent = OpenCensusSpan()
         wrapped_class = parent.span()
         assert wrapped_class.span_instance.end_time is None
         wrapped_class.start()
         wrapped_class.finish()
         assert wrapped_class.span_instance.start_time is not None
         assert wrapped_class.span_instance.end_time is not None
         parent.finish()
 def test_passing_links_in_ctor(self):
     with ContextHelper() as ctx:
         trace = tracer_module.Tracer(sampler=AlwaysOnSampler())
         parent = trace.start_span()
         wrapped_class = OpenCensusSpan(links=[
             Link(
                 headers={
                     "traceparent":
                     "00-2578531519ed94423ceae67588eff2c9-231ebdc614cb9ddd-01"
                 })
         ])
         assert len(wrapped_class.span_instance.links) == 1
         link = wrapped_class.span_instance.links[0]
         assert link.trace_id == "2578531519ed94423ceae67588eff2c9"
         assert link.span_id == "231ebdc614cb9ddd"
Esempio n. 12
0
 def test_span(self):
     exporter = MockExporter()
     with ContextHelper() as ctx:
         tracer = tracer_module.Tracer(sampler=AlwaysOnSampler(), exporter=exporter)
         assert OpenCensusSpan.get_current_tracer() is tracer
         wrapped_class = OpenCensusSpan()
         assert tracer.current_span() == wrapped_class.span_instance
         child = wrapped_class.span()
         assert tracer.current_span() == child.span_instance
         assert child.span_instance.name == "span"
         assert child.span_instance.context_tracer.trace_id == tracer.span_context.trace_id
         assert child.span_instance.parent_span is wrapped_class.span_instance
         tracer.finish()
     exporter.build_tree()
     parent = exporter.root
     assert len(parent.children) == 1
     assert parent.children[0].span_data.span_id == child.span_instance.span_id
Esempio n. 13
0
 def test_set_http_attributes(self):
     with ContextHelper():
         trace = tracer_module.Tracer(sampler=AlwaysOnSampler())
         parent = trace.start_span()
         wrapped_class = OpenCensusSpan(span=parent)
         request = mock.Mock()
         setattr(request, "method", "GET")
         setattr(request, "url", "some url")
         response = mock.Mock()
         setattr(request, "headers", {})
         setattr(response, "status_code", 200)
         wrapped_class.set_http_attributes(request)
         assert wrapped_class.span_instance.span_kind == OpenCensusSpanKind.CLIENT
         assert wrapped_class.span_instance.attributes.get("http.method") == request.method
         assert wrapped_class.span_instance.attributes.get("component") == "http"
         assert wrapped_class.span_instance.attributes.get("http.url") == request.url
         assert wrapped_class.span_instance.attributes.get("http.status_code") == 504
         assert wrapped_class.span_instance.attributes.get("http.user_agent") is None
         request.headers["User-Agent"] = "some user agent"
         wrapped_class.set_http_attributes(request, response)
         assert wrapped_class.span_instance.attributes.get("http.status_code") == response.status_code
         assert wrapped_class.span_instance.attributes.get("http.user_agent") == request.headers.get("User-Agent")
 def test_passing_kind_in_ctor(self):
     with ContextHelper() as ctx:
         trace = tracer_module.Tracer(sampler=AlwaysOnSampler())
         parent = trace.start_span()
         wrapped_class = OpenCensusSpan(kind=SpanKind.CLIENT)
         assert wrapped_class.kind == SpanKind.CLIENT