summaryrefslogtreecommitdiff
path: root/tests/twisted/avahi/tubes/two-private-stream-tubes.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/twisted/avahi/tubes/two-private-stream-tubes.py')
-rw-r--r--tests/twisted/avahi/tubes/two-private-stream-tubes.py329
1 files changed, 0 insertions, 329 deletions
diff --git a/tests/twisted/avahi/tubes/two-private-stream-tubes.py b/tests/twisted/avahi/tubes/two-private-stream-tubes.py
deleted file mode 100644
index e1956be9..00000000
--- a/tests/twisted/avahi/tubes/two-private-stream-tubes.py
+++ /dev/null
@@ -1,329 +0,0 @@
-from saluttest import exec_test
-import dbus
-import os
-import errno
-import string
-
-from servicetest import make_channel_proxy, Event, EventPattern, call_async
-
-from twisted.internet.protocol import Factory, Protocol, ClientCreator
-from twisted.internet import reactor
-from constants import *
-import tubetestutil as t
-
-sample_parameters = dbus.Dictionary({
- 's': 'hello',
- 'ay': dbus.ByteArray('hello'),
- 'u': dbus.UInt32(123),
- 'i': dbus.Int32(-123),
- }, signature='sv')
-
-test_string = "This string travels on a tube !"
-
-SERVER_WELCOME_MSG = "Welcome!"
-
-print "FIXME: disabled because 1-1 tubes are disabled for now"
-# exiting 77 causes automake to consider the test to have been skipped
-raise SystemExit(77)
-
-def test(q, bus, conn):
-
- # define a basic tcp server that echoes what the client says, but with
- # swapcase
- class TrivialServer(Protocol):
- def dataReceived(self, data):
- self.transport.write(string.swapcase(data))
- e = Event('server-data-received', service = self, data = data)
- q.append(e)
-
- def connectionMade(self):
- e = Event('server-connected', transport = self.transport)
- q.append(e)
-
- # send welcome message to the client
- self.transport.write(SERVER_WELCOME_MSG)
-
- # define a basic tcp client
- class ClientGreeter(Protocol):
- def dataReceived(self, data):
- e = Event('client-data-received', service = self, data = data)
- q.append(e)
-
- def client_connected_cb(p):
- e = Event('client-connected', transport = p.transport)
- q.append(e)
-
- # create the server
- factory = Factory()
- factory.protocol = TrivialServer
- server_socket_address = os.getcwd() + '/stream'
- try:
- os.remove(server_socket_address)
- except OSError, e:
- if e.errno != errno.ENOENT:
- raise
- l = reactor.listenUNIX(server_socket_address, factory)
-
- contact1_name, conn2, contact2_name, contact2_handle_on_conn1,\
- contact1_handle_on_conn2 = t.connect_two_accounts(q, bus, conn)
-
- conn1_self_handle = conn.GetSelfHandle()
-
- # contact1 offers stream tube to contact2 (old API)
- contact1_tubes_channel_path = conn.RequestChannel(CHANNEL_TYPE_TUBES, HT_CONTACT,
- contact2_handle_on_conn1, True)
- contact1_tubes_channel = make_channel_proxy(conn, contact1_tubes_channel_path, "Channel.Type.Tubes")
- contact1_tubes_channel_iface = make_channel_proxy(conn, contact1_tubes_channel_path, "Channel")
-
- tube_id = contact1_tubes_channel.OfferStreamTube("http", sample_parameters,
- SOCKET_ADDRESS_TYPE_UNIX, dbus.ByteArray(server_socket_address),
- SOCKET_ACCESS_CONTROL_LOCALHOST, "")
-
- contact2_tubes_channel_path = None
- while contact2_tubes_channel_path is None:
- e = q.expect('dbus-signal', signal='NewChannel')
- if (e.args[1] == CHANNEL_TYPE_TUBES) and (e.path.endswith("testsuite2") == True):
- contact2_tubes_channel_path = e.args[0]
-
- contact2_tubes_channel = make_channel_proxy(conn2, contact2_tubes_channel_path, "Channel.Type.Tubes")
- contact2_tubes_channel_iface = make_channel_proxy(conn, contact2_tubes_channel_path, "Channel")
-
- contact2_tubes = contact2_tubes_channel.ListTubes()
- assert len(contact2_tubes) == 1
- contact2_tube = contact2_tubes[0]
- assert contact2_tube[0] is not None # tube id
- assert contact2_tube[1] is not None # initiator
- assert contact2_tube[2] == 1 # type = stream tube
- assert contact2_tube[3] == 'http' # service = http
- assert contact2_tube[4] is not None # parameters
- assert contact2_tube[5] == 0, contact2_tube[5] # status = local pending
-
- unix_socket_adr = contact2_tubes_channel.AcceptStreamTube(
- contact2_tube[0], 0, 0, '', byte_arrays=True)
-
- client = ClientCreator(reactor, ClientGreeter)
- client.connectUNIX(unix_socket_adr).addCallback(client_connected_cb)
-
- # server got the connection
- _, e, new_conn_event, data_event = q.expect_many(
- EventPattern('server-connected'),
- EventPattern('client-connected'),
- EventPattern('dbus-signal', signal='StreamTubeNewConnection', path=contact1_tubes_channel_path),
- EventPattern('client-data-received'))
-
- client_transport = e.transport
-
- id, handle = new_conn_event.args
- assert id == tube_id
- assert handle == contact2_handle_on_conn1
-
- # client receives server's welcome message
- assert data_event.data == SERVER_WELCOME_MSG
-
- client_transport.write(test_string)
-
- server_received, client_received = q.expect_many(
- EventPattern('server-data-received'),
- EventPattern('client-data-received'))
-
- assert server_received.data == test_string
- assert client_received.data == string.swapcase(test_string)
-
- # Close the tube propertly
- call_async(q, contact1_tubes_channel, 'CloseTube', tube_id)
-
- q.expect_many(
- EventPattern('dbus-signal', signal='TubeClosed', path=contact1_tubes_channel_path),
- EventPattern('dbus-signal', signal='TubeClosed', path=contact2_tubes_channel_path),
- EventPattern('dbus-return', method='CloseTube'))
-
- # close both tubes channels
- 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, 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'})
-
- # 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
-
- # get the list of all channels to check that newly announced ones are in it
- all_channels = conn.Get(CONN_IFACE_REQUESTS, 'Channels', dbus_interface=PROPERTIES_IFACE,
- byte_arrays=True)
-
- 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")
- 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 (path, props) in all_channels, (path, props)
-
- 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, 'Offer', SOCKET_ADDRESS_TYPE_UNIX,
- dbus.ByteArray(server_socket_address), SOCKET_ACCESS_CONTROL_LOCALHOST, sample_parameters)
-
- _, return_event, new_chans = q.expect_many(
- EventPattern('dbus-signal', signal='TubeChannelStateChanged',
- args=[TUBE_CHANNEL_STATE_REMOTE_PENDING]),
- EventPattern('dbus-return', method='Offer'),
- 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
-
- # get the list of all channels to check that newly announced ones are in it
- all_channels = conn2.Get(CONN_IFACE_REQUESTS, 'Channels', dbus_interface=PROPERTIES_IFACE,
- byte_arrays=True)
-
- 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")
- 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 (path, props) in all_channels, (path, props)
-
- 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.Accept(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
- _, client_connected, remote_sig, local_sig, data_received = q.expect_many(
- EventPattern('server-connected'),
- EventPattern('client-connected'),
- EventPattern('dbus-signal', signal='NewRemoteConnection',
- path=tube1_path),
- EventPattern('dbus-signal', signal='NewLocalConnection',
- path=tube2_path),
- EventPattern('client-data-received'))
-
- client_transport = client_connected.transport
-
- handle, conn_param, contact1_tube_conn_id = remote_sig.args
- assert handle == contact2_handle_on_conn1
- assert contact1_tube_conn_id != 0
-
- contact2_tube_conn_id = local_sig.args[0]
- assert contact2_tube_conn_id != 0
-
- # client receives server's welcome message
- assert data_received.data == SERVER_WELCOME_MSG
-
- client_transport.write(test_string)
-
- server_received, client_received = q.expect_many(
- EventPattern('server-data-received'),
- EventPattern('client-data-received'))
-
- assert server_received.data == test_string
- assert client_received.data == string.swapcase(test_string)
-
- # contact1 close the tube
- call_async(q, contact1_tube_channel, 'Close')
-
- # tube is closed on both sides
- _, e1, e2, _, _, _, _ = q.expect_many(
- EventPattern('dbus-return', method='Close'),
- EventPattern('dbus-signal', signal='ConnectionClosed', path=tube1_path),
- EventPattern('dbus-signal', signal='ConnectionClosed', path=tube2_path),
- 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_id, error, dbus_msg = e1.args
- assert conn_id == contact1_tube_conn_id
- assert error == CANCELLED
-
- conn_id, error, dbus_msg = e2.args
- assert conn_id == contact2_tube_conn_id
- assert error == CANCELLED
-
- conn.Disconnect()
- q.expect('dbus-signal', signal='StatusChanged', args=[2, 1])
- conn2.Disconnect()
- q.expect('dbus-signal', signal='StatusChanged', args=[2, 1])
-
-if __name__ == '__main__':
- exec_test(test)