Skip to content

Commit 2c8d277

Browse files
authored
Start a real http server instead of mocking libs (#1938)
* Start a real http server instead of mocking libs
1 parent dad343e commit 2c8d277

File tree

2 files changed

+57
-18
lines changed

2 files changed

+57
-18
lines changed

tests/conftest.py

+41-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import os
21
import json
2+
import os
3+
import socket
4+
from threading import Thread
35

46
import pytest
57
import jsonschema
@@ -14,6 +16,17 @@
1416
except ImportError:
1517
eventlet = None
1618

19+
try:
20+
# Python 2
21+
import BaseHTTPServer
22+
23+
HTTPServer = BaseHTTPServer.HTTPServer
24+
BaseHTTPRequestHandler = BaseHTTPServer.BaseHTTPRequestHandler
25+
except Exception:
26+
# Python 3
27+
from http.server import BaseHTTPRequestHandler, HTTPServer
28+
29+
1730
import sentry_sdk
1831
from sentry_sdk._compat import iteritems, reraise, string_types
1932
from sentry_sdk.envelope import Envelope
@@ -561,3 +574,30 @@ def __ne__(self, test_obj):
561574
def teardown_profiling():
562575
yield
563576
teardown_profiler()
577+
578+
579+
class MockServerRequestHandler(BaseHTTPRequestHandler):
580+
def do_GET(self): # noqa: N802
581+
# Process an HTTP GET request and return a response with an HTTP 200 status.
582+
self.send_response(200)
583+
self.end_headers()
584+
return
585+
586+
587+
def get_free_port():
588+
s = socket.socket(socket.AF_INET, type=socket.SOCK_STREAM)
589+
s.bind(("localhost", 0))
590+
_, port = s.getsockname()
591+
s.close()
592+
return port
593+
594+
595+
def create_mock_http_server():
596+
# Start a mock server to test outgoing http requests
597+
mock_server_port = get_free_port()
598+
mock_server = HTTPServer(("localhost", mock_server_port), MockServerRequestHandler)
599+
mock_server_thread = Thread(target=mock_server.serve_forever)
600+
mock_server_thread.setDaemon(True)
601+
mock_server_thread.start()
602+
603+
return mock_server_port

tests/integrations/stdlib/test_httplib.py

+16-17
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import platform
2-
import sys
32
import random
4-
import responses
5-
import pytest
3+
import sys
64

7-
from sentry_sdk.consts import MATCH_ALL
5+
import pytest
86

97
try:
108
# py3
@@ -25,25 +23,29 @@
2523
except ImportError:
2624
import mock # python < 3.3
2725

26+
2827
from sentry_sdk import capture_message, start_transaction
28+
from sentry_sdk.consts import MATCH_ALL
2929
from sentry_sdk.tracing import Transaction
3030
from sentry_sdk.integrations.stdlib import StdlibIntegration
3131

32+
from tests.conftest import create_mock_http_server
3233

33-
def test_crumb_capture(sentry_init, capture_events):
34-
sentry_init(integrations=[StdlibIntegration()])
34+
PORT = create_mock_http_server()
3535

36-
url = "http://example.com/"
37-
responses.add(responses.GET, url, status=200)
3836

37+
def test_crumb_capture(sentry_init, capture_events):
38+
sentry_init(integrations=[StdlibIntegration()])
3939
events = capture_events()
4040

41-
response = urlopen(url)
42-
assert response.getcode() == 200
41+
url = "http://localhost:{}/some/random/url".format(PORT)
42+
urlopen(url)
43+
4344
capture_message("Testing!")
4445

4546
(event,) = events
4647
(crumb,) = event["breadcrumbs"]["values"]
48+
4749
assert crumb["type"] == "http"
4850
assert crumb["category"] == "httplib"
4951
assert crumb["data"] == {
@@ -62,14 +64,11 @@ def before_breadcrumb(crumb, hint):
6264
return crumb
6365

6466
sentry_init(integrations=[StdlibIntegration()], before_breadcrumb=before_breadcrumb)
65-
66-
url = "http://example.com/"
67-
responses.add(responses.GET, url, status=200)
68-
6967
events = capture_events()
7068

69+
url = "http://localhost:{}/some/random/url".format(PORT)
7170
response = urlopen(url)
72-
assert response.getcode() == 200
71+
7372
capture_message("Testing!")
7473

7574
(event,) = events
@@ -113,7 +112,7 @@ def test_httplib_misuse(sentry_init, capture_events, request):
113112
sentry_init()
114113
events = capture_events()
115114

116-
conn = HTTPSConnection("httpstat.us", 443)
115+
conn = HTTPConnection("localhost", PORT)
117116

118117
# make sure we release the resource, even if the test fails
119118
request.addfinalizer(conn.close)
@@ -138,7 +137,7 @@ def test_httplib_misuse(sentry_init, capture_events, request):
138137
assert crumb["type"] == "http"
139138
assert crumb["category"] == "httplib"
140139
assert crumb["data"] == {
141-
"url": "https://httpstat.us/200",
140+
"url": "http://localhost:{}/200".format(PORT),
142141
"method": "GET",
143142
"status_code": 200,
144143
"reason": "OK",

0 commit comments

Comments
 (0)