diff --git a/testing/fedserv_services.py b/testing/fedserv_services.py index 233cab9..19efc22 100644 --- a/testing/fedserv_services.py +++ b/testing/fedserv_services.py @@ -15,8 +15,10 @@ real network. See https://github.com/progval/irctest """ import os import shutil -from typing import Type +from typing import Optional, Type +import irctest.cases +import irctest.runner from irctest.basecontrollers import BaseServicesController, DirectoryBasedController CONFIG = """\ @@ -52,6 +54,22 @@ class FedservController(BaseServicesController, DirectoryBasedController): self.proc = self.execute([binary, "config.toml"], cwd=self.directory) + def registerUser( + self, + case: irctest.cases.BaseServerTestCase, + username: str, + password: Optional[str] = None, + ) -> None: + # NickServ REGISTER is a single PRIVMSG, so a password that would push + # the line past the 512-byte IRC limit can't be registered intact. Like + # the reference services controllers, skip rather than silently truncate. + assert password + if len(password.encode()) > 400: + raise irctest.runner.NotImplementedByController( + "Passwords too long to REGISTER in a single IRC message" + ) + super().registerUser(case, username, password) + def get_irctest_controller_class() -> Type[FedservController]: return FedservController