summaryrefslogtreecommitdiff
path: root/tests/test_stream_xep_0313.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_stream_xep_0313.py')
-rw-r--r--tests/test_stream_xep_0313.py340
1 files changed, 340 insertions, 0 deletions
diff --git a/tests/test_stream_xep_0313.py b/tests/test_stream_xep_0313.py
new file mode 100644
index 00000000..25a3a926
--- /dev/null
+++ b/tests/test_stream_xep_0313.py
@@ -0,0 +1,340 @@
+import unittest
+from datetime import datetime
+from slixmpp.test import SlixTest
+from slixmpp import JID
+
+
+class TestMAM(SlixTest):
+
+ def setUp(self):
+ self.stream_start(plugins=['xep_0313'])
+
+ def tearDown(self):
+ self.stream_close()
+
+ def testRetrieveSimple(self):
+ """Test requesting MAM messages without RSM"""
+
+ msgs = []
+
+ async def test():
+ iq = await self.xmpp['xep_0313'].retrieve()
+ for message in iq['mam']['results']:
+ msgs.append(message)
+
+ fut = self.xmpp.wrap(test())
+ self.wait_()
+ self.send("""
+ <iq type='set' id='1'>
+ <query xmlns='urn:xmpp:mam:2' queryid='1' />
+ </iq>
+ """)
+
+ self.recv("""
+ <message id='abc' to='tester@localhost/resource'>
+ <result xmlns='urn:xmpp:mam:2' queryid='1'
+ id='28482-98726-73623'>
+ <forwarded xmlns='urn:xmpp:forward:0'>
+ <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>
+ <message xmlns='jabber:client' from="witch@shakespeare.lit"
+ to="tester@localhost">
+ <body>Hail to thee</body>
+ </message>
+ </forwarded>
+ </result>
+ </message>
+ """)
+
+ self.recv("""
+ <iq type="result" id="1" to="tester@localhost">
+ <fin xmlns="urn:xmpp:mam:2">
+ <first index='0'>28482-98726-73623</first>
+ <last>28482-98726-73623</last>
+ </fin>
+ </iq>
+ """)
+
+ self.run_coro(fut)
+ self.assertEqual(
+ msgs[0]['mam_result']['forwarded']['message']['body'],
+ "Hail to thee",
+ )
+ self.assertEqual(len(msgs),1)
+
+ def testRetrieveRSM(self):
+ """Test requesting MAM messages with RSM"""
+
+ msgs = []
+
+ async def test():
+ iterator = self.xmpp['xep_0313'].retrieve(
+ with_jid=JID('toto@titi'),
+ start='2010-06-07T00:00:00Z',
+ iterator=True,
+ )
+ async for page in iterator:
+ for message in page['mam']['results']:
+ msgs.append(message)
+
+ fut = self.xmpp.wrap(test())
+ self.wait_()
+ self.send("""
+ <iq type='set' id='2'>
+ <query xmlns='urn:xmpp:mam:2' queryid='2'>
+ <x xmlns='jabber:x:data' type='submit'>
+ <field var='FORM_TYPE' type='hidden'>
+ <value>urn:xmpp:mam:2</value>
+ </field>
+ <field var='with'>
+ <value>toto@titi</value>
+ </field>
+ <field var='start'>
+ <value>2010-06-07T00:00:00Z</value>
+ </field>
+ </x>
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>10</max>
+ </set>
+ </query>
+ </iq>
+ """)
+
+ self.recv("""
+ <message id='abc' to='tester@localhost/resource'>
+ <result xmlns='urn:xmpp:mam:2' queryid='2'
+ id='28482-98726-73623'>
+ <forwarded xmlns='urn:xmpp:forward:0'>
+ <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>
+ <message xmlns='jabber:client' from="witch@shakespeare.lit"
+ to="tester@localhost">
+ <body>Hail to thee</body>
+ </message>
+ </forwarded>
+ </result>
+ </message>
+ """)
+
+ self.recv("""
+ <iq type="result" id="2" to="tester@localhost">
+ <fin xmlns="urn:xmpp:mam:2">
+ <set xmlns='http://jabber.org/protocol/rsm'>
+ <first index='0'>28482-98726-73623</first>
+ <last>28482-98726-73623</last>
+ <count>2</count>
+ </set>
+ </fin>
+ </iq>
+ """)
+
+ self.send("""
+ <iq type='set' id='3'>
+ <query xmlns='urn:xmpp:mam:2' queryid='3'>
+ <x xmlns='jabber:x:data' type='submit'>
+ <field var='FORM_TYPE' type='hidden'>
+ <value>urn:xmpp:mam:2</value>
+ </field>
+ <field var='with'>
+ <value>toto@titi</value>
+ </field>
+ <field var='start'>
+ <value>2010-06-07T00:00:00Z</value>
+ </field>
+ </x>
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>10</max>
+ <after>28482-98726-73623</after>
+ </set>
+ </query>
+ </iq>
+ """)
+
+ self.recv("""
+ <message id='abc' to='tester@localhost/resource'>
+ <result xmlns='urn:xmpp:mam:2' queryid='3'
+ id='28482-98726-73624'>
+ <forwarded xmlns='urn:xmpp:forward:0'>
+ <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:26Z'/>
+ <message xmlns='jabber:client' from="witch@shakespeare.lit"
+ to="tester@localhost">
+ <body>Hi Y'all</body>
+ </message>
+ </forwarded>
+ </result>
+ </message>
+ """)
+
+ self.recv("""
+ <iq type="result" id="3" to="tester@localhost">
+ <fin xmlns="urn:xmpp:mam:2">
+ <set xmlns='http://jabber.org/protocol/rsm'>
+ <first index='1'>28482-98726-73624</first>
+ <last>28482-98726-73624</last>
+ <count>2</count>
+ </set>
+ </fin>
+ </iq>
+ """)
+
+ self.run_coro(fut)
+ self.assertEqual(
+ msgs[0]['mam_result']['forwarded']['message']['body'],
+ "Hail to thee",
+ )
+ self.assertEqual(
+ msgs[1]['mam_result']['forwarded']['message']['body'],
+ "Hi Y'all",
+ )
+ self.assertEqual(len(msgs), 2)
+
+ def testIterate(self):
+ """Test iterating over MAM messages with RSM"""
+
+ msgs = []
+
+ async def test():
+ iterator = self.xmpp['xep_0313'].iterate(
+ with_jid=JID('toto@titi'),
+ start='2010-06-07T00:00:00Z',
+ )
+ async for message in iterator:
+ msgs.append(message)
+
+ fut = self.xmpp.wrap(test())
+ self.wait_()
+ self.send("""
+ <iq type='set' id='2'>
+ <query xmlns='urn:xmpp:mam:2' queryid='2'>
+ <x xmlns='jabber:x:data' type='submit'>
+ <field var='FORM_TYPE' type='hidden'>
+ <value>urn:xmpp:mam:2</value>
+ </field>
+ <field var='with'>
+ <value>toto@titi</value>
+ </field>
+ <field var='start'>
+ <value>2010-06-07T00:00:00Z</value>
+ </field>
+ </x>
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>10</max>
+ </set>
+ </query>
+ </iq>
+ """)
+
+ self.recv("""
+ <message id='abc' to='tester@localhost/resource'>
+ <result xmlns='urn:xmpp:mam:2' queryid='2'
+ id='28482-98726-73623'>
+ <forwarded xmlns='urn:xmpp:forward:0'>
+ <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:25Z'/>
+ <message xmlns='jabber:client' from="witch@shakespeare.lit"
+ to="tester@localhost">
+ <body>Hail to thee</body>
+ </message>
+ </forwarded>
+ </result>
+ </message>
+ """)
+
+ self.recv("""
+ <iq type="result" id="2" to="tester@localhost">
+ <fin xmlns="urn:xmpp:mam:2">
+ <set xmlns='http://jabber.org/protocol/rsm'>
+ <first index='0'>28482-98726-73623</first>
+ <last>28482-98726-73623</last>
+ <count>2</count>
+ </set>
+ </fin>
+ </iq>
+ """)
+
+ self.send("""
+ <iq type='set' id='3'>
+ <query xmlns='urn:xmpp:mam:2' queryid='3'>
+ <x xmlns='jabber:x:data' type='submit'>
+ <field var='FORM_TYPE' type='hidden'>
+ <value>urn:xmpp:mam:2</value>
+ </field>
+ <field var='with'>
+ <value>toto@titi</value>
+ </field>
+ <field var='start'>
+ <value>2010-06-07T00:00:00Z</value>
+ </field>
+ </x>
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>10</max>
+ <after>28482-98726-73623</after>
+ </set>
+ </query>
+ </iq>
+ """)
+
+ self.recv("""
+ <message id='abc' to='tester@localhost/resource'>
+ <result xmlns='urn:xmpp:mam:2' queryid='3'
+ id='28482-98726-73624'>
+ <forwarded xmlns='urn:xmpp:forward:0'>
+ <delay xmlns='urn:xmpp:delay' stamp='2010-07-10T23:08:26Z'/>
+ <message xmlns='jabber:client' from="witch@shakespeare.lit"
+ to="tester@localhost">
+ <body>Hi Y'all</body>
+ </message>
+ </forwarded>
+ </result>
+ </message>
+ """)
+
+ self.recv("""
+ <iq type="result" id="3" to="tester@localhost">
+ <fin xmlns="urn:xmpp:mam:2">
+ <set xmlns='http://jabber.org/protocol/rsm'>
+ <first index='1'>28482-98726-73624</first>
+ <last>28482-98726-73624</last>
+ <count>2</count>
+ </set>
+ </fin>
+ </iq>
+ """)
+
+ self.run_coro(fut)
+ self.assertEqual(
+ msgs[0]['mam_result']['forwarded']['message']['body'],
+ "Hail to thee",
+ )
+ self.assertEqual(
+ msgs[1]['mam_result']['forwarded']['message']['body'],
+ "Hi Y'all",
+ )
+ self.assertEqual(len(msgs), 2)
+
+ def test_get_metadata(self):
+ """Test a MAM metadata retrieval"""
+ fut = self.xmpp.wrap(
+ self.xmpp.plugin['xep_0313'].get_archive_metadata()
+ )
+ self.wait_()
+ self.send("""
+ <iq type='get' id='1'>
+ <metadata xmlns='urn:xmpp:mam:2'/>
+ </iq>
+ """)
+ self.recv("""
+ <iq type='result' id='1'>
+ <metadata xmlns='urn:xmpp:mam:2'>
+ <start id='YWxwaGEg' timestamp='2008-08-22T21:09:04Z' />
+ <end id='b21lZ2Eg' timestamp='2020-04-20T14:34:21Z' />
+ </metadata>
+ </iq>
+ """)
+ self.run_coro(fut)
+ result = fut.result()
+ self.assertEqual(result['mam_metadata']['start']['id'], "YWxwaGEg")
+ self.assertEqual(
+ result['mam_metadata']['start']['timestamp'],
+ datetime.fromisoformat('2008-08-22T21:09:04+00:00')
+ )
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestMAM)