From 45dd42e682c58ed98113cd9cf9527ace6274ae46 Mon Sep 17 00:00:00 2001 From: Val Lorentz Date: Fri, 15 Apr 2022 16:01:36 +0200 Subject: [PATCH] Replace incorrect uses of NotImplementedByController exception (#161) --- irctest/cases.py | 10 -------- irctest/server_tests/channel.py | 4 +-- irctest/server_tests/chathistory.py | 2 +- irctest/server_tests/echo_message.py | 38 +++++++++------------------- irctest/server_tests/help.py | 6 ++--- irctest/server_tests/invite.py | 4 +-- irctest/server_tests/isupport.py | 4 +-- irctest/server_tests/kick.py | 2 +- irctest/server_tests/links.py | 4 +-- irctest/server_tests/monitor.py | 5 ++-- irctest/server_tests/names.py | 2 +- irctest/server_tests/regressions.py | 2 +- irctest/server_tests/wallops.py | 4 +-- irctest/server_tests/who.py | 14 +++++----- irctest/server_tests/whowas.py | 4 +-- 15 files changed, 40 insertions(+), 65 deletions(-) diff --git a/irctest/cases.py b/irctest/cases.py index 9a7056d..18b4a38 100644 --- a/irctest/cases.py +++ b/irctest/cases.py @@ -762,16 +762,6 @@ def skipUnlessHasMechanism( return decorator -def skipUnlessHasSasl(f: Callable[..., _TReturn]) -> Callable[..., _TReturn]: - @functools.wraps(f) - def newf(self: _TSelf, *args: Any, **kwargs: Any) -> _TReturn: - if not self.controller.supported_sasl_mechanisms: - raise runner.NotImplementedByController("SASL") - return f(self, *args, **kwargs) - - return newf - - def xfailIf( condition: Callable[..., bool], reason: str ) -> Callable[[Callable[..., _TReturn]], Callable[..., _TReturn]]: diff --git a/irctest/server_tests/channel.py b/irctest/server_tests/channel.py index 61472f7..d2bc763 100644 --- a/irctest/server_tests/channel.py +++ b/irctest/server_tests/channel.py @@ -22,7 +22,7 @@ class ChannelCaseSensitivityTestCase(cases.BaseServerTestCase): self.connectClient("foo") self.connectClient("bar") if self.server_support["CASEMAPPING"] != casemapping: - raise runner.NotImplementedByController( + raise runner.ImplementationChoice( "Casemapping {} not implemented".format(casemapping) ) self.joinClient(1, name1) @@ -47,7 +47,7 @@ class ChannelCaseSensitivityTestCase(cases.BaseServerTestCase): self.connectClient("foo") self.connectClient("bar") if self.server_support["CASEMAPPING"] != casemapping: - raise runner.NotImplementedByController( + raise runner.ImplementationChoice( "Casemapping {} not implemented".format(casemapping) ) self.joinClient(1, name1) diff --git a/irctest/server_tests/chathistory.py b/irctest/server_tests/chathistory.py index 53b4d16..28a201a 100644 --- a/irctest/server_tests/chathistory.py +++ b/irctest/server_tests/chathistory.py @@ -47,7 +47,7 @@ def skip_ngircd(f): @functools.wraps(f) def newf(self, *args, **kwargs): if self.controller.software_name == "ngIRCd": - raise runner.NotImplementedByController("nicks longer 9 characters") + raise runner.OptionalExtensionNotSupported("nicks longer 9 characters") return f(self, *args, **kwargs) return newf diff --git a/irctest/server_tests/echo_message.py b/irctest/server_tests/echo_message.py index 1da3412..063028a 100644 --- a/irctest/server_tests/echo_message.py +++ b/irctest/server_tests/echo_message.py @@ -5,7 +5,6 @@ import pytest from irctest import cases -from irctest.basecontrollers import NotImplementedByController from irctest.irc_utils.junkdrawer import random_name from irctest.patma import ANYDICT @@ -23,31 +22,18 @@ class EchoMessageTestCase(cases.BaseServerTestCase): @cases.mark_capabilities("echo-message") def testEchoMessage(self, command, solo, server_time): """""" - self.addClient() - self.sendLine(1, "CAP LS 302") - capabilities = self.getCapLs(1) - if "echo-message" not in capabilities: - raise NotImplementedByController("echo-message") - if server_time and "server-time" not in capabilities: - raise NotImplementedByController("server-time") - - # TODO: check also without this - self.sendLine( - 1, - "CAP REQ :echo-message{}".format(" server-time" if server_time else ""), - ) - self.getRegistrationMessage(1) - # TODO: Remove this one the trailing space issue is fixed in Charybdis - # and Mammon: - # self.assertMessageMatch(m, command='CAP', - # params=['*', 'ACK', 'echo-message'] + - # (['server-time'] if server_time else []), - # fail_msg='Did not ACK advertised capabilities: {msg}') - self.sendLine(1, "USER f * * :foo") - self.sendLine(1, "NICK baz") - self.sendLine(1, "CAP END") - self.skipToWelcome(1) - self.getMessages(1) + if server_time: + self.connectClient( + "baz", + capabilities=["echo-message", "server-time"], + skip_if_cap_nak=True, + ) + else: + self.connectClient( + "baz", + capabilities=["echo-message", "server-time"], + skip_if_cap_nak=True, + ) self.sendLine(1, "JOIN #chan") diff --git a/irctest/server_tests/help.py b/irctest/server_tests/help.py index ff5069e..32475fa 100644 --- a/irctest/server_tests/help.py +++ b/irctest/server_tests/help.py @@ -22,17 +22,17 @@ def with_xfails(f): @functools.wraps(f) def newf(self, command, *args, **kwargs): if command == "HELP" and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController( + raise runner.ImplementationChoice( "fail because Bahamut forwards /HELP to HelpServ (but not /HELPOP)" ) if self.controller.software_name in ("irc2", "ircu2", "ngIRCd"): - raise runner.NotImplementedByController( + raise runner.ImplementationChoice( "numerics in reply to /HELP and /HELPOP (uses NOTICE instead)" ) if self.controller.software_name == "UnrealIRCd": - raise runner.NotImplementedByController( + raise runner.ImplementationChoice( "fails because Unreal uses custom numerics " "https://github.com/unrealircd/unrealircd/pull/184" ) diff --git a/irctest/server_tests/invite.py b/irctest/server_tests/invite.py index 68bef09..bb6e6df 100644 --- a/irctest/server_tests/invite.py +++ b/irctest/server_tests/invite.py @@ -395,7 +395,7 @@ class InviteTestCase(cases.BaseServerTestCase): self.sendLine(2, "INVITE") m = self.getMessage(2) if m.command == ERR_NEEDMOREPARAMS: - raise runner.NotImplementedByController("INVITE with no parameter") + raise runner.OptionalExtensionNotSupported("INVITE with no parameter") if m.command != "337": # Hybrid always sends an empty list; so skip this. self.assertMessageMatch( @@ -419,7 +419,7 @@ class InviteTestCase(cases.BaseServerTestCase): if "INVEX" in self.server_support: invex = self.server_support.get("INVEX") or "I" else: - raise runner.NotImplementedByController("INVEX") + raise runner.IsupportTokenNotSupported("INVEX") self.sendLine(1, "JOIN #chan") self.getMessages(1) diff --git a/irctest/server_tests/isupport.py b/irctest/server_tests/isupport.py index 2c3cbaa..ae0ac18 100644 --- a/irctest/server_tests/isupport.py +++ b/irctest/server_tests/isupport.py @@ -16,7 +16,7 @@ class IsupportTestCase(cases.BaseServerTestCase): self.connectClient("foo") if "PREFIX" not in self.server_support: - raise runner.NotImplementedByController("PREFIX") + raise runner.IsupportTokenNotSupported("PREFIX") if self.server_support["PREFIX"] == "": # "The value is OPTIONAL and when it is not specified indicates that no @@ -80,7 +80,7 @@ class IsupportTestCase(cases.BaseServerTestCase): self.connectClient("foo") if "TARGMAX" not in self.server_support: - raise runner.NotImplementedByController("TARGMAX") + raise runner.IsupportTokenNotSupported("TARGMAX") parts = self.server_support["TARGMAX"].split(",") for part in parts: diff --git a/irctest/server_tests/kick.py b/irctest/server_tests/kick.py index 7f2149e..06fda59 100644 --- a/irctest/server_tests/kick.py +++ b/irctest/server_tests/kick.py @@ -236,7 +236,7 @@ class KickTestCase(cases.BaseServerTestCase): if item ) if targmax.get("KICK", "1") == "1": - raise runner.NotImplementedByController("Multi-target KICK") + raise runner.OptionalExtensionNotSupported("Multi-target KICK") # TODO: check foo is an operator diff --git a/irctest/server_tests/links.py b/irctest/server_tests/links.py index 62c746f..4a77554 100644 --- a/irctest/server_tests/links.py +++ b/irctest/server_tests/links.py @@ -34,7 +34,7 @@ class LinksTestCase(cases.BaseServerTestCase): self.sendLine(1, "LINKS") messages = self.getMessages(1) if messages[0].command == ERR_UNKNOWNCOMMAND: - raise runner.NotImplementedByController("LINKS") + raise runner.OptionalCommandNotSupported("LINKS") # Ignore '/LINKS has been disabled' from ircu2 messages = [m for m in messages if m.command != "NOTICE"] @@ -95,7 +95,7 @@ class ServicesLinksTestCase(cases.BaseServerTestCase): messages = self.getMessages(1) if messages[0].command == ERR_UNKNOWNCOMMAND: - raise runner.NotImplementedByController("LINKS") + raise runner.OptionalCommandNotSupported("LINKS") # Ignore '/LINKS has been disabled' from ircu2 messages = [m for m in messages if m.command != "NOTICE"] diff --git a/irctest/server_tests/monitor.py b/irctest/server_tests/monitor.py index 211ee67..4f2f552 100644 --- a/irctest/server_tests/monitor.py +++ b/irctest/server_tests/monitor.py @@ -2,8 +2,7 @@ `IRCv3 MONITOR `_ """ -from irctest import cases -from irctest.basecontrollers import NotImplementedByController +from irctest import cases, runner from irctest.client_mock import NoMessageException from irctest.numerics import ( RPL_ENDOFMONLIST, @@ -17,7 +16,7 @@ from irctest.patma import ANYSTR, StrRe class MonitorTestCase(cases.BaseServerTestCase): def check_server_support(self): if "MONITOR" not in self.server_support: - raise NotImplementedByController("MONITOR") + raise runner.IsupportTokenNotSupported("MONITOR") def assertMononline(self, client, nick, m=None): if not m: diff --git a/irctest/server_tests/names.py b/irctest/server_tests/names.py index 3285be2..597bf8b 100644 --- a/irctest/server_tests/names.py +++ b/irctest/server_tests/names.py @@ -68,7 +68,7 @@ class NamesTestCase(cases.BaseServerTestCase): if item ) if targmax.get("NAMES", "1") == "1": - raise runner.NotImplementedByController("Multi-target NAMES") + raise runner.OptionalExtensionNotSupported("Multi-target NAMES") self.sendLine(1, "JOIN #chan1") self.sendLine(1, "JOIN #chan2") diff --git a/irctest/server_tests/regressions.py b/irctest/server_tests/regressions.py index c09fdf5..bf9145c 100644 --- a/irctest/server_tests/regressions.py +++ b/irctest/server_tests/regressions.py @@ -58,7 +58,7 @@ class RegressionsTestCase(cases.BaseServerTestCase): @cases.mark_capabilities("message-tags", "batch", "echo-message", "server-time") def testTagCap(self): if self.controller.software_name == "UnrealIRCd": - raise runner.NotImplementedByController( + raise runner.ImplementationChoice( "Arbitrary +draft/reply values (TODO: adapt this test to use real " "values so their pass Unreal's validation) " "https://bugs.unrealircd.org/view.php?id=5948" diff --git a/irctest/server_tests/wallops.py b/irctest/server_tests/wallops.py index e0d00e0..d23dc58 100644 --- a/irctest/server_tests/wallops.py +++ b/irctest/server_tests/wallops.py @@ -44,7 +44,7 @@ class WallopsTestCase(cases.BaseServerTestCase): messages = self.getMessages(1) if ERR_UNKNOWNCOMMAND in (message.command for message in messages): - raise runner.NotImplementedByController("WALLOPS") + raise runner.OptionalCommandNotSupported("WALLOPS") for message in messages: self.assertMessageMatch( message, @@ -77,7 +77,7 @@ class WallopsTestCase(cases.BaseServerTestCase): self.sendLine(1, "WALLOPS :hi everyone") message = self.getMessage(1) if message.command == ERR_UNKNOWNCOMMAND: - raise runner.NotImplementedByController("WALLOPS") + raise runner.OptionalCommandNotSupported("WALLOPS") self.assertMessageMatch( message, command=ERR_NOPRIVILEGES, params=["nick1", ANYSTR] ) diff --git a/irctest/server_tests/who.py b/irctest/server_tests/who.py index f5e8903..10430d8 100644 --- a/irctest/server_tests/who.py +++ b/irctest/server_tests/who.py @@ -88,7 +88,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): @cases.mark_specifications("Modern") def testWhoStar(self): if self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() @@ -119,7 +119,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): @cases.mark_specifications("Modern") def testWhoNick(self, mask): if "*" in mask and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() @@ -149,7 +149,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): ) def testWhoUsernameRealName(self, mask): if "*" in mask and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() @@ -202,7 +202,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): @cases.mark_specifications("Modern") def testWhoNickAway(self, mask): if "*" in mask and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() @@ -231,7 +231,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): @cases.mark_specifications("Modern") def testWhoNickOper(self, mask): if "*" in mask and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() @@ -265,7 +265,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): @cases.mark_specifications("Modern") def testWhoNickAwayAndOper(self, mask): if "*" in mask and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() @@ -299,7 +299,7 @@ class WhoTestCase(BaseWhoTestCase, cases.BaseServerTestCase): @cases.mark_specifications("Modern") def testWhoChan(self, mask): if "*" in mask and self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHO mask") + raise runner.OptionalExtensionNotSupported("WHO mask") self._init() diff --git a/irctest/server_tests/whowas.py b/irctest/server_tests/whowas.py index cbe9e3b..79da7a4 100644 --- a/irctest/server_tests/whowas.py +++ b/irctest/server_tests/whowas.py @@ -283,7 +283,7 @@ class WhowasTestCase(cases.BaseServerTestCase): -- https://github.com/ircdocs/modern-irc/pull/170 """ if self.controller.software_name == "Bahamut": - raise runner.NotImplementedByController("WHOWAS mask") + raise runner.OptionalExtensionNotSupported("WHOWAS mask") self._testWhowasMultiple(second_result=True, whowas_command="WHOWAS *ck2") @@ -409,7 +409,7 @@ class WhowasTestCase(cases.BaseServerTestCase): if item ) if targmax.get("WHOWAS", "1") == "1": - raise runner.NotImplementedByController("Multi-target WHOWAS") + raise runner.OptionalExtensionNotSupported("Multi-target WHOWAS") self.connectClient("nick2", ident="ident2") self.sendLine(2, "QUIT :bye")