2010-10-07 14:58:13 +00:00
|
|
|
from sleekxmpp.test import *
|
2010-08-27 20:42:26 +00:00
|
|
|
from sleekxmpp.xmlstream.handler import *
|
|
|
|
from sleekxmpp.xmlstream.matcher import *
|
|
|
|
|
2010-10-07 14:58:13 +00:00
|
|
|
|
2010-08-27 20:42:26 +00:00
|
|
|
class TestHandlers(SleekTest):
|
|
|
|
"""
|
2010-10-06 22:10:04 +00:00
|
|
|
Test using handlers and waiters.
|
2010-08-27 20:42:26 +00:00
|
|
|
"""
|
|
|
|
|
|
|
|
def setUp(self):
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_start()
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
def tearDown(self):
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_close()
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
def testCallback(self):
|
|
|
|
"""Test using stream callback handlers."""
|
|
|
|
|
|
|
|
def callback_handler(stanza):
|
|
|
|
self.xmpp.sendRaw("""
|
|
|
|
<message>
|
|
|
|
<body>Success!</body>
|
|
|
|
</message>
|
|
|
|
""")
|
|
|
|
|
|
|
|
callback = Callback('Test Callback',
|
|
|
|
MatchXPath('{test}tester'),
|
|
|
|
callback_handler)
|
|
|
|
|
|
|
|
self.xmpp.registerHandler(callback)
|
|
|
|
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_recv("""<tester xmlns="test" />""")
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
msg = self.Message()
|
|
|
|
msg['body'] = 'Success!'
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_send_message(msg)
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
def testWaiter(self):
|
|
|
|
"""Test using stream waiter handler."""
|
|
|
|
|
|
|
|
def waiter_handler(stanza):
|
|
|
|
iq = self.xmpp.Iq()
|
|
|
|
iq['id'] = 'test'
|
|
|
|
iq['type'] = 'set'
|
|
|
|
iq['query'] = 'test'
|
|
|
|
reply = iq.send(block=True)
|
|
|
|
if reply:
|
|
|
|
self.xmpp.sendRaw("""
|
|
|
|
<message>
|
|
|
|
<body>Successful: %s</body>
|
|
|
|
</message>
|
|
|
|
""" % reply['query'])
|
|
|
|
|
|
|
|
self.xmpp.add_event_handler('message', waiter_handler, threaded=True)
|
|
|
|
|
|
|
|
# Send message to trigger waiter_handler
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_recv("""
|
2010-08-27 20:42:26 +00:00
|
|
|
<message>
|
|
|
|
<body>Testing</body>
|
|
|
|
</message>
|
|
|
|
""")
|
|
|
|
|
|
|
|
# Check that Iq was sent by waiter_handler
|
|
|
|
iq = self.Iq()
|
|
|
|
iq['id'] = 'test'
|
|
|
|
iq['type'] = 'set'
|
|
|
|
iq['query'] = 'test'
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_send_iq(iq)
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
# Send the reply Iq
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_recv("""
|
2010-08-27 20:42:26 +00:00
|
|
|
<iq id="test" type="result">
|
|
|
|
<query xmlns="test" />
|
|
|
|
</iq>
|
|
|
|
""")
|
|
|
|
|
|
|
|
# Check that waiter_handler received the reply
|
|
|
|
msg = self.Message()
|
|
|
|
msg['body'] = 'Successful: test'
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_send_message(msg)
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
def testWaiterTimeout(self):
|
|
|
|
"""Test that waiter handler is removed after timeout."""
|
|
|
|
|
|
|
|
def waiter_handler(stanza):
|
|
|
|
iq = self.xmpp.Iq()
|
|
|
|
iq['id'] = 'test2'
|
|
|
|
iq['type'] = 'set'
|
|
|
|
iq['query'] = 'test2'
|
|
|
|
reply = iq.send(block=True, timeout=0)
|
|
|
|
|
|
|
|
self.xmpp.add_event_handler('message', waiter_handler, threaded=True)
|
|
|
|
|
|
|
|
# Start test by triggerig waiter_handler
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_recv("""<message><body>Start Test</body></message>""")
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
# Check that Iq was sent to trigger start of timeout period
|
|
|
|
iq = self.Iq()
|
|
|
|
iq['id'] = 'test2'
|
|
|
|
iq['type'] = 'set'
|
|
|
|
iq['query'] = 'test2'
|
2010-10-07 13:22:27 +00:00
|
|
|
self.stream_send_iq(iq)
|
2010-08-27 20:42:26 +00:00
|
|
|
|
|
|
|
# Check that the waiter is no longer registered
|
|
|
|
waiter_exists = self.xmpp.removeHandler('IqWait_test2')
|
|
|
|
|
|
|
|
self.failUnless(waiter_exists == False,
|
|
|
|
"Waiter handler was not removed.")
|
|
|
|
|
|
|
|
|
|
|
|
suite = unittest.TestLoader().loadTestsFromTestCase(TestHandlers)
|