Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test/lib
diff options
context:
space:
mode:
authorStephan Erb <steve-e@h3c.de>2009-01-11 16:49:03 +0300
committerStephan Erb <steve-e@h3c.de>2009-01-11 16:49:03 +0300
commita757177e452f869938583014649266d804dfcb79 (patch)
treeddf37a9df347cfa05b49f6c1096b539050f255ac /test/lib
parent8a19e11bee032a75affe98c17cbfbd7f1cffce2f (diff)
Improve code coverage of our testsuites and do some refactoring.
* resolver does not depend on GTK anymore * renamed a few modules for consistency * moved all mocks to lib/ * let client_nb test work again. Was broken here There are many failing tests, help appreciated :-)
Diffstat (limited to 'test/lib')
-rw-r--r--test/lib/__init__.py10
-rwxr-xr-xtest/lib/data.py2
-rw-r--r--test/lib/gajim_mocks.py (renamed from test/lib/mocks.py)6
-rw-r--r--test/lib/xmpp_mocks.py98
4 files changed, 110 insertions, 6 deletions
diff --git a/test/lib/__init__.py b/test/lib/__init__.py
index 2b99a7e23..4b5f8ca12 100644
--- a/test/lib/__init__.py
+++ b/test/lib/__init__.py
@@ -1,5 +1,5 @@
import sys
-import os.path
+import os
import getopt
use_x = True
@@ -12,7 +12,8 @@ for o, a in opts:
gajim_root = os.path.join(os.path.abspath(os.path.dirname(__file__)), '../..')
-# look for modules in the CWD, then gajim/test/lib, then gajim/src, then everywhere else
+# look for modules in the CWD, then gajim/test/lib, then gajim/src,
+# then everywhere else
sys.path.insert(1, gajim_root + '/src')
sys.path.insert(1, gajim_root + '/test/lib')
@@ -23,8 +24,6 @@ configdir = gajim_root + '/test/tmp'
import __builtin__
__builtin__._ = lambda x: x
-import os
-
def setup_env():
# wipe config directory
if os.path.isdir(configdir):
@@ -40,6 +39,9 @@ def setup_env():
# for some reason common.gajim needs to be imported before xmpppy?
from common import gajim
+ import logging
+ logging.basicConfig()
+
gajim.DATA_DIR = gajim_root + '/data'
gajim.use_x = use_x
diff --git a/test/lib/data.py b/test/lib/data.py
index e74e9c01b..c713de0ac 100755
--- a/test/lib/data.py
+++ b/test/lib/data.py
@@ -52,6 +52,7 @@ contacts[account3] = {
# 'ask': None, 'groups': [], 'name': None,
# 'resources': {}, 'subscription': u'both'}
}
+
# We have contacts that are not in roster but only specified in the metadata
metacontact_data = [
[{'account': account3,
@@ -75,3 +76,4 @@ metacontact_data = [
'order': 0}]
]
+# vim: se ts=3:
diff --git a/test/lib/mocks.py b/test/lib/gajim_mocks.py
index a58d24de8..44b18f037 100644
--- a/test/lib/mocks.py
+++ b/test/lib/gajim_mocks.py
@@ -1,6 +1,8 @@
-# gajim-specific mock objects
-from mock import Mock
+'''
+Module with dummy classes for Gajim specific unit testing
+'''
+from mock import Mock
from common import gajim
from common.connection_handlers import ConnectionHandlersBase
diff --git a/test/lib/xmpp_mocks.py b/test/lib/xmpp_mocks.py
new file mode 100644
index 000000000..4b6b469ad
--- /dev/null
+++ b/test/lib/xmpp_mocks.py
@@ -0,0 +1,98 @@
+'''
+Module with dummy classes for unit testing of XMPP and related code.
+'''
+
+import threading, time
+
+from mock import Mock
+
+from common.xmpp import idlequeue
+from common.xmpp.plugin import PlugIn
+
+IDLEQUEUE_INTERVAL = 0.2 # polling interval. 200ms is used in Gajim as default
+IDLEMOCK_TIMEOUT = 30 # how long we wait for an event
+
+class IdleQueueThread(threading.Thread):
+ '''
+ Thread for regular processing of idlequeue.
+ '''
+ def __init__(self):
+ self.iq = idlequeue.IdleQueue()
+ self.stop = threading.Event() # Event to stop the thread main loop.
+ self.stop.clear()
+ threading.Thread.__init__(self)
+
+ def run(self):
+ while not self.stop.isSet():
+ self.iq.process()
+ time.sleep(IDLEQUEUE_INTERVAL)
+
+ def stop_thread(self):
+ self.stop.set()
+
+
+class IdleMock:
+ '''
+ Serves as template for testing objects that are normally controlled by GUI.
+ Allows to wait for asynchronous callbacks with wait() method.
+ '''
+ def __init__(self):
+ self._event = threading.Event()
+ self._event.clear()
+
+ def wait(self):
+ '''
+ Block until some callback sets the event and clearing the event
+ subsequently.
+ Returns True if event was set, False on timeout
+ '''
+ self._event.wait(IDLEMOCK_TIMEOUT)
+ if self._event.is_set():
+ self._event.clear()
+ return True
+ else:
+ return False
+
+ def set_event(self):
+ self._event.set()
+
+
+class MockConnection(IdleMock, Mock):
+ '''
+ Class simulating Connection class from src/common/connection.py
+
+ It is derived from Mock in order to avoid defining all methods
+ from real Connection that are called from NBClient or Dispatcher
+ ( _event_dispatcher for example)
+ '''
+
+ def __init__(self, *args):
+ self.connect_succeeded = True
+ IdleMock.__init__(self)
+ Mock.__init__(self, *args)
+
+ def on_connect(self, success, *args):
+ '''
+ Method called after connecting - after receiving <stream:features>
+ from server (NOT after TLS stream restart) or connect failure
+ '''
+ self.connect_succeeded = success
+ self.set_event()
+
+
+ def on_auth(self, con, auth):
+ '''
+ Method called after authentication, regardless of the result.
+
+ :Parameters:
+ con : NonBlockingClient
+ reference to authenticated object
+ auth : string
+ type of authetication in case of success ('old_auth', 'sasl') or
+ None in case of auth failure
+ '''
+ self.auth_connection = con
+ self.auth = auth
+ self.set_event()
+
+# vim: se ts=3: