[telepathy-salut/master] two-muc-dbus-tubes.py: actually use the tube

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Jun 26 07:28:17 PDT 2009


---
 tests/twisted/avahi/tubes/two-muc-dbus-tubes.py |   62 +++++++++++++++++++++--
 1 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/tests/twisted/avahi/tubes/two-muc-dbus-tubes.py b/tests/twisted/avahi/tubes/two-muc-dbus-tubes.py
index 6c98206..bb0a320 100644
--- a/tests/twisted/avahi/tubes/two-muc-dbus-tubes.py
+++ b/tests/twisted/avahi/tubes/two-muc-dbus-tubes.py
@@ -1,7 +1,8 @@
 from saluttest import exec_test
 import dbus
+from dbus.service import method, signal, Object
 
-from servicetest import make_channel_proxy, call_async, EventPattern
+from servicetest import make_channel_proxy, call_async, EventPattern, Event
 
 import constants as cs
 import tubetestutil as t
@@ -20,6 +21,25 @@ def check_dbus_names(tube, members):
         dbus_interface=cs.PROPERTIES_IFACE)
     assert set(names.keys()) == set(members), names.keys()
 
+SERVICE = "org.freedesktop.Telepathy.Tube.Test"
+IFACE = SERVICE
+PATH = "/org/freedesktop/Telepathy/Tube/Test"
+
+class Test(Object):
+    def __init__(self, tube, q):
+        super(Test, self).__init__(tube, PATH)
+        self.tube = tube
+        self.q = q
+
+    @signal(dbus_interface=IFACE, signature='s')
+    def MySig(self, arg):
+        pass
+
+    @method(dbus_interface=IFACE, in_signature='u', out_signature='u')
+    def MyMethod(self, arg):
+        self.q.append(Event('tube-dbus-call', method='MyMethod', args=[arg]))
+        return arg * 10
+
 def test(q, bus, conn):
 
     contact1_name, conn2, contact2_name, contact2_handle_on_conn1,\
@@ -96,11 +116,13 @@ def test(q, bus, conn):
     call_async(q, contact1_dbus_tube, 'Offer', sample_parameters,
         cs.SOCKET_ACCESS_CONTROL_CREDENTIALS)
 
-    q.expect_many(
+    _, e = q.expect_many(
         EventPattern('dbus-signal', signal='TubeChannelStateChanged',
             args=[cs.TUBE_CHANNEL_STATE_OPEN]),
         EventPattern('dbus-return', method='Offer'))
 
+    tube_addr1 = e.value[0]
+
     state = contact1_dbus_tube.Get(cs.CHANNEL_IFACE_TUBE, 'State',
         dbus_interface=cs.PROPERTIES_IFACE)
     assert state == cs.TUBE_CHANNEL_STATE_OPEN
@@ -167,7 +189,7 @@ def test(q, bus, conn):
     check_dbus_names(contact1_dbus_tube, [conn1_self_handle])
 
     # second connection: accept the tube (new API)
-    unix_socket_adr = contact2_dbus_tube.Accept(cs.SOCKET_ACCESS_CONTROL_CREDENTIALS)
+    tube_addr2 = unix_socket_adr = contact2_dbus_tube.Accept(cs.SOCKET_ACCESS_CONTROL_CREDENTIALS)
 
     state = contact2_tube.Get(cs.CHANNEL_IFACE_TUBE, 'State',
         dbus_interface=cs.PROPERTIES_IFACE)
@@ -186,7 +208,39 @@ def test(q, bus, conn):
     check_dbus_names(contact1_dbus_tube, [conn1_self_handle, contact2_handle_on_conn1])
     check_dbus_names(contact2_dbus_tube, [conn2_self_handle, contact1_handle_on_conn2])
 
-    # TODO: use the tube
+    tube2_names = contact2_dbus_tube.Get(cs.CHANNEL_TYPE_DBUS_TUBE, 'DBusNames',
+        dbus_interface=cs.PROPERTIES_IFACE)
+
+    tube_conn1 = dbus.connection.Connection(tube_addr1)
+    tube_conn2 = dbus.connection.Connection(tube_addr2)
+
+    obj1 = Test(tube_conn1, q)
+
+    # fire 'MySig' signal on the tube
+    def my_sig_cb (arg, sender=None):
+        assert tube2_names[contact1_handle_on_conn2] == sender
+
+        q.append(Event('tube-dbus-signal', signal='MySig', args=[arg]))
+
+    tube_conn2.add_signal_receiver(my_sig_cb, 'MySig', IFACE, path=PATH,
+        sender_keyword='sender')
+
+    obj1.MySig('hello')
+    q.expect('tube-dbus-signal', signal='MySig', args=['hello'])
+
+    # call remote method
+    def my_method_cb(result):
+        q.append(Event('tube-dbus-return', method='MyMethod', value=[result]))
+
+    def my_method_error(e):
+        assert False, e
+
+    tube_conn2.get_object(tube2_names[contact1_handle_on_conn2], PATH).MyMethod(
+        42, dbus_interface=IFACE,
+        reply_handler=my_method_cb, error_handler=my_method_error)
+
+    q.expect('tube-dbus-call', method='MyMethod', args=[42])
+    q.expect('tube-dbus-return', method='MyMethod', value=[420])
 
     call_async(q, contact1_tube_channel, 'Close')
     _, _, _, _, dbus_names_e = q.expect_many(
-- 
1.5.6.5




More information about the telepathy-commits mailing list