diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-03-24 19:41:25 +0000 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2014-03-27 15:59:19 +0000 |
commit | f524437d8bee65a3d0e4e84d8d907ea56e23bca0 (patch) | |
tree | 0b8a08618aec3f64f62b2b0f98eceee8553f4d61 | |
parent | 0d9b654b34ba66ccfb0ff500d65620a7d9f39e3d (diff) |
sync_dbus: use an implemented interface
-rw-r--r-- | tests/twisted/servicetest.py | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/tests/twisted/servicetest.py b/tests/twisted/servicetest.py index 86212f325..0902b55d4 100644 --- a/tests/twisted/servicetest.py +++ b/tests/twisted/servicetest.py @@ -577,13 +577,32 @@ def call_async(test, proxy, method, *args, **kw): method_proxy(*args, **kw) def sync_dbus(bus, q, proxy): - # Dummy D-Bus method call. We can't use DBus.Peer.Ping() because libdbus - # replies to that message immediately, rather than handing it up to - # dbus-glib and thence the application, which means that Ping()ing the - # application doesn't ensure that it's processed all D-Bus messages prior - # to our ping. - call_async(q, dbus.Interface(proxy, cs.TESTS), 'DummySyncDBus') - q.expect('dbus-error', method='DummySyncDBus') + # We need to use functionality that is actually implemented by tp-glib, + # because unimplemented and built-in functionality in GDBus can jump + # the queue. <https://bugzilla.gnome.org/show_bug.cgi?id=726259> + + if proxy.object_path == cs.AM_PATH: + call_async(q, dbus.Interface(proxy, cs.PROPERTIES_IFACE), + 'Get', cs.AM, 'Interfaces') + q.expect('dbus-return', method='Get') + elif proxy.object_path.startswith(cs.ACCOUNT_PATH_PREFIX): + call_async(q, dbus.Interface(proxy, cs.PROPERTIES_IFACE), + 'Get', cs.ACCOUNT, 'Enabled') + q.expect('dbus-return', method='Get') + elif proxy.object_path.startswith('/' + cs.CONN.replace('.', '/') + '/'): + # It could be a Connection or a Channel. Assume it's a Connection + # for now, that's what all the CM tests use in practice + call_async(q, dbus.Interface(proxy, cs.PROPERTIES_IFACE), + 'Get', cs.CONN, 'Status') + q.expect('dbus-return', method='Get') + elif proxy.object_path.startswith('/' + cs.CM.replace('.', '/') + '/'): + # It could be a ConnectionManager or a Protocol. Assume it's a + # ConnectionManager for now + call_async(q, dbus.Interface(proxy, cs.PROPERTIES_IFACE), + 'Get', cs.CM, 'Protocols') + q.expect('dbus-return', method='Get') + else: + raise AssertionError("don't know how to sync %s" % proxy.object_path) class ProxyWrapper: def __init__(self, object, default, others={}): |