[Telepathy-commits] [telepathy-salut/master] test-two-private-stream-tubes.py: test using the new API
Guillaume Desmottes
guillaume.desmottes at collabora.co.uk
Wed Mar 11 09:15:31 PDT 2009
---
.../twisted/avahi/test-two-private-stream-tubes.py | 152 ++++++++++++++++++++
1 files changed, 152 insertions(+), 0 deletions(-)
diff --git a/tests/twisted/avahi/test-two-private-stream-tubes.py b/tests/twisted/avahi/test-two-private-stream-tubes.py
index 18b7e75..28d060b 100644
--- a/tests/twisted/avahi/test-two-private-stream-tubes.py
+++ b/tests/twisted/avahi/test-two-private-stream-tubes.py
@@ -69,6 +69,8 @@ def test(q, bus, conn):
conn.Connect()
q.expect('dbus-signal', signal='StatusChanged', args=[0L, 0L])
+ conn1_self_handle = conn.GetSelfHandle()
+
# second connection: connect
conn2_params = {
'published-name': 'testsuite2',
@@ -199,6 +201,156 @@ def test(q, bus, conn):
contact1_tubes_channel_iface.Close()
contact2_tubes_channel_iface.Close()
+ # now contact1 will offer another stream tube to contact2 using the new
+ # API
+
+ # Can we request private stream tubes?
+ properties = conn.GetAll(CONN_IFACE_REQUESTS, dbus_interface=PROPERTIES_IFACE)
+
+ assert ({CHANNEL_TYPE: CHANNEL_TYPE_STREAM_TUBE,
+ TARGET_HANDLE_TYPE: HT_CONTACT},
+ [TARGET_HANDLE, TARGET_ID, TUBE_PARAMETERS, STREAM_TUBE_SERVICE]
+ ) in properties.get('RequestableChannelClasses'),\
+ properties['RequestableChannelClasses']
+
+ requestotron = dbus.Interface(conn, CONN_IFACE_REQUESTS)
+
+ requestotron.CreateChannel({
+ CHANNEL_TYPE: CHANNEL_TYPE_STREAM_TUBE,
+ TARGET_HANDLE_TYPE: HT_CONTACT,
+ TARGET_ID: contact2_name,
+ STREAM_TUBE_SERVICE: 'test',
+ TUBE_PARAMETERS: sample_parameters})
+
+ # tubes and tube channels are created on the first connection
+ e = q.expect('dbus-signal', signal='NewChannels', path=conn.object.object_path)
+ channels = e.args[0]
+ assert len(channels) == 2
+
+ got_tubes, got_tube = False, False
+ for path, props in channels:
+ if props[CHANNEL_TYPE] == CHANNEL_TYPE_TUBES:
+ got_tubes = True
+ assert props[REQUESTED] == False
+ assert props[INTERFACES] == []
+ elif props[CHANNEL_TYPE] == CHANNEL_TYPE_STREAM_TUBE:
+ got_tube = True
+ assert props[REQUESTED] == True
+ assert props[INTERFACES] == [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
+
+ assert props[INITIATOR_HANDLE] == conn1_self_handle
+ assert props[INITIATOR_ID] == contact1_name
+ assert props[TARGET_ID] == contact2_name
+
+ 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
+
+ call_async(q, contact1_stream_tube, 'OfferStreamTube', SOCKET_ADDRESS_TYPE_UNIX,
+ dbus.ByteArray(server_socket_address), SOCKET_ACCESS_CONTROL_LOCALHOST, "")
+
+ _, return_event, new_chans = q.expect_many(
+ EventPattern('dbus-signal', signal='TubeChannelStateChanged',
+ args=[TUBE_CHANNEL_STATE_REMOTE_PENDING]),
+ EventPattern('dbus-return', method='OfferStreamTube'),
+ EventPattern('dbus-signal', signal='NewChannels', path=conn2.object.object_path))
+
+ state = contact1_stream_tube.Get(CHANNEL_IFACE_TUBE, 'State', dbus_interface=PROPERTIES_IFACE)
+ assert state == TUBE_CHANNEL_STATE_REMOTE_PENDING
+
+ # tube and tubes channels have been created on conn2
+ channels = new_chans.args[0]
+ assert len(channels) == 2
+
+ got_tubes, got_tube = False, False
+ for path, props in channels:
+ if props[CHANNEL_TYPE] == CHANNEL_TYPE_TUBES:
+ got_tubes = True
+ assert props[REQUESTED] == False
+ assert props[INTERFACES] == []
+ elif props[CHANNEL_TYPE] == CHANNEL_TYPE_STREAM_TUBE:
+ got_tube = True
+ assert props[REQUESTED] == False
+ assert props[INTERFACES] == [CHANNEL_IFACE_TUBE]
+ assert props[STREAM_TUBE_SERVICE] == 'test'
+
+ 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
+ else:
+ assert False
+
+ assert props[INITIATOR_HANDLE] == contact1_handle_on_conn2
+ assert props[INITIATOR_ID] == contact1_name
+ assert props[TARGET_ID] == contact1_name
+
+ assert got_tubes
+ assert got_tube
+
+ 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
+
+ q.expect_many(
+ EventPattern('dbus-signal', signal='TubeChannelStateChanged', path=tube2_path,
+ args=[TUBE_CHANNEL_STATE_OPEN]),
+ EventPattern('dbus-signal', signal='TubeChannelStateChanged', path=tube1_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)
+
+ # contact1 close the tube
+ call_async(q, contact1_tube_channel, 'Close')
+
+ # tube is closed on both sides
+ q.expect_many(
+ EventPattern('dbus-return', method='Close'),
+ EventPattern('dbus-signal', signal='Closed', path=tube1_path),
+ EventPattern('dbus-signal', signal='Closed', path=tube2_path),
+ EventPattern('dbus-signal', signal='ChannelClosed', path=conn.object.object_path),
+ EventPattern('dbus-signal', signal='ChannelClosed', path=conn2.object.object_path))
+
conn.Disconnect()
q.expect('dbus-signal', signal='StatusChanged', args=[2, 1])
conn2.Disconnect()
--
1.5.6.5
More information about the telepathy-commits
mailing list