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
socket,
SocketType,
)
-from sys import exit
+from sys import exit, stderr
from tempfile import mkstemp
from time import sleep
from typing import Optional
from unittest import TestCase
+from loctrkd.common import init_protocols
+
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):
freeports.append(sk.getsockname()[1])
_, self.tmpfilebase = mkstemp()
self.conf = ConfigParser()
+ self.conf["common"] = {
+ "protocols": "zx303proto",
+ }
self.conf["collector"] = {
"port": str(freeports[0]),
"publishurl": "ipc://" + self.tmpfilebase + ".pub",
}
self.conf["storage"] = {
"dbfn": self.tmpfilebase + ".storage.sqlite",
+ "events": "yes",
}
self.conf["opencellid"] = {
"dbfn": self.tmpfilebase + ".opencellid.sqlite",
"downloadurl": f"http://localhost:{freeports[2]}/test/262.csv.gz",
}
- self.conf["lookaside"] = {
- "backend": "opencellid",
+ self.conf["rectifier"] = {
+ "lookaside": "opencellid",
+ "publishurl": "ipc://" + self.tmpfilebase + ".rect.pub",
}
self.conf["wsgateway"] = {
"port": str(freeports[1]),
}
+ init_protocols(self.conf)
self.children = []
for srvname in args:
if srvname == "collector":
kwargs = {"handle_hibernate": False}
else:
kwargs = {}
- cls = import_module("gps303." + srvname, package=".")
+ cls = import_module("loctrkd." + 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))
for sfx in (
"",
".pub",
+ ".rect.pub",
".pul",
".storage.sqlite",
".opencellid.sqlite",