Merge branch 'develop' into roster
This commit is contained in:
106
tests/test_stanza_xep_0059.py
Normal file
106
tests/test_stanza_xep_0059.py
Normal file
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
162
tests/test_stream_xep_0059.py
Normal file
162
tests/test_stream_xep_0059.py
Normal file
@@ -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)
|
||||
69
tests/test_stream_xep_0092.py
Normal file
69
tests/test_stream_xep_0092.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user