mirror of
https://github.com/progval/irctest.git
synced 2025-04-07 15:59:49 +00:00
Add CLI option --services-controller to allow alternatives to Atheme (none for now)
+ fix some issues with killing services processes
This commit is contained in:
@ -7,7 +7,7 @@ import socket
|
||||
import subprocess
|
||||
import tempfile
|
||||
import time
|
||||
from typing import IO, Any, Callable, Dict, List, Optional, Set
|
||||
from typing import IO, Any, Callable, Dict, List, Optional, Set, Type
|
||||
|
||||
import irctest
|
||||
|
||||
@ -182,7 +182,8 @@ class BaseServerController(_BaseController):
|
||||
port_open = False
|
||||
port: int
|
||||
hostname: str
|
||||
services_controller: BaseServicesController
|
||||
services_controller: Optional[BaseServicesController] = None
|
||||
services_controller_class: Type[BaseServicesController]
|
||||
extban_mute_char: Optional[str] = None
|
||||
"""Character used for the 'mute' extban"""
|
||||
|
||||
@ -205,7 +206,7 @@ class BaseServerController(_BaseController):
|
||||
username: str,
|
||||
password: Optional[str] = None,
|
||||
) -> None:
|
||||
if self.services_controller:
|
||||
if self.services_controller is not None:
|
||||
self.services_controller.registerUser(case, username, password)
|
||||
else:
|
||||
raise NotImplementedByController("account registration")
|
||||
@ -232,8 +233,19 @@ class BaseServerController(_BaseController):
|
||||
continue
|
||||
|
||||
def wait_for_services(self) -> None:
|
||||
assert self.services_controller
|
||||
self.services_controller.wait_for_services()
|
||||
|
||||
def terminate(self) -> None:
|
||||
if self.services_controller is not None:
|
||||
self.services_controller.terminate() # type: ignore
|
||||
super().terminate() # type: ignore
|
||||
|
||||
def kill(self) -> None:
|
||||
if self.services_controller is not None:
|
||||
self.services_controller.kill() # type: ignore
|
||||
super().kill()
|
||||
|
||||
|
||||
class BaseServicesController(_BaseController):
|
||||
def __init__(
|
||||
@ -246,6 +258,9 @@ class BaseServicesController(_BaseController):
|
||||
self.server_controller = server_controller
|
||||
self.services_up = False
|
||||
|
||||
def run(self, protocol: str, server_hostname: str, server_port: int) -> None:
|
||||
raise NotImplementedError("BaseServerController.run()")
|
||||
|
||||
def wait_for_services(self) -> None:
|
||||
if self.services_up:
|
||||
# Don't check again if they are already available
|
||||
|
@ -1,6 +1,6 @@
|
||||
import os
|
||||
import subprocess
|
||||
from typing import Optional
|
||||
from typing import Optional, Type
|
||||
|
||||
import irctest
|
||||
from irctest.basecontrollers import BaseServicesController, DirectoryBasedController
|
||||
@ -52,12 +52,15 @@ saslserv {{
|
||||
"""
|
||||
|
||||
|
||||
class AthemeServices(BaseServicesController, DirectoryBasedController):
|
||||
class AthemeController(BaseServicesController, DirectoryBasedController):
|
||||
"""Mixin for server controllers that rely on Atheme"""
|
||||
|
||||
def run(self, protocol: str, server_hostname: str, server_port: int) -> None:
|
||||
self.create_config()
|
||||
|
||||
if protocol == "inspircd3":
|
||||
# That's the name used by Anope
|
||||
protocol = "inspircd"
|
||||
assert protocol in ("inspircd", "charybdis", "unreal4")
|
||||
|
||||
with self.open_file("services.conf") as fd:
|
||||
@ -100,3 +103,7 @@ class AthemeServices(BaseServicesController, DirectoryBasedController):
|
||||
raise irctest.runner.NotImplementedByController("Passwords over 288 bytes")
|
||||
|
||||
super().registerUser(case, username, password)
|
||||
|
||||
|
||||
def get_irctest_controller_class() -> Type[AthemeController]:
|
||||
return AthemeController
|
||||
|
@ -7,7 +7,6 @@ from irctest.basecontrollers import (
|
||||
DirectoryBasedController,
|
||||
NotImplementedByController,
|
||||
)
|
||||
from irctest.controllers.atheme_services import AthemeServices
|
||||
from irctest.irc_utils.junkdrawer import find_hostname_and_port
|
||||
|
||||
TEMPLATE_CONFIG = """
|
||||
@ -134,7 +133,9 @@ class CharybdisController(BaseServerController, DirectoryBasedController):
|
||||
|
||||
if run_services:
|
||||
self.wait_for_port()
|
||||
self.services_controller = AthemeServices(self.test_config, self)
|
||||
self.services_controller = self.services_controller_class(
|
||||
self.test_config, self
|
||||
)
|
||||
self.services_controller.run(
|
||||
protocol="charybdis", server_hostname=hostname, server_port=port
|
||||
)
|
||||
|
@ -7,7 +7,6 @@ from irctest.basecontrollers import (
|
||||
DirectoryBasedController,
|
||||
NotImplementedByController,
|
||||
)
|
||||
from irctest.controllers.atheme_services import AthemeServices
|
||||
from irctest.irc_utils.junkdrawer import find_hostname_and_port
|
||||
|
||||
TEMPLATE_CONFIG = """
|
||||
@ -131,9 +130,11 @@ class InspircdController(BaseServerController, DirectoryBasedController):
|
||||
|
||||
if run_services:
|
||||
self.wait_for_port()
|
||||
self.services_controller = AthemeServices(self.test_config, self)
|
||||
self.services_controller = self.services_controller_class(
|
||||
self.test_config, self
|
||||
)
|
||||
self.services_controller.run(
|
||||
protocol="inspircd",
|
||||
protocol="inspircd3",
|
||||
server_hostname=services_hostname,
|
||||
server_port=services_port,
|
||||
)
|
||||
|
@ -7,7 +7,6 @@ from irctest.basecontrollers import (
|
||||
DirectoryBasedController,
|
||||
NotImplementedByController,
|
||||
)
|
||||
from irctest.controllers.atheme_services import AthemeServices
|
||||
from irctest.irc_utils.junkdrawer import find_hostname_and_port
|
||||
|
||||
TEMPLATE_CONFIG = """
|
||||
@ -179,7 +178,9 @@ class UnrealircdController(BaseServerController, DirectoryBasedController):
|
||||
|
||||
if run_services:
|
||||
self.wait_for_port()
|
||||
self.services_controller = AthemeServices(self.test_config, self)
|
||||
self.services_controller = self.services_controller_class(
|
||||
self.test_config, self
|
||||
)
|
||||
self.services_controller.run(
|
||||
protocol="unreal4",
|
||||
server_hostname=services_hostname,
|
||||
|
Reference in New Issue
Block a user