Add the 'connecting' event
[slixmpp.git] / tests / test_stream_xep_0059.py
blob6f929e8c03bf825aa3bdaa3957146a83340d7b2d
1 import threading
3 import unittest
4 from slixmpp.test import SlixTest
5 from slixmpp.xmlstream import register_stanza_plugin
6 from slixmpp.plugins.xep_0030 import DiscoItems
7 from slixmpp.plugins.xep_0059 import ResultIterator, Set
10 class TestStreamSet(SlixTest):
12 def setUp(self):
13 register_stanza_plugin(DiscoItems, Set)
15 def tearDown(self):
16 self.stream_close()
18 def iter(self, rev=False):
19 q = self.xmpp.Iq()
20 q['type'] = 'get'
21 it = ResultIterator(q, 'disco_items', amount='1', reverse=rev)
22 for i in it:
23 for j in i['disco_items']['items']:
24 self.items.append(j[0])
26 def testResultIterator(self):
27 self.items = []
28 self.stream_start(mode='client')
29 t = threading.Thread(target=self.iter)
30 t.start()
31 self.send("""
32 <iq type="get" id="2">
33 <query xmlns="http://jabber.org/protocol/disco#items">
34 <set xmlns="http://jabber.org/protocol/rsm">
35 <max>1</max>
36 </set>
37 </query>
38 </iq>
39 """)
40 self.recv("""
41 <iq type="result" id="2">
42 <query xmlns="http://jabber.org/protocol/disco#items">
43 <item jid="item1" />
44 <set xmlns="http://jabber.org/protocol/rsm">
45 <last>item1</last>
46 </set>
47 </query>
48 </iq>
49 """)
50 self.send("""
51 <iq type="get" id="3">
52 <query xmlns="http://jabber.org/protocol/disco#items">
53 <set xmlns="http://jabber.org/protocol/rsm">
54 <max>1</max>
55 <after>item1</after>
56 </set>
57 </query>
58 </iq>
59 """)
60 self.recv("""
61 <iq type="result" id="3">
62 <query xmlns="http://jabber.org/protocol/disco#items">
63 <item jid="item2" />
64 <set xmlns="http://jabber.org/protocol/rsm">
65 <last>item2</last>
66 </set>
67 </query>
68 </iq>
69 """)
70 self.send("""
71 <iq type="get" id="4">
72 <query xmlns="http://jabber.org/protocol/disco#items">
73 <set xmlns="http://jabber.org/protocol/rsm">
74 <max>1</max>
75 <after>item2</after>
76 </set>
77 </query>
78 </iq>
79 """)
80 self.recv("""
81 <iq type="result" id="4">
82 <query xmlns="http://jabber.org/protocol/disco#items">
83 <item jid="item2" />
84 <set xmlns="http://jabber.org/protocol/rsm">
85 </set>
86 </query>
87 </iq>
88 """)
89 t.join()
90 self.failUnless(self.items == ['item1', 'item2'])
92 def testResultIteratorReverse(self):
93 self.items = []
94 self.stream_start(mode='client')
96 t = threading.Thread(target=self.iter, args=(True,))
97 t.start()
99 self.send("""
100 <iq type="get" id="2">
101 <query xmlns="http://jabber.org/protocol/disco#items">
102 <set xmlns="http://jabber.org/protocol/rsm">
103 <max>1</max>
104 <before />
105 </set>
106 </query>
107 </iq>
108 """)
109 self.recv("""
110 <iq type="result" id="2">
111 <query xmlns="http://jabber.org/protocol/disco#items">
112 <item jid="item2" />
113 <set xmlns="http://jabber.org/protocol/rsm">
114 <first>item2</first>
115 </set>
116 </query>
117 </iq>
118 """)
119 self.send("""
120 <iq type="get" id="3">
121 <query xmlns="http://jabber.org/protocol/disco#items">
122 <set xmlns="http://jabber.org/protocol/rsm">
123 <max>1</max>
124 <before>item2</before>
125 </set>
126 </query>
127 </iq>
128 """)
129 self.recv("""
130 <iq type="result" id="3">
131 <query xmlns="http://jabber.org/protocol/disco#items">
132 <item jid="item1" />
133 <set xmlns="http://jabber.org/protocol/rsm">
134 <first>item1</first>
135 </set>
136 </query>
137 </iq>
138 """)
139 self.send("""
140 <iq type="get" id="4">
141 <query xmlns="http://jabber.org/protocol/disco#items">
142 <set xmlns="http://jabber.org/protocol/rsm">
143 <max>1</max>
144 <before>item1</before>
145 </set>
146 </query>
147 </iq>
148 """)
149 self.recv("""
150 <iq type="result" id="4">
151 <query xmlns="http://jabber.org/protocol/disco#items">
152 <item jid="item1" />
153 <set xmlns="http://jabber.org/protocol/rsm">
154 </set>
155 </query>
156 </iq>
157 """)
159 t.join()
160 self.failUnless(self.items == ['item2', 'item1'])
163 suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamSet)