From f8de8247524bd432fb38f8a08c927c75fa47bedb Mon Sep 17 00:00:00 2001 From: ares Date: Sat, 12 Sep 2026 15:30:50 +0300 Subject: [PATCH] Avoid reverse DNS delays in CI TLS fixture --- tools/tls_fixture.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tools/tls_fixture.py b/tools/tls_fixture.py index 11293c9..f929abe 100644 --- a/tools/tls_fixture.py +++ b/tools/tls_fixture.py @@ -6,6 +6,7 @@ import ipaddress import json import pathlib import socket +import socketserver import ssl import struct import subprocess @@ -36,6 +37,8 @@ state = json.loads((root / "MusicBridgeTests/state-v1.json").read_text()) class Handler(http.server.BaseHTTPRequestHandler): + protocol_version = "HTTP/1.1" + def do_GET(self): if self.path == "/v1/events": accept = base64.b64encode(hashlib.sha1( @@ -58,17 +61,25 @@ class Handler(http.server.BaseHTTPRequestHandler): fixtures = {} +class Server(http.server.ThreadingHTTPServer): + def server_bind(self): + # HTTPServer's reverse DNS lookup can stall on hosted runner addresses. + socketserver.TCPServer.server_bind(self) + self.server_name, self.server_port = self.server_address + + for name, days in (("valid", "1825"), ("expired", "-1")): + print(f"Generating {name} certificate for {address}", flush=True) key, csr, cert = (work / (name + suffix) for suffix in (".key", ".csr", ".pem")) subprocess.run(["openssl", "req", "-new", "-newkey", "rsa:2048", "-nodes", "-config", str(config), - "-keyout", str(key), "-out", str(csr)], check=True, capture_output=True) + "-keyout", str(key), "-out", str(csr)], check=True, capture_output=True, timeout=15) subprocess.run(["openssl", "x509", "-req", "-in", str(csr), "-signkey", str(key), "-sha256", "-days", days, "-extfile", str(config), "-extensions", "ext", "-out", str(cert)], - check=True, capture_output=True) + check=True, capture_output=True, timeout=15) context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.minimum_version = ssl.TLSVersion.TLSv1_2 context.load_cert_chain(cert, key) - server = http.server.ThreadingHTTPServer((address, 0), Handler) + server = Server((address, 0), Handler) server.socket = context.wrap_socket(server.socket, server_side=True) threading.Thread(target=server.serve_forever, daemon=True).start() fixtures[name] = {"endpoint": f"https://{address}:{server.server_port}",