X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=test%2Fcommon.py;h=3bf8f08bee050afef90b38ee1f5e7960bf186654;hb=bf48ccad4b4b91e7d7e09d1087f5953bc2db97d7;hp=434fef947adf0327724e5a9c1caf28388fb9491f;hpb=099a8195d469486fa9347cc5faaadd3614a2a445;p=loctrkd.git diff --git a/test/common.py b/test/common.py index 434fef9..3bf8f08 100644 --- a/test/common.py +++ b/test/common.py @@ -2,7 +2,9 @@ from configparser import ConfigParser, SectionProxy from contextlib import closing, ExitStack +from http.server import HTTPServer, SimpleHTTPRequestHandler from importlib import import_module +from logging import DEBUG, StreamHandler from multiprocessing import Process from os import kill, unlink from signal import SIGINT @@ -15,6 +17,7 @@ from socket import ( socket, SocketType, ) +from sys import exit, stderr from tempfile import mkstemp from time import sleep from typing import Optional @@ -24,7 +27,9 @@ NUMPORTS = 3 class TestWithServers(TestCase): - def setUp(self, *args: str, httpd: bool = False) -> None: + def setUp( + self, *args: str, httpd: bool = False, verbose: bool = False + ) -> None: freeports = [] with ExitStack() as stack: for _ in range(NUMPORTS): @@ -38,12 +43,14 @@ class TestWithServers(TestCase): "port": str(freeports[0]), "publishurl": "ipc://" + self.tmpfilebase + ".pub", "listenurl": "ipc://" + self.tmpfilebase + ".pul", + "protocols": "zx303proto", } self.conf["storage"] = { "dbfn": self.tmpfilebase + ".storage.sqlite", } self.conf["opencellid"] = { "dbfn": self.tmpfilebase + ".opencellid.sqlite", + "downloadurl": f"http://localhost:{freeports[2]}/test/262.csv.gz", } self.conf["lookaside"] = { "backend": "opencellid", @@ -58,11 +65,25 @@ class TestWithServers(TestCase): else: kwargs = {} cls = import_module("gps303." + srvname, package=".") + if verbose: + cls.log.addHandler(StreamHandler(stderr)) + cls.log.setLevel(DEBUG) p = Process(target=cls.runserver, args=(self.conf,), kwargs=kwargs) p.start() self.children.append((srvname, p)) if httpd: - pass + server = HTTPServer(("", freeports[2]), SimpleHTTPRequestHandler) + + def run(server: HTTPServer) -> None: + try: + server.serve_forever() + except KeyboardInterrupt: + # TODO: this still leaves unclosed socket in the server + server.shutdown() + + p = Process(target=run, args=(server,)) + p.start() + self.children.append(("httpd", p)) sleep(1) def tearDown(self) -> None: @@ -73,7 +94,7 @@ class TestWithServers(TestCase): self.assertEqual( p.exitcode, 0, - srvname + " terminated with non-zero return code", + f"{srvname} terminated with return code {p.exitcode}", ) for sfx in ( "",