From 50b36f281d02dfc01829d14f77850e6bdfd27063 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Fri, 18 Jun 2021 18:43:45 -0400 Subject: [PATCH 1/2] ergo: remove additional-nick-limit --- irctest/controllers/ergo.py | 1 - 1 file changed, 1 deletion(-) diff --git a/irctest/controllers/ergo.py b/irctest/controllers/ergo.py index db5f42d..bbe2982 100644 --- a/irctest/controllers/ergo.py +++ b/irctest/controllers/ergo.py @@ -58,7 +58,6 @@ BASE_CONFIG = { }, "nick-reservation": { "enabled": True, - "additional-nick-limit": 2, "method": "strict", }, }, From 65b479c609630a06c42c842a353bd8b99e34be6c Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 27 Jun 2021 04:41:30 -0400 Subject: [PATCH 2/2] add regression test for ergochat/ergo#1696 --- .../server_tests/test_channel_operations.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/irctest/server_tests/test_channel_operations.py b/irctest/server_tests/test_channel_operations.py index e6daa1c..123947c 100644 --- a/irctest/server_tests/test_channel_operations.py +++ b/irctest/server_tests/test_channel_operations.py @@ -1180,6 +1180,56 @@ class ModeratedMode(cases.BaseServerTestCase): ) +class RegisteredOnlySpeakMode(cases.BaseServerTestCase): + @cases.mark_specifications("Ergo") + def testRegisteredOnlySpeakMode(self): + self.controller.registerUser(self, "evan", "sesame") + + # test the +M (only registered users and ops can speak) channel mode + self.connectClient("chanop", name="chanop") + self.joinChannel("chanop", "#chan") + self.getMessages("chanop") + self.sendLine("chanop", "MODE #chan +M") + replies = self.getMessages("chanop") + modeLines = [line for line in replies if line.command == "MODE"] + self.assertMessageMatch(modeLines[0], command="MODE", params=["#chan", "+M"]) + + self.connectClient("baz", name="baz") + self.joinChannel("baz", "#chan") + self.getMessages("chanop") + # this message should be suppressed completely by +M + self.sendLine("baz", "PRIVMSG #chan :hi from baz") + replies = self.getMessages("baz") + reply_cmds = {reply.command for reply in replies} + self.assertIn(ERR_CANNOTSENDTOCHAN, reply_cmds) + self.assertEqual(self.getMessages("chanop"), []) + + # +v exempts users from the registration requirement: + self.sendLine("chanop", "MODE #chan +v baz") + self.getMessages("chanop") + self.getMessages("baz") + self.sendLine("baz", "PRIVMSG #chan :hi again from baz") + replies = self.getMessages("baz") + # baz should not receive an error (or an echo) + self.assertEqual(replies, []) + replies = self.getMessages("chanop") + self.assertMessageMatch( + replies[0], command="PRIVMSG", params=["#chan", "hi again from baz"] + ) + + self.connectClient("evan", name="evan", account="evan", password="sesame") + self.joinChannel("evan", "#chan") + self.getMessages("baz") + self.sendLine("evan", "PRIVMSG #chan :hi from evan") + replies = self.getMessages("evan") + # evan should not receive an error (or an echo) + self.assertEqual(replies, []) + replies = self.getMessages("baz") + self.assertMessageMatch( + replies[0], command="PRIVMSG", params=["#chan", "hi from evan"] + ) + + class OpModerated(cases.BaseServerTestCase): @cases.mark_specifications("Ergo") def testOpModerated(self):