summaryrefslogtreecommitdiff
path: root/sleekxmpp
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2010-11-17 15:45:16 -0500
committerLance Stout <lancestout@gmail.com>2010-11-17 15:45:16 -0500
commitea48bb5ac58aa186c18c42c83e21a6a636bd22a9 (patch)
treed04eb4d423b9ec9c35e5636a649a0dccdd2ca862 /sleekxmpp
parent6ee8a2980c2a7c9a8c65453b1d2c551717069ce5 (diff)
downloadslixmpp-ea48bb5ac58aa186c18c42c83e21a6a636bd22a9.tar.gz
slixmpp-ea48bb5ac58aa186c18c42c83e21a6a636bd22a9.tar.bz2
slixmpp-ea48bb5ac58aa186c18c42c83e21a6a636bd22a9.tar.xz
slixmpp-ea48bb5ac58aa186c18c42c83e21a6a636bd22a9.zip
Fixed some live stream test errors.
Added test demonstrating using multiple stream clients in a single test.
Diffstat (limited to 'sleekxmpp')
-rw-r--r--sleekxmpp/test/livesocket.py21
-rw-r--r--sleekxmpp/test/sleektest.py33
2 files changed, 44 insertions, 10 deletions
diff --git a/sleekxmpp/test/livesocket.py b/sleekxmpp/test/livesocket.py
index 5e8c5471..3e0f2135 100644
--- a/sleekxmpp/test/livesocket.py
+++ b/sleekxmpp/test/livesocket.py
@@ -7,6 +7,7 @@
"""
import socket
+import threading
try:
import queue
except ImportError:
@@ -40,6 +41,8 @@ class TestLiveSocket(object):
self.recv_buffer = []
self.recv_queue = queue.Queue()
self.send_queue = queue.Queue()
+ self.send_queue_lock = threading.Lock()
+ self.recv_queue_lock = threading.Lock()
self.is_live = True
def __getattr__(self, name):
@@ -108,7 +111,8 @@ class TestLiveSocket(object):
Placeholders. Same as for socket.recv.
"""
data = self.socket.recv(*args, **kwargs)
- self.recv_queue.put(data)
+ with self.recv_queue_lock:
+ self.recv_queue.put(data)
return data
def send(self, data):
@@ -120,7 +124,8 @@ class TestLiveSocket(object):
Arguments:
data -- String value to write.
"""
- self.send_queue.put(data)
+ with self.send_queue_lock:
+ self.send_queue.put(data)
self.socket.send(data)
# ------------------------------------------------------------------
@@ -143,3 +148,15 @@ class TestLiveSocket(object):
Placeholders, same as socket.recv()
"""
return self.recv(*args, **kwargs)
+
+ def clear(self):
+ """
+ Empty the send queue, typically done once the session has started to
+ remove the feature negotiation and log in stanzas.
+ """
+ with self.send_queue_lock:
+ for i in range(0, self.send_queue.qsize()):
+ self.send_queue.get(block=False)
+ with self.recv_queue_lock:
+ for i in range(0, self.recv_queue.qsize()):
+ self.recv_queue.get(block=False)
diff --git a/sleekxmpp/test/sleektest.py b/sleekxmpp/test/sleektest.py
index d7a6147b..27a7556f 100644
--- a/sleekxmpp/test/sleektest.py
+++ b/sleekxmpp/test/sleektest.py
@@ -7,6 +7,10 @@
"""
import unittest
+try:
+ import Queue as queue
+except:
+ import queue
import sleekxmpp
from sleekxmpp import ClientXMPP, ComponentXMPP
@@ -279,6 +283,10 @@ class SleekTest(unittest.TestCase):
else:
raise ValueError("Unknown XMPP connection mode.")
+ # We will use this to wait for the session_start event
+ # for live connections.
+ skip_queue = queue.Queue()
+
if socket == 'mock':
self.xmpp.set_socket(TestSocket())
@@ -293,6 +301,10 @@ class SleekTest(unittest.TestCase):
self.xmpp.socket.recv_data(header)
elif socket == 'live':
self.xmpp.socket_class = TestLiveSocket
+ def wait_for_session(x):
+ self.xmpp.socket.clear()
+ skip_queue.put('started')
+ self.xmpp.add_event_handler('session_start', wait_for_session)
self.xmpp.connect()
else:
raise ValueError("Unknown socket type.")
@@ -300,10 +312,13 @@ class SleekTest(unittest.TestCase):
self.xmpp.register_plugins()
self.xmpp.process(threaded=True)
if skip:
- # Clear startup stanzas
- self.xmpp.socket.next_sent(timeout=1)
- if mode == 'component':
+ if socket != 'live':
+ # Clear startup stanzas
self.xmpp.socket.next_sent(timeout=1)
+ if mode == 'component':
+ self.xmpp.socket.next_sent(timeout=1)
+ else:
+ skip_queue.get(block=True, timeout=10)
def make_header(self, sto='',
sfrom='',
@@ -573,11 +588,13 @@ class SleekTest(unittest.TestCase):
Defaults to the value of self.match_method.
"""
sent = self.xmpp.socket.next_sent(timeout)
- if isinstance(data, str):
- xml = self.parse_xml(data)
- self.fix_namespaces(xml, 'jabber:client')
- data = self.xmpp._build_stanza(xml, 'jabber:client')
- self.check(data, sent,
+ if sent is None:
+ return False
+ print sent
+ xml = self.parse_xml(sent)
+ self.fix_namespaces(xml, 'jabber:client')
+ sent = self.xmpp._build_stanza(xml, 'jabber:client')
+ self.check(sent, data,
method=method,
defaults=defaults,
use_values=use_values)