[Telepathy-commits] [telepathy-salut/master] Add new test test-tube.py

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


---
 tests/twisted/Makefile.am        |    6 ++-
 tests/twisted/avahi/test-tube.py |   92 ++++++++++++++++++++++++++++++++++++++
 tests/twisted/trivialstream.py   |   70 +++++++++++++++++++++++++++++
 3 files changed, 166 insertions(+), 2 deletions(-)
 create mode 100644 tests/twisted/avahi/test-tube.py
 create mode 100644 tests/twisted/trivialstream.py

diff --git a/tests/twisted/Makefile.am b/tests/twisted/Makefile.am
index a3549dd..47a03f3 100644
--- a/tests/twisted/Makefile.am
+++ b/tests/twisted/Makefile.am
@@ -5,7 +5,8 @@ TWISTED_BASIC_TESTS =
 TWISTED_AVAHI_TESTS = \
 	avahi/test-register.py \
 	avahi/test-aliases.py \
-	avahi/test-text-channel.py
+	avahi/test-text-channel.py \
+	avahi/test-tube.py
 
 TESTS =
 
@@ -37,7 +38,8 @@ EXTRA_DIST = \
 	$(TWISTED_AVAHI_TESTS) \
 	$(TWISTED_BASIC_TESTS) \
 	saluttest.py \
-	servicetest.py
+	servicetest.py \
+        trivialstream.py
 
 CLEANFILES = salut-[1-9]*.log *.pyc */*.pyc
 
diff --git a/tests/twisted/avahi/test-tube.py b/tests/twisted/avahi/test-tube.py
new file mode 100644
index 0000000..9578aed
--- /dev/null
+++ b/tests/twisted/avahi/test-tube.py
@@ -0,0 +1,92 @@
+from saluttest import exec_test
+from avahitest import AvahiAnnouncer, AvahiListener
+from avahitest import get_host_name
+import avahi
+
+from xmppstream import setup_stream_listener, connect_to_stream
+from servicetest import make_channel_proxy
+from trivialstream import TrivialStreamServer
+
+from twisted.words.xish import xpath, domish
+
+import time
+import dbus
+
+PUBLISHED_NAME="test-tube"
+
+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_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'),
+    'u': dbus.UInt32(123),
+    'i': dbus.Int32(-123),
+    }, signature='sv')
+
+def test(q, bus, conn):
+    server = TrivialStreamServer()
+    server.run()
+    socket_address = server.socket_address
+    socket_address = (socket_address[0],
+            dbus.UInt16(socket_address[1]))
+
+    conn.Connect()
+    q.expect('dbus-signal', signal='StatusChanged', args=[0L, 0L])
+    basic_txt = { "txtvers": "1", "status": "avail" }
+
+    contact_name = PUBLISHED_NAME + get_host_name()
+    listener, port = setup_stream_listener(q, contact_name)
+
+    announcer = AvahiAnnouncer(contact_name, "_presence._tcp", port, basic_txt)
+
+    publish_handle = conn.RequestHandles(HT_CONTACT_LIST, ["publish"])[0]
+    publish = conn.RequestChannel(
+        "org.freedesktop.Telepathy.Channel.Type.ContactList",
+        HT_CONTACT_LIST, publish_handle, False)
+
+    handle = 0
+    # Wait until the record shows up in publish
+    while handle == 0:
+        e = q.expect('dbus-signal', signal='MembersChanged', path=publish)
+        for h in e.args[1]:
+            name = conn.InspectHandles(HT_CONTACT, [h])[0]
+            if name == contact_name:
+                handle = h
+
+    t = conn.RequestChannel(CHANNEL_TYPE_TUBES, HT_CONTACT, handle,
+        True)
+    tubes_channel = make_channel_proxy(conn, t, "Channel.Type.Tubes")
+
+    tubes_channel.OfferStreamTube("http", sample_parameters,
+            SOCKET_ADDRESS_TYPE_IPV4, 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
+
+    params = {}
+    parameter_nodes = xpath.queryForNodes('/iq/tube/parameters/parameter',
+        e.stanza)
+    for node in parameter_nodes:
+        assert node['name'] not in params
+        params[node['name']] = (node['type'], str(node))
+    assert params == {'ay': ('bytes', 'aGVsbG8='),
+                      's': ('str', 'hello'),
+                      'i': ('int', '-123'),
+                      'u': ('uint', '123'),
+                     }, params
+
+if __name__ == '__main__':
+    exec_test(test)
diff --git a/tests/twisted/trivialstream.py b/tests/twisted/trivialstream.py
new file mode 100644
index 0000000..ca80b75
--- /dev/null
+++ b/tests/twisted/trivialstream.py
@@ -0,0 +1,70 @@
+import dbus.glib
+import gobject
+import sys
+import time
+import os
+import socket
+import tempfile
+import random
+import string
+
+class TrivialStream:
+    def __init__(self, socket_address=None):
+        self.socket_address = socket_address
+
+    def read_socket(self, s):
+        try:
+            data = s.recv(1024)
+            if len(data) > 0:
+                print "received:", data
+        except socket.error, e:
+            pass
+        return True
+
+    def write_socket(self, s, msg):
+        print "send:", msg
+        try:
+            s = s.send(msg)
+        except socket.error, e:
+            pass
+        return True
+
+class TrivialStreamServer(TrivialStream):
+    def __init__(self):
+        TrivialStream.__init__(self)
+
+    def run(self):
+        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        s.setblocking(1)
+        s.settimeout(0.1)
+        s.bind(("127.0.0.1", 0))
+
+        self.socket_address = s.getsockname()
+        print "Trivial Server lauched on socket", self.socket_address
+        s.listen(1)
+
+        gobject.timeout_add(1000, self.accept_client, s)
+
+    def accept_client(self, s):
+        try:
+            s2, addr = s.accept()
+            s2.setblocking(1)
+            s2.setblocking(0.1)
+            self.handle_client(s2)
+            return True
+        except socket.timeout:
+            return True
+
+    def handle_client(self, s):
+        gobject.timeout_add(5000, self.write_socket, s, "hi !")
+
+class TrivialStreamClient(TrivialStream):
+    def __init__(self, socket_address):
+        TrivialStream.__init__(self, socket_address)
+
+    def connect(self):
+        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        s.connect(self.socket_address)
+        print "Trivial client connected to", self.socket_address
+        gobject.timeout_add(1000, self.read_socket, s)
+
-- 
1.5.6.5




More information about the Telepathy-commits mailing list