import shutil import subprocess from typing import Optional, Type from irctest.basecontrollers import ( BaseServerController, DirectoryBasedController, NotImplementedByController, ) TEMPLATE_CONFIG = """ # M:::::: M:My.Little.Server:{hostname}:test server:{port}:0042: # A:::::: A:Organization, IRC dept.:Daemon :Client Server::IRCnet: # P::<*>::: P::::{port}:: # Y:::::::: Y:10:90::100:512000:100.100:100.100: # I::::::: I::{password_field}:::10:: # O::::::: O:*:operpassword:operuser:::: """ class Irc2Controller(BaseServerController, DirectoryBasedController): software_name = "irc2" services_protocol: str supports_sts = False extban_mute_char = None def create_config(self) -> None: super().create_config() with self.open_file("server.conf"): pass def run( self, hostname: str, port: int, *, password: Optional[str], ssl: bool, run_services: bool, faketime: Optional[str], ) -> None: if ssl: raise NotImplementedByController("TLS") if run_services: raise NotImplementedByController("Services") assert self.proc is None self.port = port self.hostname = hostname self.create_config() password_field = password if password else "" assert self.directory pidfile = self.directory / "ircd.pid" with self.open_file("server.conf") as fd: fd.write( TEMPLATE_CONFIG.format( hostname=hostname, port=port, password_field=password_field, pidfile=pidfile, ) ) if faketime and shutil.which("faketime"): faketime_cmd = ["faketime", "-f", faketime] self.faketime_enabled = True else: faketime_cmd = [] self.proc = subprocess.Popen( [ *faketime_cmd, "ircd", "-s", # no iauth "-p", "on", "-f", self.directory / "server.conf", ], # stderr=subprocess.DEVNULL, ) def get_irctest_controller_class() -> Type[Irc2Controller]: return Irc2Controller