[Telepathy-commits] [telepathy-gabble/master] AcceptStreamTube: test both unix sockets and IPv4 sockets

Alban Crequy alban.crequy at collabora.co.uk
Tue Nov 11 11:17:02 PST 2008


---
 tests/twisted/tubes/test-si-accept-tubes.py |  154 ++++++++++++++++-----------
 1 files changed, 92 insertions(+), 62 deletions(-)

diff --git a/tests/twisted/tubes/test-si-accept-tubes.py b/tests/twisted/tubes/test-si-accept-tubes.py
index 62b4c0b..206e36b 100644
--- a/tests/twisted/tubes/test-si-accept-tubes.py
+++ b/tests/twisted/tubes/test-si-accept-tubes.py
@@ -13,54 +13,16 @@ NS_TUBES = 'http://telepathy.freedesktop.org/xmpp/tubes'
 NS_SI = 'http://jabber.org/protocol/si'
 NS_IBB = 'http://jabber.org/protocol/ibb'
 
-def test(q, bus, conn, stream):
-    conn.Connect()
-
-    _, vcard_event, roster_event = q.expect_many(
-        EventPattern('dbus-signal', signal='StatusChanged', args=[0, 1]),
-        EventPattern('stream-iq', to=None, query_ns='vcard-temp',
-            query_name='vCard'),
-        EventPattern('stream-iq', query_ns='jabber:iq:roster'))
-
-    acknowledge_iq(stream, vcard_event.stanza)
-
-    roster = roster_event.stanza
-    roster['type'] = 'result'
-    item = roster_event.query.addElement('item')
-    item['jid'] = 'bob at localhost' # Bob can do tubes
-    item['subscription'] = 'both'
-    stream.send(roster)
+bob_jid = 'bob at localhost/Bob'
+stream_tube_id = 49
 
-    # Send Bob presence and his caps
-    presence = domish.Element(('jabber:client', 'presence'))
-    presence['from'] = 'bob at localhost/Bob'
-    presence['to'] = 'test at localhost/Resource'
-    c = presence.addElement('c')
-    c['xmlns'] = 'http://jabber.org/protocol/caps'
-    c['node'] = 'http://example.com/ICantBelieveItsNotTelepathy'
-    c['ver'] = '1.2.3'
-    stream.send(presence)
-
-    event = q.expect('stream-iq', iq_type='get',
-        query_ns='http://jabber.org/protocol/disco#info',
-        to='bob at localhost/Bob')
-    result = event.stanza
-    result['type'] = 'result'
-    assert event.query['node'] == \
-        'http://example.com/ICantBelieveItsNotTelepathy#1.2.3'
-    feature = event.query.addElement('feature')
-    feature['var'] = NS_TUBES
-    stream.send(result)
-
-    # Receive a tube offer from Bob
+def receive_tube_offer(q, bus, conn, stream):
     message = domish.Element(('jabber:client', 'message'))
     message['to'] = 'test at localhost/Resource'
-    bob_jid = 'bob at localhost/Bob'
     message['from'] = bob_jid
     tube_node = message.addElement((NS_TUBES, 'tube'))
     tube_node['type'] = 'stream'
     tube_node['service'] = 'http'
-    stream_tube_id = 49
     tube_node['id'] = str(stream_tube_id)
     stream.send(message)
 
@@ -103,29 +65,17 @@ def test(q, bus, conn, stream):
     tubes_chan = bus.get_object(conn.bus_name, chan_path)
     tubes_iface = dbus.Interface(tubes_chan,
             tp_name_prefix + '.Channel.Type.Tubes')
-
-    # Accept the tube
-    call_async(q, tubes_iface, 'AcceptStreamTube', stream_tube_id, 0, 0, '',
-            byte_arrays=True)
-
-    accept_return_event, _ = q.expect_many(
-        EventPattern('dbus-return', method='AcceptStreamTube'),
-        EventPattern('dbus-signal', signal='TubeStateChanged',
-            args=[stream_tube_id, 2]))
-
-    unix_socket_adr = accept_return_event.value[0]
-
-    factory = EventProtocolClientFactory(q)
-    reactor.connectUNIX(unix_socket_adr, factory)
-
-    event = q.expect('socket-connected')
-    protocol = event.protocol
+    return (tubes_chan, tubes_iface)
+
+def expect_tube_activity(q, bus, conn, stream):
+    event_socket, event_iq = q.expect_many(
+            EventPattern('socket-connected'),
+            EventPattern('stream-iq', to=bob_jid, query_ns=NS_SI,
+                query_name='si'))
+    protocol = event_socket.protocol
     protocol.sendData("hello initiator")
 
