3 from sleekxmpp
.test
import *
4 from sleekxmpp
.xmlstream
.handler
import *
5 from sleekxmpp
.xmlstream
.matcher
import *
8 class TestHandlers(SleekTest
):
10 Test using handlers and waiters.
19 def testCallback(self
):
20 """Test using stream callback handlers."""
22 def callback_handler(stanza
):
29 callback
= Callback('Test Callback',
30 MatchXPath('{test}tester'),
33 self
.xmpp
.registerHandler(callback
)
35 self
.recv("""<tester xmlns="test" />""")
38 msg
['body'] = 'Success!'
42 """Test using stream waiter handler."""
44 def waiter_handler(stanza
):
49 reply
= iq
.send(block
=True)
53 <body>Successful: %s</body>
57 self
.xmpp
.add_event_handler('message', waiter_handler
, threaded
=True)
59 # Send message to trigger waiter_handler
66 # Check that Iq was sent by waiter_handler
75 <iq id="test" type="result">
76 <query xmlns="test" />
80 # Check that waiter_handler received the reply
82 msg
['body'] = 'Successful: test'
85 def testWaiterTimeout(self
):
86 """Test that waiter handler is removed after timeout."""
88 def waiter_handler(stanza
):
93 reply
= iq
.send(block
=True, timeout
=0)
95 self
.xmpp
.add_event_handler('message', waiter_handler
, threaded
=True)
97 # Start test by triggerig waiter_handler
98 self
.recv("""<message><body>Start Test</body></message>""")
100 # Check that Iq was sent to trigger start of timeout period
104 iq
['query'] = 'test2'
107 # Check that the waiter is no longer registered
108 waiter_exists
= self
.xmpp
.removeHandler('IqWait_test2')
110 self
.failUnless(waiter_exists
== False,
111 "Waiter handler was not removed.")
113 def testIqCallback(self
):
114 """Test that iq.send(callback=handle_foo) works."""
122 iq
['id'] = 'test-foo'
123 iq
['to'] = 'user@localhost'
125 iq
.send(callback
=handle_foo
)
128 <iq type="get" id="test-foo" to="user@localhost">
129 <query xmlns="foo" />
134 <iq type="result" id="test-foo"
136 from="user@localhost">
143 # Give event queue time to process
146 self
.failUnless(events
== ['foo'],
147 "Iq callback was not executed: %s" % events
)
150 suite
= unittest
.TestLoader().loadTestsFromTestCase(TestHandlers
)