Changeset: ed17ccf72c48 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ed17ccf72c48 Modified Files: testing/tlstester.py Branch: default Log Message:
tlstester: listen on both AF_INET and AF_INET6 This should speed up the tlssecurity test on Windows. diffs (91 lines): diff --git a/testing/tlstester.py b/testing/tlstester.py --- a/testing/tlstester.py +++ b/testing/tlstester.py @@ -416,6 +416,32 @@ class TLSTester: for t in threads: t.join() + def spawn_server(self, name, server_class, addr, port, handler): + fam = server_class.address_family.name + try: + server = server_class((addr, port), handler) + except Exception as e: + log.debug(f"Could not bind {name} to {fam} = {addr} port {port}: {e}") + raise + bound_addr, bound_port = server.server_address[:2] + log.debug(f"Bound {name}: {fam} = {bound_addr} port {bound_port}") + self.portmap[name] = bound_port + self.workers.append(server.serve_forever) + return bound_port + + def spawn_servers(self, name, server_classes, addr, port, handler): + exceptions = [] + for server_class in server_classes: + try: + # update 'port' so all servers use the same port number + port = self.spawn_server(name, server_class, addr, port, handler) + except OSError as e: + exceptions.append(e) + if len(exceptions) == len(server_classes): + e = exceptions[0] + log.error(f"Could not spawn any listener for {name} on {addr}: {e}") + raise e + def spawn_http(self, name: str, only_preassigned: bool): if only_preassigned and name not in self.preassigned: return @@ -425,11 +451,7 @@ class TLSTester: handler = lambda req, addr, server: WebHandler( req, addr, server, self.certs, self.portmap ) - server = http.server.HTTPServer((self.listen_addr, port), handler) - port = server.server_address[1] - log.debug(f"Bound port {name} to {port}") - self.portmap[name] = port - self.workers.append(server.serve_forever) + self.spawn_servers(name, [MyHTTPServer, MyHTTP6Server], self.listen_addr, port, handler) def spawn_mapi(self, name: str, only_preassigned, ctx: SSLContext, check_alpn=None, redirect_to=None): if only_preassigned and name not in self.preassigned: @@ -438,11 +460,7 @@ class TLSTester: return port = self.allocate_port(name) handler = lambda req, addr, server: MapiHandler(req, addr, server, self, name, ctx, check_alpn, redirect_to) - server = MyTCPServer((self.listen_addr, port), handler) - port = server.server_address[1] - log.debug(f"Bound port {name} to {port}") - self.portmap[name] = port - self.workers.append(server.serve_forever) + self.spawn_servers(name, [MyTCPServer, MyTCP6Server], self.listen_addr, port, handler) def spawn_forward(self, name, ctx: SSLContext): if name in self.portmap: @@ -451,11 +469,8 @@ class TLSTester: handler = lambda req, addr, server: ForwardHandler( req, addr, server, name, ctx, self.forward_to ) - server = MyTCPServer((self.listen_addr, local_port), handler) - port = server.server_address[1] - log.debug(f"Bound port {name} to {port}") - self.portmap[name] = port - self.workers.append(server.serve_forever) + self.spawn_servers(name, [MyTCPServer, MyTCP6Server], self.listen_addr, local_port, handler) + def allocate_port(self, name): if name in self.preassigned: @@ -551,6 +566,14 @@ class MyTCPServer(socketserver.Threading allow_reuse_address = True pass +class MyTCP6Server(MyTCPServer): + address_family = socket.AF_INET6 + +class MyHTTPServer(http.server.HTTPServer): + pass + +class MyHTTP6Server(MyHTTPServer): + address_family = socket.AF_INET6 class MapiHandler(socketserver.BaseRequestHandler): tlstester: TLSTester _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org