irctest/irctest/server_tests/test_relaymsg.py

123 lines
4.3 KiB
Python
Raw Normal View History

2020-09-10 06:31:23 +00:00
from irctest import cases
2020-10-21 15:08:14 +00:00
from irctest.irc_utils.junkdrawer import random_name
2020-09-10 06:31:23 +00:00
from irctest.server_tests.test_chathistory import CHATHISTORY_CAP, EVENT_PLAYBACK_CAP
2021-02-22 18:02:13 +00:00
RELAYMSG_CAP = "draft/relaymsg"
RELAYMSG_TAG_NAME = "draft/relaymsg"
2020-09-10 06:31:23 +00:00
class RelaymsgTestCase(cases.BaseServerTestCase):
@staticmethod
def config() -> cases.TestCaseControllerConfig:
return cases.TestCaseControllerConfig(chathistory=True)
2020-09-10 06:31:23 +00:00
@cases.mark_specifications("Oragono")
2020-09-10 06:31:23 +00:00
def testRelaymsg(self):
2021-02-22 18:02:13 +00:00
self.connectClient(
"baz",
name="baz",
capabilities=[
"server-time",
"message-tags",
"batch",
"labeled-response",
"echo-message",
CHATHISTORY_CAP,
EVENT_PLAYBACK_CAP,
],
)
self.connectClient(
"qux",
name="qux",
capabilities=[
"server-time",
"message-tags",
"batch",
"labeled-response",
"echo-message",
CHATHISTORY_CAP,
EVENT_PLAYBACK_CAP,
],
)
chname = random_name("#relaymsg")
self.joinChannel("baz", chname)
self.joinChannel("qux", chname)
self.getMessages("baz")
self.getMessages("qux")
2020-09-10 06:31:23 +00:00
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "RELAYMSG %s invalid!nick/discord hi" % (chname,))
response = self.getMessages("baz")[0]
self.assertEqual(response.command, "FAIL")
self.assertEqual(response.params[:2], ["RELAYMSG", "INVALID_NICK"])
2020-09-10 06:31:23 +00:00
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "RELAYMSG %s regular_nick hi" % (chname,))
response = self.getMessages("baz")[0]
self.assertEqual(response.command, "FAIL")
self.assertEqual(response.params[:2], ["RELAYMSG", "INVALID_NICK"])
2020-09-10 06:31:23 +00:00
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "RELAYMSG %s smt/discord hi" % (chname,))
response = self.getMessages("baz")[0]
self.assertMessageEqual(
response, nick="smt/discord", command="PRIVMSG", params=[chname, "hi"]
)
relayed_msg = self.getMessages("qux")[0]
self.assertMessageEqual(
relayed_msg, nick="smt/discord", command="PRIVMSG", params=[chname, "hi"]
)
2020-09-10 06:31:23 +00:00
# labeled-response
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "@label=x RELAYMSG %s smt/discord :hi again" % (chname,))
response = self.getMessages("baz")[0]
self.assertMessageEqual(
response, nick="smt/discord", command="PRIVMSG", params=[chname, "hi again"]
)
self.assertEqual(response.tags.get("label"), "x")
relayed_msg = self.getMessages("qux")[0]
self.assertMessageEqual(
relayed_msg,
nick="smt/discord",
command="PRIVMSG",
params=[chname, "hi again"],
)
2020-09-10 06:31:23 +00:00
2021-02-22 18:02:13 +00:00
self.sendLine("qux", "RELAYMSG %s smt/discord :hi a third time" % (chname,))
response = self.getMessages("qux")[0]
self.assertEqual(response.command, "FAIL")
self.assertEqual(response.params[:2], ["RELAYMSG", "PRIVS_NEEDED"])
2020-09-10 06:31:23 +00:00
# grant qux chanop, allowing relaymsg
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "MODE %s +o qux" % (chname,))
self.getMessages("baz")
self.getMessages("qux")
2020-09-10 06:31:23 +00:00
# give baz the relaymsg cap
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "CAP REQ %s" % (RELAYMSG_CAP))
self.assertMessageEqual(
self.getMessages("baz")[0],
command="CAP",
params=["baz", "ACK", RELAYMSG_CAP],
)
2020-09-10 06:31:23 +00:00
2021-02-22 18:02:13 +00:00
self.sendLine("qux", "RELAYMSG %s smt/discord :hi a third time" % (chname,))
response = self.getMessages("qux")[0]
self.assertMessageEqual(
response,
nick="smt/discord",
command="PRIVMSG",
params=[chname, "hi a third time"],
)
relayed_msg = self.getMessages("baz")[0]
self.assertMessageEqual(
relayed_msg,
nick="smt/discord",
command="PRIVMSG",
params=[chname, "hi a third time"],
)
self.assertEqual(relayed_msg.tags.get(RELAYMSG_TAG_NAME), "qux")
2020-09-10 06:31:23 +00:00
2021-02-22 18:02:13 +00:00
self.sendLine("baz", "CHATHISTORY LATEST %s * 10" % (chname,))
messages = self.getMessages("baz")
self.assertEqual(
[msg.params[-1] for msg in messages if msg.command == "PRIVMSG"],
["hi", "hi again", "hi a third time"],
)