Avoid reverse DNS delays in CI TLS fixture
This commit is contained in:
+14
-3
@@ -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}",
|
||||
|
||||
Reference in New Issue
Block a user