-    # expect SI request
-    event = q.expect('stream-iq', to=bob_jid, query_ns=NS_SI,
-        query_name='si')
-    iq = event.stanza
+    iq = event_iq.stanza
     si = xpath.queryForNodes('/iq/si[@xmlns="%s"]' % NS_SI,
         iq)[0]
     values = xpath.queryForNodes(
@@ -139,6 +89,86 @@ def test(q, bus, conn, stream):
     assert stream_node['tube'] == str(stream_tube_id)
     stream_id = si['id']
 
+def test(q, bus, conn, stream):
+    conn.Connect()
+
+    _, vcard_event, roster_event = q.expect_many(
+        EventPattern('dbus-signal', signal='StatusChanged', args=[0, 1]),
+        EventPattern('stream-iq', to=None, query_ns='vcard-temp',
+            query_name='vCard'),
+        EventPattern('stream-iq', query_ns='jabber:iq:roster'))
+
+    acknowledge_iq(stream, vcard_event.stanza)
+
+    roster = roster_event.stanza
+    roster['type'] = 'result'
+    item = roster_event.query.addElement('item')
+    item['jid'] = 'bob at localhost' # Bob can do tubes
+    item['subscription'] = 'both'
+    stream.send(roster)
+
+    # Send Bob presence and his caps
+    presence = domish.Element(('jabber:client', 'presence'))
+    presence['from'] = 'bob at localhost/Bob'
+    presence['to'] = 'test at localhost/Resource'
+    c = presence.addElement('c')
+    c['xmlns'] = 'http://jabber.org/protocol/caps'
+    c['node'] = 'http://example.com/ICantBelieveItsNotTelepathy'
+    c['ver'] = '1.2.3'
+    stream.send(presence)
+
+    event = q.expect('stream-iq', iq_type='get',
+        query_ns='http://jabber.org/protocol/disco#info',
+        to='bob at localhost/Bob')
+    result = event.stanza
+    result['type'] = 'result'
+    assert event.query['node'] == \
+        'http://example.com/ICantBelieveItsNotTelepathy#1.2.3'
+    feature = event.query.addElement('feature')
+    feature['var'] = NS_TUBES
+    stream.send(result)
+
+    # Receive a tube offer from Bob
+    (tubes_chan, tubes_iface) = receive_tube_offer(q, bus, conn, stream)
+
+    # Accept the tube and use IPv4
+    call_async(q, tubes_iface, 'AcceptStreamTube', stream_tube_id, 2, 0, '',
+            byte_arrays=True)
+
+    accept_return_event, _ = q.expect_many(
+        EventPattern('dbus-return', method='AcceptStreamTube'),
+        EventPattern('dbus-signal', signal='TubeStateChanged',
+            args=[stream_tube_id, 2]))
+
+    ip = accept_return_event.value[0][0]
+    port = accept_return_event.value[0][1]
+
+    factory = EventProtocolClientFactory(q)
+    reactor.connectTCP(ip, port, factory)
+
+    expect_tube_activity(q, bus, conn, stream)
+    tubes_chan.Close()
+
+    # Receive a tube offer from Bob
+    (tubes_chan, tubes_iface) = receive_tube_offer(q, bus, conn, stream)
+
+    # Accept the tube and use UNIX sockets
+    call_async(q, tubes_iface, 'AcceptStreamTube', stream_tube_id, 0, 0, '',
+            byte_arrays=True)
+
+    accept_return_event, _ = q.expect_many(
+        EventPattern('dbus-return', method='AcceptStreamTube'),
+        EventPattern('dbus-signal', signal='TubeStateChanged',
+            args=[stream_tube_id, 2]))
+
+    socket_address = accept_return_event.value[0]
+
+    factory = EventProtocolClientFactory(q)
+    reactor.connectUNIX(socket_address, factory)
+
+    expect_tube_activity(q, bus, conn, stream)
+    tubes_chan.Close()
+
     # OK, we're done
     conn.Disconnect()
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list