[telepathy-idle/master] Test Creating and Ensuring MUCs.
Will Thompson
will.thompson at collabora.co.uk
Fri Aug 28 18:01:03 PDT 2009
---
tests/twisted/Makefile.am | 1 +
tests/twisted/channels/requests-muc.py | 105 ++++++++++++++++++++++++++++++++
tests/twisted/idletest.py | 13 ++++-
3 files changed, 118 insertions(+), 1 deletions(-)
create mode 100644 tests/twisted/channels/requests-muc.py
diff --git a/tests/twisted/Makefile.am b/tests/twisted/Makefile.am
index 5b1d05d..a272f1c 100644
--- a/tests/twisted/Makefile.am
+++ b/tests/twisted/Makefile.am
@@ -8,6 +8,7 @@ TWISTED_TESTS = \
connect/invalid-nick.py \
channels/join-muc-channel.py \
channels/requests-create.py \
+ channels/requests-muc.py \
messages/accept-invalid-nicks.py \
messages/message-order.py \
messages/leading-space.py \
diff --git a/tests/twisted/channels/requests-muc.py b/tests/twisted/channels/requests-muc.py
new file mode 100644
index 0000000..a1191c2
--- /dev/null
+++ b/tests/twisted/channels/requests-muc.py
@@ -0,0 +1,105 @@
+"""
+Test connecting to a IRC channel via the Requests interface
+"""
+
+from idletest import exec_test, BaseIRCServer
+from servicetest import EventPattern, call_async, sync_dbus, make_channel_proxy
+import constants as cs
+import dbus
+
+class DelayJoinServer(BaseIRCServer):
+ def handleJOIN(self, args):
+ # do nothing; wait for the test to call sendJoin().
+ return
+
+def test(q, bus, conn, stream):
+ conn.Connect()
+ q.expect_many(
+ EventPattern('dbus-signal', signal='StatusChanged', args=[1, 1]),
+ EventPattern('irc-connected'))
+ q.expect('dbus-signal', signal='SelfHandleChanged')
+ q.expect('dbus-signal', signal='StatusChanged', args=[0, 1])
+
+ self_handle = conn.GetSelfHandle()
+
+ request = dbus.Dictionary({
+ cs.CHANNEL_TYPE: cs.CHANNEL_TYPE_TEXT,
+ cs.TARGET_HANDLE_TYPE: cs.HT_ROOM,
+ cs.TARGET_ID: '#idletest',
+ }, signature='sv')
+
+ call_async(q, conn, 'CreateChannel', request,
+ dbus_interface=cs.CONN_IFACE_REQUESTS)
+
+ # Idle should try to join the channel.
+ q.expect('stream-JOIN')
+
+ # Meanwhile, in another application...
+
+ call_async(q, conn, 'EnsureChannel', request,
+ dbus_interface=cs.CONN_IFACE_REQUESTS)
+
+ sync_dbus(bus, q, conn)
+
+ # Now the ircd responds:
+ stream.sendJoin('#idletest')
+
+ cc, ec = q.expect_many(
+ EventPattern('dbus-return', method='CreateChannel'),
+ EventPattern('dbus-return', method='EnsureChannel'),
+ )
+ nc = q.expect('dbus-signal', signal='NewChannels')
+
+ path, props = cc.value
+
+ assert props[cs.CHANNEL_TYPE] == cs.CHANNEL_TYPE_TEXT
+ assert sorted(props[cs.INTERFACES]) == \
+ sorted([cs.CHANNEL_IFACE_GROUP,
+ cs.CHANNEL_IFACE_PASSWORD,
+ cs.TP_AWKWARD_PROPERTIES,
+ ])
+ assert props[cs.TARGET_HANDLE_TYPE] == cs.HT_ROOM
+ assert props[cs.TARGET_ID] == '#idletest'
+ assert props[cs.TARGET_HANDLE] == \
+ conn.RequestHandles(cs.HT_ROOM, ['#idletest'])[0]
+ assert props[cs.REQUESTED]
+ assert props[cs.INITIATOR_HANDLE] == self_handle
+ assert props[cs.INITIATOR_ID] == \
+ conn.InspectHandles(cs.HT_CONTACT, [self_handle])[0]
+
+ ec_yours, ec_path, ec_props = ec.value
+ assert not ec_yours
+ assert ec_path == path
+ assert ec_props == props
+
+ channels = nc.args[0]
+ assert len(channels) == 1
+ nc_path, nc_props = channels[0]
+ assert nc_path == path
+ assert nc_props == props
+
+ # And again?
+ ec_ = conn.EnsureChannel(request,
+ dbus_interface=cs.CONN_IFACE_REQUESTS)
+ assert ec.value == ec_
+
+ chans = conn.Get(cs.CONN_IFACE_REQUESTS, 'Channels',
+ dbus_interface=cs.PROPERTIES_IFACE)
+ assert len(chans) == 1
+ assert chans[0] == (path, props)
+
+ chan = make_channel_proxy(conn, path, 'Channel')
+ chan.Close()
+
+ q.expect('stream-PART')
+ stream.sendPart('#idletest', stream.nick)
+
+ q.expect('dbus-signal', signal='Closed')
+
+ chans = conn.Get(cs.CONN_IFACE_REQUESTS, 'Channels',
+ dbus_interface=cs.PROPERTIES_IFACE)
+ assert len(chans) == 0
+
+if __name__ == '__main__':
+ exec_test(test, protocol=DelayJoinServer)
+
diff --git a/tests/twisted/idletest.py b/tests/twisted/idletest.py
index c716cc4..7a586ad 100644
--- a/tests/twisted/idletest.py
+++ b/tests/twisted/idletest.py
@@ -63,8 +63,19 @@ class BaseIRCServer(irc.IRC):
def handleJOIN(self, args, prefix):
room = args[0]
+ self.sendJoin(room, [self.nick])
+
+ def sendJoin(self, room, members=[]):
+ members.append(self.nick)
+
self.sendMessage('JOIN', room, prefix=self.nick)
- self._sendNameReply(room, [self.nick])
+ self._sendNameReply(room, members)
+
+ def sendPart(self, room, nick, message=None):
+ if message is not None:
+ self.sendMessage('PART', room, message, prefix=nick)
+ else:
+ self.sendMessage('PART', room, prefix=nick)
def _sendNameReply(self, room, members):
#namereply
--
1.5.6.5
More information about the telepathy-commits
mailing list