From cb3c87cb84d16d6e35a2cf5856824cf28894fd49 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sun, 29 Dec 2019 12:26:26 -0500 Subject: [PATCH] add multiline test --- irctest/controllers/oragono.py | 1 + irctest/server_tests/test_multiline.py | 75 ++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 irctest/server_tests/test_multiline.py diff --git a/irctest/controllers/oragono.py b/irctest/controllers/oragono.py index 98c64a3..317b4a1 100644 --- a/irctest/controllers/oragono.py +++ b/irctest/controllers/oragono.py @@ -64,6 +64,7 @@ BASE_CONFIG = { 'nicklen': 32, 'topiclen': 390, 'whowas-entries': 100, + 'multiline': {'max-bytes': 4096, 'max-lines': 32,}, }, "history": { diff --git a/irctest/server_tests/test_multiline.py b/irctest/server_tests/test_multiline.py new file mode 100644 index 0000000..02be4b6 --- /dev/null +++ b/irctest/server_tests/test_multiline.py @@ -0,0 +1,75 @@ +""" + +""" + +from irctest import cases + +CAP_NAME = 'draft/multiline' +BATCH_TYPE = 'draft/multiline' +CONCAT_TAG = 'draft/multiline-concat' +FMSGID_TAG = 'draft/fmsgid' + +base_caps = ['message-tags', 'batch', 'echo-message', 'server-time'] + +class MultilineTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): + + @cases.SpecificationSelector.requiredBySpecification('Oragono') + def testBasic(self): + self.connectClient('alice', capabilities=(base_caps + [CAP_NAME])) + self.joinChannel(1, '#test') + self.connectClient('bob', capabilities=(base_caps + [CAP_NAME])) + self.joinChannel(2, '#test') + self.connectClient('charlie', capabilities=base_caps) + self.joinChannel(3, '#test') + + self.getMessages(1) + self.getMessages(2) + self.getMessages(3) + + self.sendLine(1, 'BATCH +123 %s #test' % (BATCH_TYPE,)) + self.sendLine(1, '@batch=123 PRIVMSG #test hello') + self.sendLine(1, '@batch=123 PRIVMSG #test :#how is ') + self.sendLine(1, '@batch=123;%s PRIVMSG #test :everyone?' % (CONCAT_TAG,)) + self.sendLine(1, 'BATCH -123') + + echo = self.getMessages(1) + batchStart, batchEnd = echo[0], echo[-1] + self.assertEqual(batchStart.command, 'BATCH') + self.assertEqual(batchEnd.command, 'BATCH') + self.assertEqual(batchStart.params[0][1:], batchEnd.params[0][1:]) + msgid = batchStart.tags.get('msgid') + time = batchStart.tags.get('time') + assert msgid + assert time + fmsgids = [] + privmsgs = echo[1:-1] + for msg in privmsgs: + self.assertMessageEqual(msg, command='PRIVMSG') + self.assertNotIn('msgid', msg.tags) + self.assertNotIn('time', msg.tags) + fmsgids.append(msg.tags.get(FMSGID_TAG)) + self.assertIn(CONCAT_TAG, echo[3].tags) + + relay = self.getMessages(2) + batchStart, batchEnd = relay[0], relay[-1] + self.assertEqual(batchStart.command, 'BATCH') + self.assertEqual(batchEnd.command, 'BATCH') + self.assertEqual(batchStart.params[0][1:], batchEnd.params[0][1:]) + self.assertEqual(batchStart.tags.get('msgid'), msgid) + self.assertEqual(batchStart.tags.get('time'), time) + privmsgs = relay[1:-1] + self.assertEqual([msg.tags.get(FMSGID_TAG) for msg in privmsgs], fmsgids) + for msg in privmsgs: + self.assertMessageEqual(msg, command='PRIVMSG') + self.assertNotIn('msgid', msg.tags) + self.assertNotIn('time', msg.tags) + self.assertIn(CONCAT_TAG, relay[3].tags) + + fallback_relay = self.getMessages(3) + relayed_fmsgids = [] + for msg in fallback_relay: + self.assertMessageEqual(msg, command='PRIVMSG') + relayed_fmsgids.append(msg.tags.get('msgid')) + self.assertEqual(msg.tags.get('time'), time) + self.assertNotIn(CONCAT_TAG, msg.tags) + self.assertEqual(fmsgids, relayed_fmsgids)