summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2011-05-19 18:16:26 +0100
committerVivek Dasmohapatra <vivek@collabora.co.uk>2011-09-06 14:49:46 +0100
commitf3933967a7a1573ccaac8c6a52814e388cf7cb98 (patch)
tree3deaf714ba1166417f5ab2cff298bee9656881d7 /tests
parent372ad259fdd87182f4d3bcadd053c4fafc443016 (diff)
undispatchable test: assert that observers are invoked, but approvers are not
Also assert that MC doesn't close the channel as undispatchable until the Observer has had a look at it.
Diffstat (limited to 'tests')
-rw-r--r--tests/twisted/dispatcher/undispatchable.py53
1 files changed, 47 insertions, 6 deletions
diff --git a/tests/twisted/dispatcher/undispatchable.py b/tests/twisted/dispatcher/undispatchable.py
index 35b5f44f..de63fbca 100644
--- a/tests/twisted/dispatcher/undispatchable.py
+++ b/tests/twisted/dispatcher/undispatchable.py
@@ -26,7 +26,7 @@ import dbus.bus
import dbus.service
from servicetest import EventPattern, tp_name_prefix, tp_path_prefix, \
- call_async, sync_dbus
+ call_async, sync_dbus, assertEquals
from mctest import exec_test, SimulatedConnection, SimulatedClient, \
create_fakecm_account, enable_fakecm_account, SimulatedChannel, \
expect_client_setup
@@ -39,8 +39,8 @@ def test(q, bus, mc):
conn = enable_fakecm_account(q, bus, mc, account, params)
text_fixed_properties = dbus.Dictionary({
- cs.CHANNEL + '.TargetHandleType': cs.HT_CONTACT,
cs.CHANNEL + '.ChannelType': cs.CHANNEL_TYPE_TEXT,
+ cs.CHANNEL + '.TargetHandleType': cs.HT_CONTACT,
}, signature='sv')
# subscribe to the OperationList interface (MC assumes that until this
@@ -50,6 +50,14 @@ def test(q, bus, mc):
cd_props = dbus.Interface(cd, cs.PROPERTIES_IFACE)
assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') == []
+ client = SimulatedClient(q, bus, 'Client',
+ observe=[text_fixed_properties],
+ approve=[text_fixed_properties],
+ handle=[], bypass_approval=False)
+
+ # wait for MC to download the properties
+ expect_client_setup(q, [client])
+
channel_properties = dbus.Dictionary(text_fixed_properties,
signature='sv')
channel_properties[cs.CHANNEL + '.TargetID'] = 'juliet'
@@ -61,15 +69,48 @@ def test(q, bus, mc):
channel_properties[cs.CHANNEL + '.Requested'] = False
channel_properties[cs.CHANNEL + '.Interfaces'] = dbus.Array(signature='s')
+ forbidden = [
+ EventPattern('dbus-method-call', method='AddDispatchOperation'),
+ ]
+ q.forbid_events(forbidden)
+
chan = SimulatedChannel(conn, channel_properties)
chan.announce()
- # In response, MC kills the channel
- q.expect('dbus-method-call', path=chan.object_path, method='Close',
- handled=True)
+ e = q.expect('dbus-signal',
+ path=cs.CD_PATH,
+ interface=cs.CD_IFACE_OP_LIST,
+ signal='NewDispatchOperation')
+
+ cdo_path = e.args[0]
+ cdo_properties = e.args[1]
+
+ assert cdo_properties[cs.CDO + '.Account'] == account.object_path
+ assert cdo_properties[cs.CDO + '.Connection'] == conn.object_path
+ assert cs.CDO + '.Interfaces' in cdo_properties
- # There are still no active channel dispatch operations
+ handlers = cdo_properties[cs.CDO + '.PossibleHandlers'][:]
+ assertEquals([], handlers)
+
+ e = q.expect('dbus-method-call',
+ path=client.object_path,
+ interface=cs.OBSERVER, method='ObserveChannels',
+ handled=False)
+
+ sync_dbus(bus, q, mc)
+
+ q.dbus_return(e.message, signature='')
+
+ # now (but only now) MC kills the channel
+ q.expect_many(
+ EventPattern('dbus-signal', path=cdo_path, signal='Finished'),
+ EventPattern('dbus-method-call', path=chan.object_path,
+ method='Close', handled=True),
+ )
+
+ # There are no active channel dispatch operations
assert cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations') == []
+
if __name__ == '__main__':
exec_test(test, {})