summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2008-11-25 14:14:35 +0000
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2008-11-25 18:07:51 +0000
commit29ea0a469c04ed99e37a8d2dd2dc0c9853078224 (patch)
treedc762573421616537f4279ff1edeed4c95a322b6 /tests
parent9bd89f6cde342f83366b10e04f0700e26f3eba28 (diff)
downloadtelepathy-salut-29ea0a469c04ed99e37a8d2dd2dc0c9853078224.tar.gz
add test-request-muc.py
Diffstat (limited to 'tests')
-rw-r--r--tests/twisted/avahi/test-request-muc.py165
1 files changed, 165 insertions, 0 deletions
diff --git a/tests/twisted/avahi/test-request-muc.py b/tests/twisted/avahi/test-request-muc.py
new file mode 100644
index 00000000..92a1720c
--- /dev/null
+++ b/tests/twisted/avahi/test-request-muc.py
@@ -0,0 +1,165 @@
+
+"""
+Test MUC support.
+"""
+
+import dbus
+import avahitest
+
+from twisted.words.xish import domish
+
+from saluttest import exec_test
+from servicetest import call_async, lazy, match, EventPattern, \
+ tp_name_prefix, tp_path_prefix, make_channel_proxy
+
+CHANNEL_TYPE_TEXT = 'org.freedesktop.Telepathy.Channel.Type.Text'
+
+HT_ROOM = 2
+
+def test(q, bus, conn):
+ self_name = 'testsuite' + '@' + avahitest.get_host_name()
+
+ conn.Connect()
+
+ q.expect('dbus-signal', signal='StatusChanged', args=[0L, 0L])
+
+ # FIXME: this is a hack to be sure to have all the contact list channels
+ # announced so they won't interfere with the muc ones announces.
+ # publish
+ q.expect('dbus-signal', signal='NewChannel')
+ # subscribe
+ q.expect('dbus-signal', signal='NewChannel')
+ # known
+ q.expect('dbus-signal', signal='NewChannel')
+
+ # check if we can request roomlist channels
+ properties = conn.GetAll(
+ tp_name_prefix + '.Connection.Interface.Requests',
+ dbus_interface='org.freedesktop.DBus.Properties')
+ assert ({tp_name_prefix + '.Channel.ChannelType':
+ CHANNEL_TYPE_TEXT,
+ tp_name_prefix + '.Channel.TargetHandleType': HT_ROOM,
+ },
+ [tp_name_prefix + '.Channel.TargetHandle',
+ tp_name_prefix + '.Channel.TargetID'],
+ ) in properties.get('RequestableChannelClasses'),\
+ properties['RequestableChannelClasses']
+
+ # request a muc channel using the old API
+ handle = conn.RequestHandles(HT_ROOM, ['my-first-room'])[0]
+ call_async(q, conn, 'RequestChannel', CHANNEL_TYPE_TEXT, HT_ROOM, handle, True)
+
+ ret, old_sig, new_sig = q.expect_many(
+ EventPattern('dbus-return', method='RequestChannel'),
+ EventPattern('dbus-signal', signal='NewChannel'),
+ EventPattern('dbus-signal', signal='NewChannels'),
+ )
+
+ path1 = ret.value[0]
+ chan = make_channel_proxy(conn, path1, "Channel")
+
+ assert new_sig.args[0][0][0] == path1
+
+ props = new_sig.args[0][0][1]
+ assert props[tp_name_prefix + '.Channel.ChannelType'] ==\
+ CHANNEL_TYPE_TEXT
+ assert props[tp_name_prefix + '.Channel.TargetHandleType'] == HT_ROOM
+ assert props[tp_name_prefix + '.Channel.TargetHandle'] == handle
+ assert props[tp_name_prefix + '.Channel.TargetID'] == 'my-first-room'
+ assert props[tp_name_prefix + '.Channel.Requested'] == True
+ assert props[tp_name_prefix + '.Channel.InitiatorHandle'] \
+ == conn.GetSelfHandle()
+ assert props[tp_name_prefix + '.Channel.InitiatorID'] \
+ == self_name
+
+ assert old_sig.args[0] == path1
+ assert old_sig.args[1] == CHANNEL_TYPE_TEXT
+ assert old_sig.args[2] == HT_ROOM # handle type
+ assert old_sig.args[3] == handle # handle
+
+ # Exercise basic Channel Properties from spec 0.17.7
+ channel_props = chan.GetAll(
+ tp_name_prefix + '.Channel',
+ dbus_interface='org.freedesktop.DBus.Properties')
+ assert channel_props.get('TargetHandle') == handle,\
+ channel_props.get('TargetHandle')
+ assert channel_props['TargetID'] == 'my-first-room', channel_props
+ assert channel_props.get('TargetHandleType') == HT_ROOM,\
+ channel_props.get('TargetHandleType')
+ assert channel_props.get('ChannelType') == \
+ CHANNEL_TYPE_TEXT, channel_props.get('ChannelType')
+ assert channel_props['Requested'] == True
+ assert channel_props['InitiatorID'] == self_name
+ assert channel_props['InitiatorHandle'] == conn.GetSelfHandle()
+
+ requestotron = dbus.Interface(conn,
+ tp_name_prefix + '.Connection.Interface.Requests')
+
+ # create muc channel using new API
+ call_async(q, requestotron, 'CreateChannel',
+ { tp_name_prefix + '.Channel.ChannelType':
+ CHANNEL_TYPE_TEXT,
+ tp_name_prefix + '.Channel.TargetHandleType': HT_ROOM,
+ tp_name_prefix + '.Channel.TargetID': 'my-second-room',
+ })
+
+ ret, old_sig, new_sig = q.expect_many(
+ EventPattern('dbus-return', method='CreateChannel'),
+ EventPattern('dbus-signal', signal='NewChannel'),
+ EventPattern('dbus-signal', signal='NewChannels'),
+ )
+ path2 = ret.value[0]
+ chan = make_channel_proxy(conn, path2, "Channel")
+
+ handle = conn.RequestHandles(HT_ROOM, ['my-second-room'])[0]
+
+ props = ret.value[1]
+ assert props[tp_name_prefix + '.Channel.ChannelType'] ==\
+ CHANNEL_TYPE_TEXT
+ assert props[tp_name_prefix + '.Channel.TargetHandleType'] == HT_ROOM
+ assert props[tp_name_prefix + '.Channel.TargetHandle'] == handle
+ assert props[tp_name_prefix + '.Channel.TargetID'] == 'my-second-room'
+ assert props[tp_name_prefix + '.Channel.Requested'] == True
+ assert props[tp_name_prefix + '.Channel.InitiatorHandle'] \
+ == conn.GetSelfHandle()
+ assert props[tp_name_prefix + '.Channel.InitiatorID'] \
+ == self_name
+
+ assert new_sig.args[0][0][0] == path2
+ assert new_sig.args[0][0][1] == props
+
+ assert old_sig.args[0] == path2
+ assert old_sig.args[1] == CHANNEL_TYPE_TEXT
+ assert old_sig.args[2] == HT_ROOM # handle type
+ assert old_sig.args[3] == handle # handle
+ assert old_sig.args[4] == True # suppress handler
+
+ # ensure roomlist channel
+ call_async(q, requestotron, 'EnsureChannel',
+ { tp_name_prefix + '.Channel.ChannelType':
+ CHANNEL_TYPE_TEXT,
+ tp_name_prefix + '.Channel.TargetHandleType': HT_ROOM,
+ tp_name_prefix + '.Channel.TargetHandle': handle,
+ })
+
+ ret = q.expect('dbus-return', method='EnsureChannel')
+ yours, ensured_path, ensured_props = ret.value
+
+ assert not yours
+ assert ensured_path == path2, (ensured_path, path2)
+
+ conn.Disconnect()
+
+ q.expect_many(
+ EventPattern('dbus-signal', signal='Closed',
+ path=path1),
+ EventPattern('dbus-signal', signal='Closed',
+ path=path2),
+ EventPattern('dbus-signal', signal='ChannelClosed', args=[path1]),
+ EventPattern('dbus-signal', signal='ChannelClosed', args=[path2]),
+ EventPattern('dbus-signal', signal='StatusChanged', args=[2, 1]),
+ )
+
+if __name__ == '__main__':
+ exec_test(test)
+