Skip to content

Commit 1479169

Browse files
authored
Merge pull request #217 from FoamyGuy/localize_more_tests
Localize more tests
2 parents f3610ea + a7ec3ba commit 1479169

File tree

3 files changed

+76
-24
lines changed

3 files changed

+76
-24
lines changed

tests/files_test.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import mocket
1212
import pytest
1313
import requests as python_requests
14+
from local_test_server import uses_local_server
1415

1516

1617
@pytest.fixture
@@ -20,7 +21,7 @@ def log_stream():
2021

2122
@pytest.fixture
2223
def post_url():
23-
return "https://httpbin.org/post"
24+
return "http://127.0.0.1:5000/post"
2425

2526

2627
@pytest.fixture
@@ -63,6 +64,7 @@ def get_actual_request_data(log_stream):
6364
return boundary, content_length, actual_request_post
6465

6566

67+
@uses_local_server
6668
def test_post_file_as_data( # pylint: disable=unused-argument
6769
requests, sock, log_stream, post_url, request_logging
6870
):
@@ -85,6 +87,7 @@ def test_post_file_as_data( # pylint: disable=unused-argument
8587
assert sent.endswith(actual_request_post)
8688

8789

90+
@uses_local_server
8891
def test_post_files_text( # pylint: disable=unused-argument
8992
sock, requests, log_stream, post_url, request_logging
9093
):
@@ -120,6 +123,7 @@ def test_post_files_text( # pylint: disable=unused-argument
120123
assert sent.endswith(actual_request_post)
121124

122125

126+
@uses_local_server
123127
def test_post_files_file( # pylint: disable=unused-argument
124128
sock, requests, log_stream, post_url, request_logging
125129
):
@@ -164,6 +168,7 @@ def test_post_files_file( # pylint: disable=unused-argument
164168
assert sent.endswith(actual_request_post)
165169

166170

171+
@uses_local_server
167172
def test_post_files_complex( # pylint: disable=unused-argument
168173
sock, requests, log_stream, post_url, request_logging
169174
):

tests/local_test_server.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,47 @@
11
# SPDX-FileCopyrightText: 2025 Tim Cocks
22
#
33
# SPDX-License-Identifier: MIT
4+
import functools
45
import json
6+
import socketserver
7+
import threading
8+
import time
59
from http.server import SimpleHTTPRequestHandler
610

711

12+
def uses_local_server(func):
13+
@functools.wraps(func)
14+
def wrapper(*args, **kwargs):
15+
with ReusableAddressTCPServer(("127.0.0.1", 5000), LocalTestServerHandler) as server:
16+
server_thread = threading.Thread(target=server.serve_forever)
17+
server_thread.daemon = True
18+
server_thread.start()
19+
time.sleep(2) # Give the server some time to start
20+
21+
result = func(*args, **kwargs)
22+
23+
server.shutdown()
24+
server.server_close()
25+
return result
26+
27+
return wrapper
28+
29+
30+
class ReusableAddressTCPServer(socketserver.TCPServer):
31+
# Enable SO_REUSEADDR
32+
allow_reuse_address = True
33+
34+
835
class LocalTestServerHandler(SimpleHTTPRequestHandler):
36+
def do_POST(self):
37+
if self.path == "/post":
38+
resp_body = json.dumps({"url": "http://localhost:5000/post"}).encode("utf-8")
39+
self.send_response(200)
40+
self.send_header("Content-type", "application/json")
41+
self.send_header("Content-Length", str(len(resp_body)))
42+
self.end_headers()
43+
self.wfile.write(resp_body)
44+
945
def do_GET(self):
1046
if self.path == "/get":
1147
resp_body = json.dumps({"url": "http://localhost:5000/get"}).encode("utf-8")

tests/real_call_test.py

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212

1313
import adafruit_connection_manager
1414
import pytest
15-
from local_test_server import LocalTestServerHandler
15+
from local_test_server import uses_local_server
1616

1717
import adafruit_requests
1818

1919

20+
@uses_local_server
2021
def test_gets():
2122
path_index = 0
2223
status_code_index = 1
@@ -28,25 +29,35 @@ def test_gets():
2829
("status/204", 204, "", None),
2930
]
3031

31-
with socketserver.TCPServer(("127.0.0.1", 5000), LocalTestServerHandler) as server:
32-
server_thread = threading.Thread(target=server.serve_forever)
33-
server_thread.daemon = True
34-
server_thread.start()
35-
36-
time.sleep(2) # Give the server some time to start
37-
38-
for case in cases:
39-
requests = adafruit_requests.Session(socket, ssl.create_default_context())
40-
with requests.get(f"http://127.0.0.1:5000/{case[path_index]}") as response:
41-
assert response.status_code == case[status_code_index]
42-
if case[text_result_index] is not None:
43-
assert response.text == case[text_result_index]
44-
if case[json_keys_index] is not None:
45-
for key, value in case[json_keys_index].items():
46-
assert response.json()[key] == value
47-
48-
adafruit_connection_manager.connection_manager_close_all(release_references=True)
49-
50-
server.shutdown()
51-
server.server_close()
52-
time.sleep(2)
32+
for case in cases:
33+
requests = adafruit_requests.Session(socket, ssl.create_default_context())
34+
with requests.get(f"http://127.0.0.1:5000/{case[path_index]}") as response:
35+
assert response.status_code == case[status_code_index]
36+
if case[text_result_index] is not None:
37+
assert response.text == case[text_result_index]
38+
if case[json_keys_index] is not None:
39+
for key, value in case[json_keys_index].items():
40+
assert response.json()[key] == value
41+
42+
adafruit_connection_manager.connection_manager_close_all(release_references=True)
43+
44+
45+
@pytest.mark.parametrize(
46+
("allow_redirects", "status_code"),
47+
(
48+
(True, 200),
49+
(False, 301),
50+
),
51+
)
52+
def test_http_to_https_redirect(allow_redirects, status_code):
53+
url = "http://www.adafruit.com/api/quotes.php"
54+
requests = adafruit_requests.Session(socket, ssl.create_default_context())
55+
with requests.get(url, allow_redirects=allow_redirects) as response:
56+
assert response.status_code == status_code
57+
58+
59+
def test_https_direct():
60+
url = "https://www.adafruit.com/api/quotes.php"
61+
requests = adafruit_requests.Session(socket, ssl.create_default_context())
62+
with requests.get(url) as response:
63+
assert response.status_code == 200

0 commit comments

Comments
 (0)