[Telepathy-commits] [telepathy-salut/master] test-tube.py: Test to send and receive data on the stream tube

Alban Crequy alban.crequy at collabora.co.uk
Tue Nov 25 03:59:27 PST 2008


---
 tests/twisted/avahi/test-tube.py |   79 ++++++++++++++++++++++++++++++--------
 1 files changed, 63 insertions(+), 16 deletions(-)

diff --git a/tests/twisted/avahi/test-tube.py b/tests/twisted/avahi/test-tube.py
index 9578aed..3a42e2f 100644
--- a/tests/twisted/avahi/test-tube.py
+++ b/tests/twisted/avahi/test-tube.py
@@ -2,15 +2,17 @@ from saluttest import exec_test
 from avahitest import AvahiAnnouncer, AvahiListener
 from avahitest import get_host_name
 import avahi
+import dbus
+import os
+import errno
+import string
 
 from xmppstream import setup_stream_listener, connect_to_stream
-from servicetest import make_channel_proxy
-from trivialstream import TrivialStreamServer
+from servicetest import make_channel_proxy, Event
 
 from twisted.words.xish import xpath, domish
-
-import time
-import dbus
+from twisted.internet.protocol import Factory, Protocol, ClientCreator
+from twisted.internet import reactor
 
 PUBLISHED_NAME="test-tube"
 
@@ -18,12 +20,10 @@ CHANNEL_TYPE_TUBES = "org.freedesktop.Telepathy.Channel.Type.Tubes"
 HT_CONTACT = 1
 HT_CONTACT_LIST = 3
 TEXT_MESSAGE_TYPE_NORMAL = dbus.UInt32(0)
+SOCKET_ADDRESS_TYPE_UNIX = dbus.UInt32(0)
 SOCKET_ADDRESS_TYPE_IPV4 = dbus.UInt32(2)
 SOCKET_ACCESS_CONTROL_LOCALHOST = dbus.UInt32(0)
 
-INCOMING_MESSAGE = "Test 123"
-OUTGOING_MESSAGE = "Test 321"
-
 sample_parameters = dbus.Dictionary({
     's': 'hello',
     'ay': dbus.ByteArray('hello'),
@@ -31,12 +31,37 @@ sample_parameters = dbus.Dictionary({
     'i': dbus.Int32(-123),
     }, signature='sv')
 
+test_string = "This string travels on a tube !"
+
 def test(q, bus, conn):
-    server = TrivialStreamServer()
-    server.run()
-    socket_address = server.socket_address
-    socket_address = (socket_address[0],
-            dbus.UInt16(socket_address[1]))
+
+    # 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)
+
+    # 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)
 
     conn.Connect()
     q.expect('dbus-signal', signal='StatusChanged', args=[0L, 0L])
@@ -65,16 +90,21 @@ def test(q, bus, conn):
         True)
     tubes_channel = make_channel_proxy(conn, t, "Channel.Type.Tubes")
 
-    tubes_channel.OfferStreamTube("http", sample_parameters,
-            SOCKET_ADDRESS_TYPE_IPV4, socket_address,
+    tube_id = tubes_channel.OfferStreamTube("http", sample_parameters,
+            SOCKET_ADDRESS_TYPE_UNIX, dbus.ByteArray(server_socket_address),
             SOCKET_ACCESS_CONTROL_LOCALHOST, "")
-    
+
     e = q.expect('stream-iq')
     iq_tube = xpath.queryForNodes('/iq/tube', e.stanza)[0]
     transport = xpath.queryForNodes('/iq/tube/transport', e.stanza)[0]
     assert iq_tube.attributes['type'] == 'stream'
     assert iq_tube.attributes['service'] == 'http'
     assert iq_tube.attributes['id'] is not None
+    port = transport.attributes['port']
+    assert port is not None
+    port = int(port)
+    assert port > 1024
+    assert port < 65536
 
     params = {}
     parameter_nodes = xpath.queryForNodes('/iq/tube/parameters/parameter',
@@ -88,5 +118,22 @@ def test(q, bus, conn):
                       'u': ('uint', '123'),
                      }, params
 
+    client = ClientCreator(reactor, ClientGreeter)
+    client.connectTCP("localhost", port).addCallback(client_connected_cb)
+
+    e = q.expect('client-connected')
+    client_transport = e.transport
+    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)
+
+    # Close the tube propertly
+    tubes_channel.CloseTube(tube_id)
+    conn.Disconnect()
+
 if __name__ == '__main__':
     exec_test(test)
-- 
1.5.6.5




More information about the Telepathy-commits mailing list