Skip to content

Commit 83ade93

Browse files
committed
opentelemetry-instrumentation-urllib: move from httpretty to mocker
1 parent d2f396d commit 83ade93

3 files changed

Lines changed: 77 additions & 60 deletions

File tree

instrumentation/opentelemetry-instrumentation-urllib/test-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
asgiref==3.8.1
22
Deprecated==1.2.14
3-
httpretty==1.1.4
3+
mocket==3.14.1
44
iniconfig==2.0.0
55
packaging==24.0
66
pluggy==1.6.0

instrumentation/opentelemetry-instrumentation-urllib/tests/test_metrics_instrumentation.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
from urllib import request
99
from urllib.parse import urlencode
1010

11-
import httpretty
11+
from mocket import Mocketizer
12+
from mocket.mocks.mockhttp import Entry
1213
from pytest import mark
1314

1415
from opentelemetry.instrumentation._semconv import (
@@ -56,16 +57,15 @@ def setUp(self):
5657
_OpenTelemetrySemanticConventionStability._initialized = False
5758
self.env_patch.start()
5859
URLLibInstrumentor().instrument()
59-
httpretty.enable()
60-
httpretty.register_uri(httpretty.GET, self.URL, body=b"Hello!")
61-
httpretty.register_uri(
62-
httpretty.POST, self.URL_POST, body=b"Hello World!"
63-
)
60+
self.mocketizer = Mocketizer(strict_mode=True)
61+
self.mocketizer.enter()
62+
Entry.single_register(Entry.GET, self.URL, body=b"Hello!")
63+
Entry.single_register(Entry.POST, self.URL_POST, body=b"Hello World!")
6464

6565
def tearDown(self):
6666
super().tearDown()
6767
URLLibInstrumentor().uninstrument()
68-
httpretty.disable()
68+
self.mocketizer.exit()
6969

7070
# Return Sequence with one histogram
7171
def create_histogram_data_points(

instrumentation/opentelemetry-instrumentation-urllib/tests/test_urllib_integration.py

Lines changed: 69 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
from urllib.error import HTTPError
1313
from urllib.request import OpenerDirector
1414

15-
import httpretty
15+
from mocket import Mocket, Mocketizer
16+
from mocket.mocks.mockhttp import Entry
1617

1718
import opentelemetry.instrumentation.urllib # pylint: disable=no-name-in-module,import-error
1819
from opentelemetry import trace
@@ -85,20 +86,21 @@ def setUp(self):
8586
self.exclude_patch.start()
8687

8788
URLLibInstrumentor().instrument()
88-
httpretty.enable()
89-
httpretty.register_uri(httpretty.GET, self.URL, body=b"Hello!")
90-
httpretty.register_uri(
91-
httpretty.GET,
89+
self.mocketizer = Mocketizer(strict_mode=True)
90+
self.mocketizer.enter()
91+
Entry.single_register(Entry.GET, self.URL, body=b"Hello!")
92+
Entry.single_register(
93+
Entry.GET,
9294
self.URL_TIMEOUT,
93-
body=self.timeout_exception_callback,
95+
exception=socket.timeout(),
9496
)
95-
httpretty.register_uri(
96-
httpretty.GET,
97+
Entry.single_register(
98+
Entry.GET,
9799
self.URL_EXCEPTION,
98-
body=self.base_exception_callback,
100+
exception=Exception("test"), # pylint: disable=broad-exception-raised
99101
)
100-
httpretty.register_uri(
101-
httpretty.GET,
102+
Entry.single_register(
103+
Entry.GET,
102104
"http://mock/status/500",
103105
status=500,
104106
)
@@ -107,15 +109,7 @@ def setUp(self):
107109
def tearDown(self):
108110
super().tearDown()
109111
URLLibInstrumentor().uninstrument()
110-
httpretty.disable()
111-
112-
@staticmethod
113-
def timeout_exception_callback(*_, **__):
114-
raise socket.timeout
115-
116-
@staticmethod
117-
def base_exception_callback(*_, **__):
118-
raise Exception("test") # pylint: disable=broad-exception-raised
112+
self.mocketizer.exit()
119113

120114
def assert_span(self, exporter=None, num_spans=1):
121115
if exporter is None:
@@ -214,8 +208,8 @@ def test_basic_both_semconv(self):
214208

215209
def test_excluded_urls_explicit(self):
216210
url_201 = "http://mock/status/201"
217-
httpretty.register_uri(
218-
httpretty.GET,
211+
Entry.single_register(
212+
Entry.GET,
219213
url_201,
220214
status=201,
221215
)
@@ -229,8 +223,8 @@ def test_excluded_urls_explicit(self):
229223

230224
def test_excluded_urls_from_env(self):
231225
url = "http://localhost/env_excluded_arg/123"
232-
httpretty.register_uri(
233-
httpretty.GET,
226+
Entry.single_register(
227+
Entry.GET,
234228
url,
235229
status=200,
236230
)
@@ -244,8 +238,8 @@ def test_excluded_urls_from_env(self):
244238

245239
def test_not_foundbasic(self):
246240
url_404 = "http://mock/status/404/"
247-
httpretty.register_uri(
248-
httpretty.GET,
241+
Entry.single_register(
242+
Entry.GET,
249243
url_404,
250244
status=404,
251245
)
@@ -268,8 +262,8 @@ def test_not_foundbasic(self):
268262

269263
def test_not_foundbasic_new_semconv(self):
270264
url_404 = "http://mock/status/404/"
271-
httpretty.register_uri(
272-
httpretty.GET,
265+
Entry.single_register(
266+
Entry.GET,
273267
url_404,
274268
status=404,
275269
)
@@ -292,8 +286,8 @@ def test_not_foundbasic_new_semconv(self):
292286

293287
def test_not_foundbasic_both_semconv(self):
294288
url_404 = "http://mock/status/404/"
295-
httpretty.register_uri(
296-
httpretty.GET,
289+
Entry.single_register(
290+
Entry.GET,
297291
url_404,
298292
status=404,
299293
)
@@ -410,7 +404,7 @@ def test_distributed_context(self):
410404

411405
span = self.assert_span()
412406

413-
headers_ = dict(httpretty.last_request().headers)
407+
headers_ = dict(Mocket.last_request().headers)
414408
headers = {}
415409
for k, v in headers_.items():
416410
headers[k.lower()] = v
@@ -510,6 +504,8 @@ def test_requests_timeout_exception(self, *_, **__):
510504
def test_remove_sensitive_params(self):
511505
url = "http://username:password@mock/status/200"
512506

507+
Mocket.reset()
508+
Entry.single_register(Entry.GET, url, exception=Exception("test"))
513509
with self.assertRaises(Exception):
514510
self.perform_request(url)
515511

@@ -558,9 +554,12 @@ def test_custom_response_headers_captured(self):
558554
"X-Custom-Header": "custom-value",
559555
"X-Another-Header": "another-value",
560556
}
561-
url = "http://mock//capture_headers"
562-
httpretty.register_uri(
563-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
557+
url = "http://mock/capture_headers"
558+
Entry.single_register(
559+
Entry.GET,
560+
url,
561+
body="Hello!",
562+
headers=response_headers,
564563
)
565564
self.perform_request(url)
566565

@@ -613,9 +612,12 @@ def test_sensitive_headers_sanitized(self):
613612
"Set-Cookie": "session=abc123",
614613
"X-Secret": "secret",
615614
}
616-
url = "http://mock//capture_headers"
617-
httpretty.register_uri(
618-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
615+
url = "http://mock/capture_headers"
616+
Entry.single_register(
617+
Entry.GET,
618+
url,
619+
body="Hello!",
620+
headers=response_headers,
619621
)
620622
self.perform_request(
621623
url,
@@ -656,9 +658,12 @@ def test_custom_headers_with_regex(self):
656658
"X-Custom-Response-B": "value-B",
657659
"X-Other-Response-Header": "other-value",
658660
}
659-
url = "http://mock//capture_headers"
660-
httpretty.register_uri(
661-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
661+
url = "http://mock/capture_headers"
662+
Entry.single_register(
663+
Entry.GET,
664+
url,
665+
body="Hello!",
666+
headers=response_headers,
662667
)
663668
self.perform_request(
664669
url,
@@ -702,9 +707,12 @@ def test_custom_headers_case_insensitive(self):
702707
)
703708

704709
response_headers = {"X-ReSPoNse-HeaDER": "custom-value"}
705-
url = "http://mock//capture_headers"
706-
httpretty.register_uri(
707-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
710+
url = "http://mock/capture_headers"
711+
Entry.single_register(
712+
Entry.GET,
713+
url,
714+
body="Hello!",
715+
headers=response_headers,
708716
)
709717
self.perform_request(
710718
url,
@@ -733,9 +741,12 @@ def test_standard_http_headers_captured(self):
733741
"Content-Type": "text/plain",
734742
"Server": "TestServer/1.0",
735743
}
736-
url = "http://mock//capture_headers"
737-
httpretty.register_uri(
738-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
744+
url = "http://mock/capture_headers"
745+
Entry.single_register(
746+
Entry.GET,
747+
url,
748+
body="Hello!",
749+
headers=response_headers,
739750
)
740751
self.perform_request(
741752
url,
@@ -801,9 +812,12 @@ def test_capture_all_response_headers(self):
801812
"X-Response-Two": "value2",
802813
"X-Response-Three": "value3",
803814
}
804-
url = "http://mock//capture_headers"
805-
httpretty.register_uri(
806-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
815+
url = "http://mock/capture_headers"
816+
Entry.single_register(
817+
Entry.GET,
818+
url,
819+
body="Hello!",
820+
headers=response_headers,
807821
)
808822
self.perform_request(url)
809823

@@ -863,9 +877,12 @@ def test_capture_and_sanitize_environment_variables(self):
863877
"X-Response-One": "value1",
864878
"X-Response-Two": "value2",
865879
}
866-
url = "http://mock//capture_headers"
867-
httpretty.register_uri(
868-
httpretty.GET, url, body="Hello!", adding_headers=response_headers
880+
url = "http://mock/capture_headers"
881+
Entry.single_register(
882+
Entry.GET,
883+
url,
884+
body="Hello!",
885+
headers=response_headers,
869886
)
870887
self.perform_request(
871888
url, headers=[("x-request-one", "one"), ("x-request-two", "two")]

0 commit comments

Comments
 (0)