Pytest suite with a tiny_client fixture, an ephemeral Ed25519 keypair fixture, and a threaded HTTPServer helper. Exercises cli dispatch, inspect (including excluded-path handling), build-manifest and sign against the real m2dev-client scripts, diff-remote via a local server, and the full release publish composite against a local rsync target.
30 lines
935 B
Python
30 lines
935 B
Python
"""Minimal threaded HTTP server for diff-remote / verify-public tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import contextlib
|
|
import threading
|
|
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
|
|
from pathlib import Path
|
|
from typing import Iterator
|
|
|
|
|
|
class _Handler(SimpleHTTPRequestHandler):
|
|
def log_message(self, format, *args): # noqa: A002
|
|
pass # silence
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def serve_dir(root: Path) -> Iterator[str]:
|
|
"""Serve `root` on 127.0.0.1:<free port>, yield the base URL."""
|
|
handler = lambda *a, **kw: _Handler(*a, directory=str(root), **kw) # noqa: E731
|
|
server = ThreadingHTTPServer(("127.0.0.1", 0), handler)
|
|
thread = threading.Thread(target=server.serve_forever, daemon=True)
|
|
thread.start()
|
|
try:
|
|
yield f"http://127.0.0.1:{server.server_port}"
|
|
finally:
|
|
server.shutdown()
|
|
server.server_close()
|
|
thread.join(timeout=2)
|