From b7a424ac28a9f5479dd17d48758b5175b1401520 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 21 Dec 2022 16:07:21 +0100 Subject: [PATCH] tests: improve search of a free TCP port (#72645) --- hobo/test_utils.py | 10 ++++++++++ tests/test_emails.py | 9 ++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hobo/test_utils.py b/hobo/test_utils.py index 138898c..ad3869d 100644 --- a/hobo/test_utils.py +++ b/hobo/test_utils.py @@ -1,4 +1,7 @@ import os +import socket +import struct +from contextlib import closing def get_safe_db_name(): @@ -20,3 +23,10 @@ def get_safe_db_name(): # for us at a later point parts.append(os.environ.get('TOX_ENV_NAME')) return '_'.join(parts) + + +def find_free_port(): + with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: + s.bind(('', 0)) + s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", 1, 0)) + return s.getsockname()[1] diff --git a/tests/test_emails.py b/tests/test_emails.py index 47f601e..779641b 100644 --- a/tests/test_emails.py +++ b/tests/test_emails.py @@ -16,17 +16,12 @@ from test_manager import login from hobo.emails.validators import validate_email_address from hobo.environment.models import Variable +from hobo.test_utils import find_free_port @pytest.fixture def port_available(): - errno = 0 - while not errno: - port = random.randint(49152, 65534) - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - errno = sock.connect_ex(('127.0.0.1', port)) - sock.close() - return port + return find_free_port() @pytest.fixture -- 2.37.2