[telepathy-mission-control/master] mctest: add an improved SimulatedConnection class
Simon McVittie
simon.mcvittie at collabora.co.uk
Fri Mar 27 13:25:48 PDT 2009
---
test/twisted/mctest.py | 89 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 89 insertions(+), 0 deletions(-)
diff --git a/test/twisted/mctest.py b/test/twisted/mctest.py
index 1c2e065..7fba030 100644
--- a/test/twisted/mctest.py
+++ b/test/twisted/mctest.py
@@ -8,11 +8,13 @@ import os
import sha
import sys
+import constants as cs
import servicetest
import twisted
from twisted.internet import reactor
import dbus
+import dbus.service
def make_mc(bus, event_func, params=None):
default_params = {
@@ -87,3 +89,90 @@ def exec_test_deferred (fun, params, protocol=None, timeout=None):
def exec_test(fun, params=None, protocol=None, timeout=None):
reactor.callWhenRunning (exec_test_deferred, fun, params, protocol, timeout)
reactor.run()
+
+class SimulatedConnection(object):
+
+ def ensure_handle(self, type, identifier):
+ if (type, identifier) in self._handles:
+ return self._handles[identifier]
+
+ self._last_handle += 1
+ self._handles[(type, identifier)] = self._last_handle
+ self._identifiers[(type, self._last_handle)] = identifier
+ return self._last_handle
+
+ def __init__(self, q, bus, cmname, protocol, account_part, self_ident):
+ self.q = q
+ self.bus = bus
+
+ self.bus_name = '.'.join([cs.tp_name_prefix, 'Connection',
+ cmname, protocol.replace('-', '_'), account_part])
+ self._bus_name_ref = dbus.service.BusName(self.bus_name, self.bus)
+ self.object_path = '/' + self.bus_name.replace('.', '/')
+
+ self._last_handle = 41
+ self._handles = {}
+ self._identifiers = {}
+ self.status = cs.CONN_STATUS_DISCONNECTED
+ self.reason = cs.CONN_STATUS_CONNECTING
+ self.self_ident = self_ident
+ self.self_handle = self.ensure_handle(cs.HT_CONTACT, self_ident)
+
+ q.add_dbus_method_impl(self.Connect,
+ path=self.object_path, interface=cs.CONN, method='Connect')
+ q.add_dbus_method_impl(self.GetSelfHandle,
+ path=self.object_path,
+ interface=cs.CONN, method='GetSelfHandle')
+ q.add_dbus_method_impl(self.GetStatus,
+ path=self.object_path, interface=cs.CONN, method='GetStatus')
+ q.add_dbus_method_impl(self.GetInterfaces,
+ path=self.object_path, interface=cs.CONN,
+ method='GetInterfaces')
+ q.add_dbus_method_impl(self.InspectHandles,
+ path=self.object_path, interface=cs.CONN,
+ method='InspectHandles')
+ q.add_dbus_method_impl(self.GetAll_Requests,
+ path=self.object_path,
+ interface=cs.PROPERTIES_IFACE, method='GetAll',
+ args=[cs.CONN_IFACE_REQUESTS])
+
+ def GetInterfaces(self, e):
+ # FIXME: when needed, allow altering this return somehow
+ self.q.dbus_return(e.message, [cs.CONN_IFACE_REQUESTS], signature='as')
+
+ def Connect(self, e):
+ self.q.dbus_emit(self.object_path, cs.CONN, 'StatusChanged',
+ cs.CONN_STATUS_CONNECTING, cs.CONN_STATUS_REASON_NONE,
+ signature='uu')
+ self.q.dbus_return(e.message, signature='')
+
+ def InspectHandles(self, e):
+ htype, hs = e.args
+ ret = []
+
+ for h in hs:
+ if (htype, h) in self._identifiers:
+ ret.append(self._identifiers[(htype, h)])
+ else:
+ self.q.dbus_raise(e.message, INVALID_HANDLE, str(h))
+ return
+
+ self.q.dbus_return(e.message, ret, signature='as')
+
+ def GetStatus(self, e):
+ self.q.dbus_return(e.message, self.status, signature='u')
+
+ def StatusChanged(self, status, reason):
+ self.status = status
+ self.reason = reason
+ self.q.dbus_emit(self.object_path, cs.CONN, 'StatusChanged',
+ status, reason, signature='uu')
+
+ def GetAll_Requests(self, e):
+ # FIXME: stub: assumes no channels
+ self.q.dbus_return(e.message, {
+ 'Channels': dbus.Array(signature='(oa{sv})'),
+ }, signature='a{sv}')
+
+ def GetSelfHandle(self, e):
+ self.q.dbus_return(e.message, self.self_handle, signature='u')
--
1.5.6.5
More information about the telepathy-commits
mailing list