Faster http tests

This commit is contained in:
John Doty 2024-07-19 08:33:54 -07:00
parent 1152ec3e36
commit abd70e2ad3

View file

@ -4,9 +4,25 @@ import http.server
import threading
import typing
import contextlib
import time
from cry import feed
TRACE_ELAPSED = False
@contextlib.contextmanager
def dumb_trace(name):
start = time.time()
if TRACE_ELAPSED:
print(f"{start:.3f} ENTER {name}")
yield
end = time.time()
elapsed = end - start
if TRACE_ELAPSED:
print(f"{end:.3f} EXIT {name} (elapsed: {elapsed:.3f}s")
@dataclasses.dataclass
class MockResponse:
@ -33,18 +49,22 @@ class TestWebServer:
handlers: dict[str, list[MockResponse]]
def __init__(self):
server = self
with dumb_trace("init"):
server = self
class TestWebHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
server._handle_GET(self)
class TestWebHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
server._handle_GET(self)
self.http_server = http.server.ThreadingHTTPServer(("", 0), TestWebHandler)
self.server_thread = threading.Thread(target=self.http_server.serve_forever)
self.server_thread.daemon = True
self.handlers = {}
self.http_server = http.server.ThreadingHTTPServer(("", 0), TestWebHandler)
self.server_thread = threading.Thread(target=self._do_serve)
self.server_thread.daemon = True
self.handlers = {}
self.server_port = self.http_server.server_port
self.server_port = self.http_server.server_port
def _do_serve(self):
self.http_server.serve_forever(poll_interval=0.01)
def make_url(self, path: str) -> str:
return f"http://localhost:{self.server_port}{path}"
@ -88,14 +108,16 @@ class TestWebServer:
response.write_to(handler)
def __enter__(self):
self.server_thread.start()
return self
with dumb_trace("__enter__"):
self.server_thread.start()
return self
def __exit__(self, exc_type, exc_value, traceback):
del exc_type
del exc_value
del traceback
self.http_server.shutdown()
with dumb_trace("__exit__"):
del exc_type
del exc_value
del traceback
self.http_server.shutdown()
TEST_FEED = b"""