Avoid reverse DNS delays in CI TLS fixture

This commit is contained in:
2026-09-12 15:30:50 +03:00
parent d886a8a523
commit f8de824752
+14 -3
View File
@@ -6,6 +6,7 @@ import ipaddress
import json import json
import pathlib import pathlib
import socket import socket
import socketserver
import ssl import ssl
import struct import struct
import subprocess import subprocess
@@ -36,6 +37,8 @@ state = json.loads((root / "MusicBridgeTests/state-v1.json").read_text())
class Handler(http.server.BaseHTTPRequestHandler): class Handler(http.server.BaseHTTPRequestHandler):
protocol_version = "HTTP/1.1"
def do_GET(self): def do_GET(self):
if self.path == "/v1/events": if self.path == "/v1/events":
accept = base64.b64encode(hashlib.sha1( accept = base64.b64encode(hashlib.sha1(
@@ -58,17 +61,25 @@ class Handler(http.server.BaseHTTPRequestHandler):
fixtures = {} 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")): 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")) key, csr, cert = (work / (name + suffix) for suffix in (".key", ".csr", ".pem"))
subprocess.run(["openssl", "req", "-new", "-newkey", "rsa:2048", "-nodes", "-config", str(config), 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", subprocess.run(["openssl", "x509", "-req", "-in", str(csr), "-signkey", str(key), "-sha256",
"-days", days, "-extfile", str(config), "-extensions", "ext", "-out", str(cert)], "-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 = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.minimum_version = ssl.TLSVersion.TLSv1_2 context.minimum_version = ssl.TLSVersion.TLSv1_2
context.load_cert_chain(cert, key) 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) server.socket = context.wrap_socket(server.socket, server_side=True)
threading.Thread(target=server.serve_forever, daemon=True).start() threading.Thread(target=server.serve_forever, daemon=True).start()
fixtures[name] = {"endpoint": f"https://{address}:{server.server_port}", fixtures[name] = {"endpoint": f"https://{address}:{server.server_port}",