diff --git a/tests/test_feed.py b/tests/test_feed.py index 84a1bdc..c3c877a 100644 --- a/tests/test_feed.py +++ b/tests/test_feed.py @@ -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"""