From 099a8195d469486fa9347cc5faaadd3614a2a445 Mon Sep 17 00:00:00 2001 From: Eugene Crosser Date: Wed, 22 Jun 2022 16:12:13 +0200 Subject: [PATCH] test: better aquisition of free ports --- test/common.py | 23 +++++++++++++---------- test/test_fuzz.py | 3 ++- test/test_storage.py | 3 ++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/test/common.py b/test/common.py index 38c59d5..434fef9 100644 --- a/test/common.py +++ b/test/common.py @@ -1,7 +1,7 @@ """ Common housekeeping for tests that rely on daemons """ from configparser import ConfigParser, SectionProxy -from contextlib import closing +from contextlib import closing, ExitStack from importlib import import_module from multiprocessing import Process from os import kill, unlink @@ -20,17 +20,18 @@ from time import sleep from typing import Optional from unittest import TestCase +NUMPORTS = 3 + class TestWithServers(TestCase): - def setUp(self, *args: str) -> None: - with closing(socket(AF_INET6, SOCK_DGRAM)) as sock1, closing( - socket(AF_INET6, SOCK_DGRAM) - ) as sock2: - freeports = [] - for sock in sock1, sock2: - sock.bind(("", 0)) - sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) - freeports.append(sock.getsockname()[1]) + def setUp(self, *args: str, httpd: bool = False) -> None: + freeports = [] + with ExitStack() as stack: + for _ in range(NUMPORTS): + sk = stack.enter_context(closing(socket(AF_INET6, SOCK_DGRAM))) + sk.bind(("", 0)) + sk.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) + freeports.append(sk.getsockname()[1]) _, self.tmpfilebase = mkstemp() self.conf = ConfigParser() self.conf["collector"] = { @@ -60,6 +61,8 @@ class TestWithServers(TestCase): p = Process(target=cls.runserver, args=(self.conf,), kwargs=kwargs) p.start() self.children.append((srvname, p)) + if httpd: + pass sleep(1) def tearDown(self) -> None: diff --git a/test/test_fuzz.py b/test/test_fuzz.py index 4ac6f89..ecedb2a 100644 --- a/test/test_fuzz.py +++ b/test/test_fuzz.py @@ -3,6 +3,7 @@ from random import Random from socket import getaddrinfo, socket, AF_INET, SOCK_STREAM from time import sleep +from typing import Any import unittest from .common import send_and_drain, TestWithServers @@ -10,7 +11,7 @@ REPEAT: int = 1000000 class Fuzz(TestWithServers): - def setUp(self, *args: str) -> None: + def setUp(self, *args: str, **kwargs: Any) -> None: super().setUp("collector") self.rnd = Random() for fam, typ, pro, cnm, skadr in getaddrinfo( diff --git a/test/test_storage.py b/test/test_storage.py index 994e3b1..80ccba6 100644 --- a/test/test_storage.py +++ b/test/test_storage.py @@ -4,13 +4,14 @@ from random import Random from socket import getaddrinfo, socket, AF_INET, SOCK_STREAM from sqlite3 import connect, Row from time import sleep +from typing import Any import unittest from .common import send_and_drain, TestWithServers from gps303.gps303proto import * class Storage(TestWithServers): - def setUp(self, *args: str) -> None: + def setUp(self, *args: str, **kwargs: Any) -> None: super().setUp("collector", "storage", "lookaside", "termconfig") for fam, typ, pro, cnm, skadr in getaddrinfo( "127.0.0.1", -- 2.40.1