From 42e10c3848b6b079e7015c2fdd5efd414806b23c Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Tue, 10 Aug 2021 18:15:45 +0200 Subject: [PATCH] Add an 'external_server' controller --- irctest/basecontrollers.py | 6 +++- irctest/cases.py | 3 +- irctest/controllers/external_server.py | 50 ++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 irctest/controllers/external_server.py diff --git a/irctest/basecontrollers.py b/irctest/basecontrollers.py index 42e9ff3..b1bcb7f 100644 --- a/irctest/basecontrollers.py +++ b/irctest/basecontrollers.py @@ -7,12 +7,13 @@ import socket import subprocess import tempfile import time -from typing import IO, Any, Callable, Dict, List, Optional, Set, Type +from typing import IO, Any, Callable, Dict, List, Optional, Set, Tuple, Type import irctest from . import authentication, tls from .client_mock import ClientMock +from .irc_utils.junkdrawer import find_hostname_and_port from .irc_utils.message_parser import Message from .runner import NotImplementedByController @@ -187,6 +188,9 @@ class BaseServerController(_BaseController): extban_mute_char: Optional[str] = None """Character used for the 'mute' extban""" + def get_hostname_and_port(self) -> Tuple[str, int]: + return find_hostname_and_port() + def run( self, hostname: str, diff --git a/irctest/cases.py b/irctest/cases.py index 3070069..5a38f8a 100644 --- a/irctest/cases.py +++ b/irctest/cases.py @@ -30,7 +30,6 @@ from .authentication import Authentication from .basecontrollers import TestCaseControllerConfig from .exceptions import ConnectionClosed from .irc_utils import capabilities, message_parser -from .irc_utils.junkdrawer import find_hostname_and_port from .irc_utils.message_parser import Message from .irc_utils.sasl import sasl_plain_blob from .numerics import ( @@ -504,7 +503,7 @@ class BaseServerTestCase( def setUp(self) -> None: super().setUp() self.server_support = None - (self.hostname, self.port) = find_hostname_and_port() + (self.hostname, self.port) = self.controller.get_hostname_and_port() self.controller.run( self.hostname, self.port, diff --git a/irctest/controllers/external_server.py b/irctest/controllers/external_server.py new file mode 100644 index 0000000..5ecbae0 --- /dev/null +++ b/irctest/controllers/external_server.py @@ -0,0 +1,50 @@ +import os +from typing import Optional, Set, Tuple, Type + +from irctest.basecontrollers import BaseServerController + + +class ExternalServerController(BaseServerController): + """Dummy controller that doesn't run a server. + Instead, it allows connecting to servers ran outside irctest.""" + + software_name = "unknown external server" + supported_sasl_mechanisms = set( + os.environ.get("IRCTEST_SERVER_SASL_MECHS", "").split() + ) + + def check_is_alive(self) -> None: + pass + + def kill_proc(self) -> None: + pass + + def wait_for_port(self) -> None: + pass + + def get_hostname_and_port(self) -> Tuple[str, int]: + hostname = os.environ.get("IRCTEST_SERVER_HOSTNAME") + port = os.environ.get("IRCTEST_SERVER_PORT") + if not hostname or not port: + raise RuntimeError( + "Please set IRCTEST_SERVER_HOSTNAME and IRCTEST_SERVER_PORT." + ) + return (hostname, int(port)) + + def run( + self, + hostname: str, + port: int, + *, + password: Optional[str], + ssl: bool, + run_services: bool, + valid_metadata_keys: Optional[Set[str]] = None, + invalid_metadata_keys: Optional[Set[str]] = None, + restricted_metadata_keys: Optional[Set[str]] = None, + ) -> None: + pass + + +def get_irctest_controller_class() -> Type[ExternalServerController]: + return ExternalServerController