[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