[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