Skip to content

Commit 2125597

Browse files
authored
Merge pull request #214 from FoamyGuy/local_test_server
use a local test server instead of httpbin
2 parents d72cfb9 + 9a4ae29 commit 2125597

File tree

2 files changed

+73
-17
lines changed

2 files changed

+73
-17
lines changed

tests/local_test_server.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# SPDX-FileCopyrightText: 2025 Tim Cocks
2+
#
3+
# SPDX-License-Identifier: MIT
4+
import json
5+
from http.server import SimpleHTTPRequestHandler
6+
7+
8+
class LocalTestServerHandler(SimpleHTTPRequestHandler):
9+
def do_GET(self):
10+
if self.path == "/get":
11+
resp_body = json.dumps({"url": "http://localhost:5000/get"}).encode("utf-8")
12+
self.send_response(200)
13+
self.send_header("Content-type", "application/json")
14+
self.send_header("Content-Length", str(len(resp_body)))
15+
self.end_headers()
16+
self.wfile.write(resp_body)
17+
if self.path.startswith("/status"):
18+
try:
19+
requested_status = int(self.path.split("/")[2])
20+
except ValueError:
21+
resp_body = json.dumps({"error": "requested status code must be int"}).encode(
22+
"utf-8"
23+
)
24+
self.send_response(400)
25+
self.send_header("Content-type", "application/json")
26+
self.send_header("Content-Length", str(len(resp_body)))
27+
self.end_headers()
28+
self.wfile.write(resp_body)
29+
return
30+
31+
if requested_status != 204:
32+
self.send_response(requested_status)
33+
self.send_header("Content-type", "text/html")
34+
self.send_header("Content-Length", "0")
35+
else:
36+
self.send_response(requested_status)
37+
self.send_header("Content-type", "text/html")
38+
self.end_headers()

tests/real_call_test.py

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,48 @@
55
"""Real call Tests"""
66

77
import socket
8+
import socketserver
89
import ssl
10+
import threading
11+
import time
912

1013
import adafruit_connection_manager
1114
import pytest
15+
from local_test_server import LocalTestServerHandler
1216

1317
import adafruit_requests
1418

1519

16-
@pytest.mark.parametrize(
17-
("path", "status_code", "text_result", "json_keys"),
18-
(
19-
("get", 200, None, {"url": "https://httpbin.org/get"}),
20+
def test_gets():
21+
path_index = 0
22+
status_code_index = 1
23+
text_result_index = 2
24+
json_keys_index = 3
25+
cases = [
26+
("get", 200, None, {"url": "http://localhost:5000/get"}),
2027
("status/200", 200, "", None),
2128
("status/204", 204, "", None),
22-
),
23-
)
24-
def test_gets(path, status_code, text_result, json_keys):
25-
requests = adafruit_requests.Session(socket, ssl.create_default_context())
26-
with requests.get(f"https://httpbin.org/{path}") as response:
27-
assert response.status_code == status_code
28-
if text_result is not None:
29-
assert response.text == text_result
30-
if json_keys is not None:
31-
for key, value in json_keys.items():
32-
assert response.json()[key] == value
33-
34-
adafruit_connection_manager.connection_manager_close_all(release_references=True)
29+
]
30+
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)

0 commit comments

Comments
 (0)