Faster http tests
This commit is contained in:
parent
1152ec3e36
commit
abd70e2ad3
1 changed files with 37 additions and 15 deletions
|
|
@ -4,9 +4,25 @@ import http.server
|
||||||
import threading
|
import threading
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
|
import contextlib
|
||||||
|
import time
|
||||||
|
|
||||||
from cry import feed
|
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
|
@dataclasses.dataclass
|
||||||
class MockResponse:
|
class MockResponse:
|
||||||
|
|
@ -33,18 +49,22 @@ class TestWebServer:
|
||||||
handlers: dict[str, list[MockResponse]]
|
handlers: dict[str, list[MockResponse]]
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
server = self
|
with dumb_trace("init"):
|
||||||
|
server = self
|
||||||
|
|
||||||
class TestWebHandler(http.server.BaseHTTPRequestHandler):
|
class TestWebHandler(http.server.BaseHTTPRequestHandler):
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
server._handle_GET(self)
|
server._handle_GET(self)
|
||||||
|
|
||||||
self.http_server = http.server.ThreadingHTTPServer(("", 0), TestWebHandler)
|
self.http_server = http.server.ThreadingHTTPServer(("", 0), TestWebHandler)
|
||||||
self.server_thread = threading.Thread(target=self.http_server.serve_forever)
|
self.server_thread = threading.Thread(target=self._do_serve)
|
||||||
self.server_thread.daemon = True
|
self.server_thread.daemon = True
|
||||||
self.handlers = {}
|
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:
|
def make_url(self, path: str) -> str:
|
||||||
return f"http://localhost:{self.server_port}{path}"
|
return f"http://localhost:{self.server_port}{path}"
|
||||||
|
|
@ -88,14 +108,16 @@ class TestWebServer:
|
||||||
response.write_to(handler)
|
response.write_to(handler)
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.server_thread.start()
|
with dumb_trace("__enter__"):
|
||||||
return self
|
self.server_thread.start()
|
||||||
|
return self
|
||||||
|
|
||||||
def __exit__(self, exc_type, exc_value, traceback):
|
def __exit__(self, exc_type, exc_value, traceback):
|
||||||
del exc_type
|
with dumb_trace("__exit__"):
|
||||||
del exc_value
|
del exc_type
|
||||||
del traceback
|
del exc_value
|
||||||
self.http_server.shutdown()
|
del traceback
|
||||||
|
self.http_server.shutdown()
|
||||||
|
|
||||||
|
|
||||||
TEST_FEED = b"""
|
TEST_FEED = b"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue