[Telepathy-commits] [telepathy-salut/master] test-two-muc-stream-tubes: test offering and accepting the tube (new API)
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Wed Mar 11 09:15:28 PDT 2009
---
tests/twisted/avahi/test-two-muc-stream-tubes.py | 122 ++++++++++++++++++++++
1 files changed, 122 insertions(+), 0 deletions(-)
diff --git a/tests/twisted/avahi/test-two-muc-stream-tubes.py b/tests/twisted/avahi/test-two-muc-stream-tubes.py
index f8712d0..3b398e5 100644
--- a/tests/twisted/avahi/test-two-muc-stream-tubes.py
+++ b/tests/twisted/avahi/test-two-muc-stream-tubes.py
@@ -297,6 +297,7 @@ def test(q, bus, conn):
if props[CHANNEL_TYPE] == CHANNEL_TYPE_TEXT:
got_text = True
assert props[REQUESTED] == False
+ group1 = make_channel_proxy(conn, path, "Channel.Interface.Group")
elif props[CHANNEL_TYPE] == CHANNEL_TYPE_TUBES:
got_tubes = True
assert props[REQUESTED] == False
@@ -306,6 +307,11 @@ def test(q, bus, conn):
assert props[REQUESTED] == True
assert props[INTERFACES] == [CHANNEL_IFACE_GROUP, CHANNEL_IFACE_TUBE]
assert props[STREAM_TUBE_SERVICE] == 'test'
+
+ contact1_tube = bus.get_object(conn.bus_name, path)
+ contact1_stream_tube = make_channel_proxy(conn, path, "Channel.Type.StreamTube.DRAFT")
+ contact1_tube_channel = make_channel_proxy(conn, path, "Channel")
+ tube1_path = path
else:
assert False
@@ -317,6 +323,122 @@ def test(q, bus, conn):
assert got_tubes
assert got_tube
+ state = contact1_stream_tube.Get(CHANNEL_IFACE_TUBE, 'State', dbus_interface=PROPERTIES_IFACE)
+ assert state == TUBE_CHANNEL_STATE_NOT_OFFERED
+
+ contact1_stream_tube.OfferStreamTube(SOCKET_ADDRESS_TYPE_UNIX, dbus.ByteArray(server_socket_address),
+ SOCKET_ACCESS_CONTROL_LOCALHOST, "")
+
+ state = contact1_stream_tube.Get(CHANNEL_IFACE_TUBE, 'State', dbus_interface=PROPERTIES_IFACE)
+ assert state == TUBE_CHANNEL_STATE_OPEN
+
+ # invite contact2 to the room
+ group1.AddMembers([contact2_handle_on_conn1], "Let's tube!")
+
+ # channel is created on conn2
+ e = q.expect('dbus-signal', signal='NewChannel', path=conn2.object_path)
+ path = e.args[0]
+ group2 = make_channel_proxy(conn, path, "Channel.Interface.Group")
+
+ # we are invited to the muc
+ # added as local pending
+ conn2_self_handle = conn2.GetSelfHandle()
+ q.expect('dbus-signal', signal='MembersChanged', path=path,
+ args=["Let's tube!", [], [], [conn2_self_handle], [], contact1_handle_on_conn2, 4])
+
+ # second connection: accept the invite
+ group2.AddMembers([conn2_self_handle], "")
+
+ # added as remote pending
+ q.expect('dbus-signal', signal='MembersChanged', path=path,
+ args=['', [], [], [], [conn2_self_handle], conn2_self_handle, 0])
+
+ # added as member
+ q.expect('dbus-signal', signal='MembersChanged', path=path,
+ args=['', [conn2_self_handle], [], [], [], conn2_self_handle, 0])
+
+ # tubes channel is created
+ e = q.expect('dbus-signal', signal='NewChannels')
+ channels = e.args[0]
+ assert len(channels) == 1
+ path, props = channels[0]
+ assert props[CHANNEL_TYPE] == CHANNEL_TYPE_TUBES
+ assert props[INITIATOR_HANDLE] == contact1_handle_on_conn2
+ assert props[INITIATOR_ID] == contact1_name
+ assert props[INTERFACES] == [CHANNEL_IFACE_GROUP]
+ assert props[REQUESTED] == False
+ assert props[TARGET_ID] == muc2_name
+
+ # tube channel is created
+ e = q.expect('dbus-signal', signal='NewChannels')
+ channels = e.args[0]
+ assert len(channels) == 1
+ path, props = channels[0]
+ assert props[CHANNEL_TYPE] == CHANNEL_TYPE_STREAM_TUBE
+ assert props[INITIATOR_HANDLE] == contact1_handle_on_conn2
+ assert props[INITIATOR_ID] == contact1_name
+ assert props[INTERFACES] == [CHANNEL_IFACE_GROUP, CHANNEL_IFACE_TUBE]
+ assert props[REQUESTED] == False
+ assert props[TARGET_ID] == muc2_name
+
+ contact2_tube = bus.get_object(conn.bus_name, path)
+ contact2_stream_tube = make_channel_proxy(conn, path, "Channel.Type.StreamTube.DRAFT")
+ contact2_tube_channel = make_channel_proxy(conn, path, "Channel")
+ tube2_path = path
+
+ state = contact2_tube.Get(CHANNEL_IFACE_TUBE, 'State', dbus_interface=PROPERTIES_IFACE)
+ assert state == TUBE_CHANNEL_STATE_LOCAL_PENDING
+
+ # second connection: accept the tube (new API)
+ unix_socket_adr = contact2_stream_tube.AcceptStreamTube(SOCKET_ADDRESS_TYPE_UNIX,
+ SOCKET_ACCESS_CONTROL_LOCALHOST, '', byte_arrays=True)
+
+ state = contact2_tube.Get(CHANNEL_IFACE_TUBE, 'State', dbus_interface=PROPERTIES_IFACE)
+ assert state == TUBE_CHANNEL_STATE_OPEN
+
+ e = q.expect('dbus-signal', signal='TubeChannelStateChanged', path=tube2_path,
+ args=[TUBE_CHANNEL_STATE_OPEN])
+
+ client = ClientCreator(reactor, ClientGreeter)
+ client.connectUNIX(unix_socket_adr).addCallback(client_connected_cb)
+
+ # server got the connection
+ _, e = q.expect_many(
+ EventPattern('server-connected'),
+ EventPattern('client-connected'))
+
+ client_transport = e.transport
+
+ e = q.expect('dbus-signal', signal='StreamTubeNewConnection', path=tube1_path)
+ handle = e.args[0]
+ assert handle == contact2_handle_on_conn1
+
+ # client receives server's welcome message
+ e = q.expect('client-data-received')
+ assert e.data == SERVER_WELCOME_MSG
+
+ client_transport.write(test_string)
+
+ e = q.expect('server-data-received')
+ assert e.data == test_string
+
+ e = q.expect('client-data-received')
+ assert e.data == string.swapcase(test_string)
+
+ call_async(q, contact1_tube_channel, 'Close')
+ q.expect_many(
+ EventPattern('dbus-return', method='Close'),
+ EventPattern('dbus-signal', signal='Closed'),
+ EventPattern('dbus-signal', signal='TubeClosed'),
+ EventPattern('dbus-signal', signal='ChannelClosed'))
+
+ call_async(q, contact2_tube_channel, 'Close')
+ q.expect_many(
+ EventPattern('dbus-return', method='Close'),
+ EventPattern('dbus-signal', signal='Closed'),
+ EventPattern('dbus-signal', signal='TubeClosed'),
+ EventPattern('dbus-signal', signal='ChannelClosed'))
+
conn.Disconnect()
conn2.Disconnect()
--
1.5.6.5
More information about the telepathy-commits
mailing list