diff options
author | Senko Rasic <senko.rasic@collabora.co.uk> | 2007-06-13 11:17:58 +0000 |
---|---|---|
committer | Senko Rasic <senko.rasic@collabora.co.uk> | 2007-06-13 11:17:58 +0000 |
commit | 497cd634f55be8caaa6fe4f8b64ec8dbf42efaa7 (patch) | |
tree | 0354cc53b920cc0524ec068110e717d848914d1d /tests | |
parent | a56e844bd4430209b3a7a7ae61f193a979ebcbb0 (diff) |
synced testing framework with gabble's version and updated tests to use the new @match() feature
Diffstat (limited to 'tests')
-rw-r--r-- | tests/servicetest.py | 83 | ||||
-rw-r--r-- | tests/sofiatest.py | 10 | ||||
-rw-r--r-- | tests/test-handle-normalisation.py | 20 | ||||
-rw-r--r-- | tests/test-register-fail.py | 11 | ||||
-rw-r--r-- | tests/test-register.py | 18 |
5 files changed, 73 insertions, 69 deletions
diff --git a/tests/servicetest.py b/tests/servicetest.py index 05dddbd..d4675e1 100644 --- a/tests/servicetest.py +++ b/tests/servicetest.py @@ -30,6 +30,31 @@ def lazy(func): handler.__name__ = func.__name__ return handler +def match(type, **kw): + def decorate(func): + def handler(event, data): + if event.type != type: + return False + + for key, value in kw.iteritems(): + if not hasattr(event, key): + return False + + if getattr(event, key) != value: + return False + + return func(event, data) + + handler.__name__ = func.__name__ + return handler + + return decorate + +class Event: + def __init__(self, type, **kw): + self.__dict__.update(kw) + self.type = type + class EventTest: """Somewhat odd event dispatcher for asynchronous tests. @@ -81,9 +106,12 @@ class EventTest: if self.verbose: print 'got event:' + print '- type: %s' % event.type - for item in event: - print '- %s' % pprint.pformat(item) + for key in dir(event): + if key != 'type' and not key.startswith('_'): + print '- %s: %s' % ( + key, pprint.pformat(getattr(event, key))) try: ret = self.queue[0](event, self.data) @@ -148,10 +176,10 @@ def call_async(test, proxy, method, *args, **kw): resulting method return/error.""" def reply_func(*ret): - test.handle_event(('dbus-return', method) + ret) + test.handle_event(Event('dbus-return', method=method, value=ret)) def error_func(err): - test.handle_event(('dbus-error', method, err)) + test.handle_event(Event('dbus-error', method=method, error=err)) method_proxy = getattr(proxy, method) kw.update({'reply_handler': reply_func, 'error_handler': error_func}) @@ -159,37 +187,36 @@ def call_async(test, proxy, method, *args, **kw): def create_test(name, proto, params): - test = {} - - test['bus'] = dbus.SessionBus() - test['cm'] = test['bus'].get_object( + test = EventTest() + bus = dbus.SessionBus() + cm = bus.get_object( tp_name_prefix + '.ConnectionManager.%s' % name, tp_path_prefix + '/ConnectionManager/%s' % name) - test['cm_iface'] = dbus.Interface(test['cm'], - tp_name_prefix + '.ConnectionManager') + cm_iface = dbus.Interface(cm, tp_name_prefix + '.ConnectionManager') - connection_name, connection_path = test['cm_iface'].RequestConnection( + connection_name, connection_path = cm_iface.RequestConnection( proto, params) - test['conn'] = test['cm']._bus.get_object(connection_name, connection_path) - - test['conn_iface'] = dbus.Interface(test['conn'], tp_name_prefix + '.Connection') - - test['handler'] = EventTest() - - test['bus'].add_signal_receiver( - handler_function=lambda *args, **kw: - test['handler'].handle_event(( - 'dbus-signal', unwrap(kw['path']), kw['member'], - map(unwrap, args))), - - named_service=test['cm']._named_service, + conn = bus.get_object(connection_name, connection_path) + conn_iface = dbus.Interface(conn, tp_name_prefix + '.Connection') + + for name in ('bus', 'cm', 'cm_iface', 'conn', 'conn_iface'): + test.data[name] = locals()[name] + + bus.add_signal_receiver( + lambda *args, **kw: + test.handle_event( + Event('dbus-signal', + path=unwrap(kw['path'])[len(tp_path_prefix):], + signal=kw['member'], args=map(unwrap, args))), + None, # signal name + None, # interface + cm._named_service, path_keyword='path', - member_keyword='member' + member_keyword='member', + byte_arrays=True ) - test['handler'].data = test - test['test'] = test - return test['handler'] + return test def run_test(handler): diff --git a/tests/sofiatest.py b/tests/sofiatest.py index cddcaac..7ff1a1c 100644 --- a/tests/sofiatest.py +++ b/tests/sofiatest.py @@ -35,9 +35,9 @@ def go(register_cb, params=None): if params is not None: default_params.update(params) - test = servicetest.create_test('sofiasip', 'sip', default_params) - test.data['sip'] = SipProxy() - reactor.listenUDP(9090, test.data['sip']) - test.data['sip'].registrar_handler = register_cb - servicetest.run_test(test) + handler = servicetest.create_test('sofiasip', 'sip', default_params) + handler.data['sip'] = SipProxy() + reactor.listenUDP(9090, handler.data['sip']) + handler.data['sip'].registrar_handler = register_cb + servicetest.run_test(handler) diff --git a/tests/test-handle-normalisation.py b/tests/test-handle-normalisation.py index c6edfab..e1da6e7 100644 --- a/tests/test-handle-normalisation.py +++ b/tests/test-handle-normalisation.py @@ -1,21 +1,14 @@ -from servicetest import unwrap +from servicetest import unwrap, match from sofiatest import go import dbus +@match('dbus-signal', signal='StatusChanged', args=[1, 1]) def expect_connecting(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 1 return True +@match('dbus-signal', signal='StatusChanged', args=[0, 1]) def expect_connected(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 0 - tests = [ ('test', 'sip:test@127.0.0.1'), ('+123 / 45-67-89', 'sip:+123/45-67-89@127.0.0.1'), @@ -36,14 +29,11 @@ def expect_connected(event, data): print a, b raise Exception("test failed") - data['conn'].Disconnect() + data['conn_iface'].Disconnect() return True +@match('dbus-signal', signal='StatusChanged', args=[2, 1]) def expect_disconnected(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 2 return True def register_cb(message, host, port): diff --git a/tests/test-register-fail.py b/tests/test-register-fail.py index 963e5e6..4a33817 100644 --- a/tests/test-register-fail.py +++ b/tests/test-register-fail.py @@ -1,17 +1,12 @@ +from servicetest import match from sofiatest import go +@match('dbus-signal', signal='StatusChanged', args=[1, 1]) def expect_connecting(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 1 return True +@match('dbus-signal', signal='StatusChanged', args=[2, 3]) def expect_disconnected(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 2 return True def register_cb(message, host, port): diff --git a/tests/test-register.py b/tests/test-register.py index d4f8896..c1db770 100644 --- a/tests/test-register.py +++ b/tests/test-register.py @@ -1,25 +1,17 @@ +from servicetest import match from sofiatest import go +@match('dbus-signal', signal='StatusChanged', args=[1, 1]) def expect_connecting(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 1 return True +@match('dbus-signal', signal='StatusChanged', args=[0, 1]) def expect_connected(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 0 - data['conn'].Disconnect() + data['conn_iface'].Disconnect() return True +@match('dbus-signal', signal='StatusChanged', args=[2, 1]) def expect_disconnected(event, data): - if event[2] != 'StatusChanged': - return False - - assert event[3][0] == 2 return True def register_cb(message, host, port): |