def test_request_hook_params(self):
        def request_hook(span, request, headers, body):
            span.set_attribute("request_hook_headers", json.dumps(headers))
            span.set_attribute("request_hook_body", body)

        URLLib3Instrumentor().uninstrument()
        URLLib3Instrumentor().instrument(request_hook=request_hook, )

        headers = {"header1": "value1", "header2": "value2"}
        body = "param1=1&param2=2"

        pool = urllib3.HTTPConnectionPool("httpbin.org")
        response = pool.request("POST",
                                "/status/200",
                                body=body,
                                headers=headers)

        self.assertEqual(b"Hello!", response.data)

        span = self.assert_span()

        self.assertIn("request_hook_headers", span.attributes)
        self.assertEqual(span.attributes["request_hook_headers"],
                         json.dumps(headers))
        self.assertIn("request_hook_body", span.attributes)
        self.assertEqual(span.attributes["request_hook_body"], body)
Beispiel #2
0
    def test_uninstrument(self):
        URLLib3Instrumentor().uninstrument()

        response = self.perform_request(self.HTTP_URL)
        self.assertEqual(b"Hello!", response.data)
        self.assert_span(num_spans=0)
        # instrument again to avoid warning message on tearDown
        URLLib3Instrumentor().instrument()
Beispiel #3
0
    def test_url_filter(self):
        def url_filter(url):
            return url.split("?")[0]

        URLLib3Instrumentor().uninstrument()
        URLLib3Instrumentor().instrument(url_filter=url_filter)

        response = self.perform_request(self.HTTP_URL + "?e=mcc")
        self.assert_success_span(response, self.HTTP_URL)
Beispiel #4
0
    def test_custom_tracer_provider(self):
        tracer_provider, exporter = self.create_tracer_provider()
        tracer_provider = mock.Mock(wraps=tracer_provider)

        URLLib3Instrumentor().uninstrument()
        URLLib3Instrumentor().instrument(tracer_provider=tracer_provider)

        response = self.perform_request(self.HTTP_URL)
        self.assertEqual(b"Hello!", response.data)

        self.assert_span(exporter=exporter)
        self.assertEqual(1, tracer_provider.get_tracer.call_count)
Beispiel #5
0
    def setUp(self):
        super().setUp()
        URLLib3Instrumentor().instrument()

        httpretty.enable(allow_net_connect=False)
        httpretty.register_uri(httpretty.GET, self.HTTP_URL, body="Hello!")
        httpretty.register_uri(httpretty.GET, self.HTTPS_URL, body="Hello!")
Beispiel #6
0
    def test_span_name_callback(self):
        def span_name_callback(method, url, headers):
            self.assertEqual("GET", method)
            self.assertEqual(self.HTTP_URL, url)
            self.assertEqual({"key": "value"}, headers)

            return "test_span_name"

        URLLib3Instrumentor().uninstrument()
        URLLib3Instrumentor().instrument(span_name=span_name_callback)

        response = self.perform_request(self.HTTP_URL,
                                        headers={"key": "value"})
        self.assertEqual(b"Hello!", response.data)

        span = self.assert_span()
        self.assertEqual("test_span_name", span.name)
Beispiel #7
0
 def setUp(self):
     super().setUp()
     self.assert_ip = self.server.server_address[0]
     self.http_host = ":".join(map(str, self.server.server_address[:2]))
     self.http_url_base = "http://" + self.http_host
     self.http_url = self.http_url_base + "/status/200"
     HttpClientInstrumentor().instrument()
     URLLib3Instrumentor().instrument()
 def setUp(self):
     super().setUp()
     self.assert_ip = self.server.server_address[0]
     self.assert_port = self.server.server_address[1]
     self.http_host = ":".join(map(str, self.server.server_address[:2]))
     self.http_url_base = "http://" + self.http_host
     self.http_url = self.http_url_base + "/status/200"
     URLLib3Instrumentor().instrument(meter_provider=self.meter_provider)
Beispiel #9
0
    def test_span_name_callback_invalid(self):
        invalid_span_names = (None, 123, "")

        for span_name in invalid_span_names:
            self.memory_exporter.clear()

            # pylint: disable=unused-argument
            def span_name_callback(method, url, headers):
                return span_name  # pylint: disable=cell-var-from-loop

            URLLib3Instrumentor().uninstrument()
            URLLib3Instrumentor().instrument(span_name=span_name_callback)
            with self.subTest(span_name=span_name):
                response = self.perform_request(self.HTTP_URL)
                self.assertEqual(b"Hello!", response.data)

                span = self.assert_span()
                self.assertEqual("HTTP GET", span.name)
    def test_hooks(self):
        def request_hook(span, request):
            span.update_name("name set from hook")

        def response_hook(span, request, response):
            span.set_attribute("response_hook_attr", "value")

        URLLib3Instrumentor().uninstrument()
        URLLib3Instrumentor().instrument(request_hook=request_hook,
                                         response_hook=response_hook)
        response = self.perform_request(self.HTTP_URL)
        self.assertEqual(b"Hello!", response.data)

        span = self.assert_span()

        self.assertEqual(span.name, "name set from hook")
        self.assertIn("response_hook_attr", span.attributes)
        self.assertEqual(span.attributes["response_hook_attr"], "value")
    def test_metric_uninstrument(self):
        with urllib3.PoolManager() as pool:
            pool.request("GET", self.http_url)
            URLLib3Instrumentor().uninstrument()
            pool.request("GET", self.http_url)

            metrics_list = self.memory_metrics_reader.get_metrics_data()
            for resource_metric in metrics_list.resource_metrics:
                for scope_metric in resource_metric.scope_metrics:
                    for metric in scope_metric.metrics:
                        for point in list(metric.data.data_points):
                            self.assertEqual(point.count, 1)
Beispiel #12
0
    def tearDown(self):
        super().tearDown()
        URLLib3Instrumentor().uninstrument()

        httpretty.disable()
        httpretty.reset()
Beispiel #13
0
 def tearDown(self):
     super().tearDown()
     HttpClientInstrumentor().uninstrument()
     URLLib3Instrumentor().uninstrument()