[telepathy-gabble/master] add BytestreamS5BBugged to simulate Pidgin's buggy SOCKS5 implementation

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Fri Apr 3 09:26:02 PDT 2009


---
 .../twisted/file-transfer/file_transfer_helper.py  |   56 ++++++++++++++++++++
 1 files changed, 56 insertions(+), 0 deletions(-)

diff --git a/tests/twisted/file-transfer/file_transfer_helper.py b/tests/twisted/file-transfer/file_transfer_helper.py
index 46cb376..b17f132 100644
--- a/tests/twisted/file-transfer/file_transfer_helper.py
+++ b/tests/twisted/file-transfer/file_transfer_helper.py
@@ -2,6 +2,7 @@ import dbus
 import socket
 import md5
 import time
+import sha
 
 from servicetest import EventPattern
 from gabbletest import acknowledge_iq, sync_stream, exec_test
@@ -427,6 +428,8 @@ def exec_file_transfer_test(test_cls):
     exec_test(test.test)
     test = test_cls(BytestreamS5B)
     exec_test(test.test)
+    test = test_cls(BytestreamS5BBugged)
+    exec_test(test.test)
 
 class Bytestream(object):
     def __init__(self, stream, q):
@@ -546,3 +549,56 @@ class BytestreamS5B(Bytestream):
 
     def wait_bytestream_closed(self):
         self.q.expect('s5b-connection-lost')
+
+class BytestreamS5BBugged(BytestreamS5B):
+    """Simulate buggy S5B implementation (as Pidgin's one)"""
+    def open_bytestream(self, from_, to):
+        port = listen_socks5(self.q)
+
+        send_socks5_init(self.stream, from_, to,
+            'alpha', 'tcp', [(from_, '127.0.0.1', port)])
+
+        # FIXME: we should share lot of code with socks5_expect_connection
+        # once we'll have refactored Bytestream test objects
+        sid = 'alpha'
+        initiator = from_
+        target = 'test at localhost/Resource'
+
+        # wait auth
+        event = self.q.expect('s5b-data-received')
+        assert event.data == '\x05\x01\x00' # version 5, 1 auth method, no auth
+
+        # send auth reply
+        transport = event.transport
+        transport.write('\x05\x00') # version 5, no auth
+        event = self.q.expect('s5b-data-received')
+
+        # sha-1(sid + initiator + target)
+        unhashed_domain = sid + initiator + target
+        hashed_domain = sha.new(unhashed_domain).hexdigest()
+
+        # wait CONNECT cmd
+        # version 5, connect, reserved, domain type
+        expected_connect = '\x05\x01\x00\x03'
+        expected_connect += chr(40) # len (SHA-1)
+        expected_connect += hashed_domain
+        expected_connect += '\x00\x00' # port
+        assert event.data == expected_connect
+
+        # send CONNECT reply
+        # version 5, ok, reserved, domain type
+        connect_reply = '\x05\x00\x00\x03'
+        # I'm Pidgin, why should I respect SOCKS5 XEP?
+        domain = '127.0.0.1'
+        connect_reply += chr(len(domain))
+        connect_reply += domain
+        connect_reply += '\x00\x00' # port
+        transport.write(connect_reply)
+
+        self.transport = transport
+
+        offset_event, state_event = self.q.expect_many(
+            EventPattern('dbus-signal', signal='InitialOffsetDefined'),
+            EventPattern('dbus-signal', signal='FileTransferStateChanged'))
+
+        return offset_event, state_event
-- 
1.5.6.5




More information about the telepathy-commits mailing list