diff --git a/irctest/cases.py b/irctest/cases.py index f5df0e7..aef4393 100644 --- a/irctest/cases.py +++ b/irctest/cases.py @@ -460,6 +460,7 @@ class BaseServerTestCase(_IrcTestCase): capabilities=None, skip_if_cap_nak=False, show_io=None, + account=None, password=None, ident="username", ): @@ -482,7 +483,7 @@ class BaseServerTestCase(_IrcTestCase): self.sendLine(client, "CAP END") if password is not None: self.sendLine(client, "AUTHENTICATE PLAIN") - self.sendLine(client, sasl_plain_blob(nick, password)) + self.sendLine(client, sasl_plain_blob(account or nick, password)) self.sendLine(client, "NICK {}".format(nick)) self.sendLine(client, "USER %s * * :Realname" % (ident,)) diff --git a/irctest/server_tests/test_labeled_responses.py b/irctest/server_tests/test_labeled_responses.py index 63dcbb3..087ddee 100644 --- a/irctest/server_tests/test_labeled_responses.py +++ b/irctest/server_tests/test_labeled_responses.py @@ -1,4 +1,7 @@ """ +This specification is a little hard to test because all labels are optional; +so there may be many false positives. + """ @@ -8,29 +11,36 @@ from irctest import cases class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): - @cases.mark_capabilities("batch", "echo-message", "labeled-response") + def connectClient(self, nick, *, capabilities, **kwargs): + if self.controller.software_name == "InspIRCd": + # InspIRCd only sends labels if 'batch' is enabled + if "batch" not in capabilities: + capabilities.append("batch") + return super().connectClient(nick, capabilities=capabilities, **kwargs) + + @cases.mark_capabilities("echo-message", "labeled-response") def testLabeledPrivmsgResponsesToMultipleClients(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(2) self.connectClient( "carl", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(3) self.connectClient( "alice", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(4) @@ -96,13 +106,13 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledPrivmsgResponsesToClient(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(2) @@ -156,13 +166,13 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledPrivmsgResponsesToChannel(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(2) @@ -224,7 +234,7 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledPrivmsgResponsesToSelf(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) @@ -267,13 +277,13 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledNoticeResponsesToClient(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(2) @@ -327,13 +337,13 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledNoticeResponsesToChannel(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(2) @@ -395,7 +405,7 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledNoticeResponsesToSelf(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response"], + capabilities=["echo-message", "labeled-response"], skip_if_cap_nak=True, ) self.getMessages(1) @@ -436,13 +446,13 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledTagMsgResponsesToClient(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response", "message-tags"], + capabilities=["echo-message", "labeled-response", "message-tags"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response", "message-tags"], + capabilities=["echo-message", "labeled-response", "message-tags"], skip_if_cap_nak=True, ) self.getMessages(2) @@ -544,13 +554,13 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledTagMsgResponsesToChannel(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response", "message-tags"], + capabilities=["echo-message", "labeled-response", "message-tags"], skip_if_cap_nak=True, ) self.getMessages(1) self.connectClient( "bar", - capabilities=["batch", "echo-message", "labeled-response", "message-tags"], + capabilities=["echo-message", "labeled-response", "message-tags"], skip_if_cap_nak=True, ) self.getMessages(2) @@ -610,7 +620,7 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper def testLabeledTagMsgResponsesToSelf(self): self.connectClient( "foo", - capabilities=["batch", "echo-message", "labeled-response", "message-tags"], + capabilities=["echo-message", "labeled-response", "message-tags"], skip_if_cap_nak=True, ) self.getMessages(1) @@ -647,9 +657,7 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper ).format(number_of_labels), ) - @cases.mark_capabilities( - "echo-message", "labeled-response", "message-tags", "server-time" - ) + @cases.mark_capabilities("batch", "labeled-response", "message-tags", "server-time") def testBatchedJoinMessages(self): self.connectClient( "bar", @@ -689,11 +697,10 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper for message in m[1:-1]: self.assertEqual(message.tags.get("batch"), batch_id) - @cases.mark_specifications("Oragono") + @cases.mark_capabilities("labeled-response") def testNoBatchForSingleMessage(self): self.connectClient( - "bar", - capabilities=["batch", "labeled-response", "message-tags", "server-time"], + "bar", capabilities=["labeled-response"], skip_if_cap_nak=True ) self.getMessages(1) @@ -708,11 +715,10 @@ class LabeledResponsesTestCase(cases.BaseServerTestCase, cases.OptionalityHelper # check the label self.assertEqual(m.tags.get("label"), "98765") - @cases.mark_specifications("Oragono") + @cases.mark_capabilities("labeled-response") def testEmptyBatchForNoResponse(self): self.connectClient( - "bar", - capabilities=["batch", "labeled-response", "message-tags", "server-time"], + "bar", capabilities=["labeled-response"], skip_if_cap_nak=True ) self.getMessages(1) diff --git a/irctest/server_tests/test_messages.py b/irctest/server_tests/test_messages.py index e6264e8..55095a7 100644 --- a/irctest/server_tests/test_messages.py +++ b/irctest/server_tests/test_messages.py @@ -71,9 +71,9 @@ class NoticeTestCase(cases.BaseServerTestCase): class TagsTestCase(cases.BaseServerTestCase): - @cases.mark_specifications("Oragono") + @cases.mark_capabilities("message-tags") def testLineTooLong(self): - self.connectClient("bar") + self.connectClient("bar", capabilities=["message-tags"], skip_if_cap_nak=True) self.joinChannel(1, "#xyz") monsterMessage = "@+clientOnlyTagExample=" + "a" * 4096 + " PRIVMSG #xyz hi!" self.sendLine(1, monsterMessage) diff --git a/irctest/server_tests/test_readq.py b/irctest/server_tests/test_readq.py index e8f8dc4..e3d365d 100644 --- a/irctest/server_tests/test_readq.py +++ b/irctest/server_tests/test_readq.py @@ -5,6 +5,7 @@ class ReadqTestCase(cases.BaseServerTestCase): """Test responses to DoS attacks using long lines.""" @cases.mark_specifications("Oragono") + @cases.mark_capabilities("message-tags") def testReadqTags(self): self.connectClient("mallory", name="mallory", capabilities=["message-tags"]) self.joinChannel("mallory", "#test") diff --git a/irctest/server_tests/test_user_commands.py b/irctest/server_tests/test_user_commands.py index 47621c1..ed70b77 100644 --- a/irctest/server_tests/test_user_commands.py +++ b/irctest/server_tests/test_user_commands.py @@ -13,7 +13,7 @@ from irctest.numerics import ( ) -class WhoisTestCase(cases.BaseServerTestCase): +class WhoisTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): @cases.mark_specifications("RFC2812") def testWhoisUser(self): """Test basic WHOIS behavior""" @@ -40,8 +40,6 @@ class WhoisTestCase(cases.BaseServerTestCase): ) self.assertEqual(whois_user.params[5], realname) - -class InvisibleTestCase(cases.BaseServerTestCase): @cases.mark_specifications("Oragono") def testInvisibleWhois(self): """Test interaction between MODE +i and RPL_WHOISCHANNELS.""" @@ -116,12 +114,14 @@ class InvisibleTestCase(cases.BaseServerTestCase): "RPL_WHOISCHANNELS should be sent for a non-invisible nick", ) - @cases.mark_specifications("Oragono") + @cases.OptionalityHelper.skipUnlessHasMechanism("PLAIN") + @cases.mark_specifications("ircdefs") def testWhoisAccount(self): - """Test numeric 330, RPL_WHOISACCOUNT.""" + """Test numeric 330, RPL_WHOISACCOUNT. + + """ self.controller.registerUser(self, "shivaram", "sesame") - self.connectClient("netcat") - self.sendLine(1, "NS IDENTIFY shivaram sesame") + self.connectClient("netcat", account="shivaram", password="sesame") self.getMessages(1) self.connectClient("curious")