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¶m2=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)
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()
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)
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)
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!")
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)
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)
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)
def tearDown(self): super().tearDown() URLLib3Instrumentor().uninstrument() httpretty.disable() httpretty.reset()
def tearDown(self): super().tearDown() HttpClientInstrumentor().uninstrument() URLLib3Instrumentor().uninstrument()