summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_stanza_xep_0059.py106
-rw-r--r--tests/test_stream_xep_0030.py48
-rw-r--r--tests/test_stream_xep_0059.py162
-rw-r--r--tests/test_stream_xep_0092.py69
4 files changed, 385 insertions, 0 deletions
diff --git a/tests/test_stanza_xep_0059.py b/tests/test_stanza_xep_0059.py
new file mode 100644
index 00000000..913436a6
--- /dev/null
+++ b/tests/test_stanza_xep_0059.py
@@ -0,0 +1,106 @@
+from sleekxmpp.test import *
+from sleekxmpp.plugins.xep_0059 import Set
+
+
+class TestSetStanzas(SleekTest):
+
+ def testSetFirstIndex(self):
+ s = Set()
+ s['first'] = 'id'
+ s.set_first_index('10')
+ self.check(s, """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <first index="10">id</first>
+ </set>
+ """)
+
+ def testGetFirstIndex(self):
+ xml_string = """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <first index="10">id</first>
+ </set>
+ """
+ s = Set(ET.fromstring(xml_string))
+ expected = '10'
+ self.failUnless(s['first_index'] == expected)
+
+ def testDelFirstIndex(self):
+ xml_string = """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <first index="10">id</first>
+ </set>
+ """
+ s = Set(ET.fromstring(xml_string))
+ del s['first_index']
+ self.check(s, """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <first>id</first>
+ </set>
+ """)
+
+ def testSetBefore(self):
+ s = Set()
+ s['before'] = True
+ self.check(s, """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <before />
+ </set>
+ """)
+
+ def testGetBefore(self):
+ xml_string = """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <before />
+ </set>
+ """
+ s = Set(ET.fromstring(xml_string))
+ expected = True
+ self.failUnless(s['before'] == expected)
+
+ def testGetBefore(self):
+ xml_string = """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <before />
+ </set>
+ """
+ s = Set(ET.fromstring(xml_string))
+ del s['before']
+ self.check(s, """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ </set>
+ """)
+
+ def testSetBeforeVal(self):
+ s = Set()
+ s['before'] = 'id'
+ self.check(s, """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <before>id</before>
+ </set>
+ """)
+
+ def testGetBeforeVal(self):
+ xml_string = """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <before>id</before>
+ </set>
+ """
+ s = Set(ET.fromstring(xml_string))
+ expected = 'id'
+ self.failUnless(s['before'] == expected)
+
+ def testGetBeforeVal(self):
+ xml_string = """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <before>id</before>
+ </set>
+ """
+ s = Set(ET.fromstring(xml_string))
+ del s['before']
+ self.check(s, """
+ <set xmlns="http://jabber.org/protocol/rsm">
+ </set>
+ """)
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestSetStanzas)
diff --git a/tests/test_stream_xep_0030.py b/tests/test_stream_xep_0030.py
index 25a41027..c960fc7a 100644
--- a/tests/test_stream_xep_0030.py
+++ b/tests/test_stream_xep_0030.py
@@ -1,3 +1,4 @@
+import sys
import time
import threading
@@ -11,6 +12,7 @@ class TestStreamDisco(SleekTest):
"""
def tearDown(self):
+ sys.excepthook = sys.__excepthook__
self.stream_close()
def testInfoEmptyDefaultNode(self):
@@ -524,5 +526,51 @@ class TestStreamDisco(SleekTest):
self.assertEqual(results, items,
"Unexpected items: %s" % results)
+ def testGetItemsIterator(self):
+ """Test interaction between XEP-0030 and XEP-0059 plugins."""
+
+ raised_exceptions = []
+
+ def catch_exception(*args, **kwargs):
+ raised_exceptions.append(True)
+
+ sys.excepthook = catch_exception
+
+ self.stream_start(mode='client',
+ plugins=['xep_0030', 'xep_0059'])
+
+ results = self.xmpp['xep_0030'].get_items(jid='foo@localhost',
+ node='bar',
+ iterator=True)
+ results.amount = 10
+
+ t = threading.Thread(name="get_items_iterator",
+ target=results.next)
+ t.start()
+
+ self.send("""
+ <iq id="2" type="get" to="foo@localhost">
+ <query xmlns="http://jabber.org/protocol/disco#items"
+ node="bar">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>10</max>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq id="2" type="result" to="tester@localhost">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ </set>
+ </query>
+ </iq>
+ """)
+
+ t.join()
+
+ self.assertEqual(raised_exceptions, [True],
+ "StopIteration was not raised: %s" % raised_exceptions)
+
suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamDisco)
diff --git a/tests/test_stream_xep_0059.py b/tests/test_stream_xep_0059.py
new file mode 100644
index 00000000..3a99842b
--- /dev/null
+++ b/tests/test_stream_xep_0059.py
@@ -0,0 +1,162 @@
+import threading
+
+from sleekxmpp.test import *
+from sleekxmpp.xmlstream import register_stanza_plugin
+from sleekxmpp.plugins.xep_0030 import DiscoItems
+from sleekxmpp.plugins.xep_0059 import ResultIterator, Set
+
+
+class TestStreamSet(SleekTest):
+
+ def setUp(self):
+ register_stanza_plugin(DiscoItems, Set)
+
+ def tearDown(self):
+ self.stream_close()
+
+ def iter(self, rev=False):
+ q = self.xmpp.Iq()
+ q['type'] = 'get'
+ it = ResultIterator(q, 'disco_items', '1', reverse=rev)
+ for i in it:
+ for j in i['disco_items']['items']:
+ self.items.append(j[0])
+
+ def testResultIterator(self):
+ self.items = []
+ self.stream_start(mode='client')
+ t = threading.Thread(target=self.iter)
+ t.start()
+ self.send("""
+ <iq type="get" id="2">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>1</max>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq type="result" id="2">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <item jid="item1" />
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <last>item1</last>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.send("""
+ <iq type="get" id="3">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>1</max>
+ <after>item1</after>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq type="result" id="3">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <item jid="item2" />
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <last>item2</last>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.send("""
+ <iq type="get" id="4">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>1</max>
+ <after>item2</after>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq type="result" id="4">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <item jid="item2" />
+ <set xmlns="http://jabber.org/protocol/rsm">
+ </set>
+ </query>
+ </iq>
+ """)
+ t.join()
+ self.failUnless(self.items == ['item1', 'item2'])
+
+ def testResultIteratorReverse(self):
+ self.items = []
+ self.stream_start(mode='client')
+
+ t = threading.Thread(target=self.iter, args=(True,))
+ t.start()
+
+ self.send("""
+ <iq type="get" id="2">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>1</max>
+ <before />
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq type="result" id="2">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <item jid="item2" />
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <first>item2</first>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.send("""
+ <iq type="get" id="3">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>1</max>
+ <before>item2</before>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq type="result" id="3">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <item jid="item1" />
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <first>item1</first>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.send("""
+ <iq type="get" id="4">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <set xmlns="http://jabber.org/protocol/rsm">
+ <max>1</max>
+ <before>item1</before>
+ </set>
+ </query>
+ </iq>
+ """)
+ self.recv("""
+ <iq type="result" id="4">
+ <query xmlns="http://jabber.org/protocol/disco#items">
+ <item jid="item1" />
+ <set xmlns="http://jabber.org/protocol/rsm">
+ </set>
+ </query>
+ </iq>
+ """)
+
+ t.join()
+ self.failUnless(self.items == ['item2', 'item1'])
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamSet)
diff --git a/tests/test_stream_xep_0092.py b/tests/test_stream_xep_0092.py
new file mode 100644
index 00000000..4a038558
--- /dev/null
+++ b/tests/test_stream_xep_0092.py
@@ -0,0 +1,69 @@
+import threading
+
+from sleekxmpp.test import *
+
+
+class TestStreamSet(SleekTest):
+
+ def tearDown(self):
+ self.stream_close()
+
+ def testHandleSoftwareVersionRequest(self):
+ self.stream_start(mode='client', plugins=['xep_0030', 'xep_0092'])
+
+ self.xmpp['xep_0092'].name = 'SleekXMPP'
+ self.xmpp['xep_0092'].version = 'dev'
+ self.xmpp['xep_0092'].os = 'Linux'
+
+ self.recv("""
+ <iq type="get" id="1">
+ <query xmlns="jabber:iq:version" />
+ </iq>
+ """)
+
+ self.send("""
+ <iq type="result" id="1">
+ <query xmlns="jabber:iq:version">
+ <name>SleekXMPP</name>
+ <version>dev</version>
+ <os>Linux</os>
+ </query>
+ </iq>
+ """)
+
+ def testMakeSoftwareVersionRequest(self):
+ results = []
+
+ def query():
+ r = self.xmpp['xep_0092'].get_version('foo@bar')
+ results.append(r)
+
+ self.stream_start(mode='client', plugins=['xep_0030', 'xep_0092'])
+
+ t = threading.Thread(target=query)
+ t.start()
+
+ self.send("""
+ <iq type="get" id="1" to="foo@bar">
+ <query xmlns="jabber:iq:version" />
+ </iq>
+ """)
+
+ self.recv("""
+ <iq type="result" id="1" from="foo@bar" to="tester@localhost">
+ <query xmlns="jabber:iq:version">
+ <name>Foo</name>
+ <version>1.0</version>
+ <os>Linux</os>
+ </query>
+ </iq>
+ """)
+
+ t.join()
+
+ expected = [{'name': 'Foo', 'version': '1.0', 'os':'Linux'}]
+ self.assertEqual(results, expected,
+ "Did not receive expected results: %s" % results)
+
+
+suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamSet)