[tor-commits] [ooni-probe/master] Port TCP Connect test

art at torproject.org art at torproject.org
Sat Nov 10 19:21:45 UTC 2012


commit de6751c9761f0590ff114f5a44b0cc5a6a4ea092
Author: Arturo Filastò <art at fuffa.org>
Date:   Sat Nov 10 20:21:05 2012 +0100

    Port TCP Connect test
---
 nettests/core/tcpconnect.py        |   46 +++++++++++++++++++++++++
 to-be-ported/old-api/tcpconnect.py |   65 ------------------------------------
 2 files changed, 46 insertions(+), 65 deletions(-)

diff --git a/nettests/core/tcpconnect.py b/nettests/core/tcpconnect.py
new file mode 100644
index 0000000..4d1e0fc
--- /dev/null
+++ b/nettests/core/tcpconnect.py
@@ -0,0 +1,46 @@
+# -*- encoding: utf-8 -*-
+from twisted.internet.protocol import Factory, Protocol
+from twisted.internet.endpoints import TCP4ClientEndpoint
+
+from twisted.internet.error import ConnectionRefusedError
+from twisted.internet.error import TCPTimedOutError 
+
+from ooni import nettest
+from ooni.utils import log
+
+class TCPFactory(Factory):
+    def buildProtocol(self, addr):
+        return Protocol()
+
+class TCPConnectTest(nettest.NetTestCase):
+    name = "TCP Connect"
+    author = "Arturo Filastò"
+    version = "0.1"
+
+    inputFile = ['file', 'f', None,
+            'File containing the IP:PORT combinations to be tested, one per line']
+
+    def test_connect(self):
+        """
+        This test performs a TCP connection to the remote host on the specified port.
+        the report will contains the string 'success' if the test has
+        succeeded, or the reason for the failure if it has failed.
+        """
+        host, port = self.input.split(":")
+        def connectionSuccess(protocol):
+            protocol.transport.loseConnection()
+            log.debug("Got a connection to %s" % self.input)
+            self.report["connection"] = 'success'
+
+        def connectionFailed(failure):
+            failure.trap(ConnectionRefusedError, TCPTimedOutError)
+            log.debug("Unable to connect to %s" % self.input)
+            self.report["connection"] = str(failure.value)
+
+        from twisted.internet import reactor
+        point = TCP4ClientEndpoint(reactor, host, int(port))
+        d = point.connect(TCPFactory())
+        d.addCallback(connectionSuccess)
+        d.addErrback(connectionFailed)
+        return d
+
diff --git a/to-be-ported/old-api/tcpconnect.py b/to-be-ported/old-api/tcpconnect.py
deleted file mode 100644
index 7758a9e..0000000
--- a/to-be-ported/old-api/tcpconnect.py
+++ /dev/null
@@ -1,65 +0,0 @@
-"""
-This is a self genrated test created by scaffolding.py.
-you will need to fill it up with all your necessities.
-Safe hacking :).
-"""
-from zope.interface import implements
-from twisted.python import usage
-from twisted.plugin import IPlugin
-from twisted.internet.protocol import Factory, Protocol
-from twisted.internet.endpoints import TCP4ClientEndpoint
-
-from ooni.plugoo.interface import ITest
-from ooni.plugoo.tests import OONITest
-from ooni.plugoo.assets import Asset
-from ooni.utils import log
-
-class tcpconnectArgs(usage.Options):
-    optParameters = [['asset', 'a', None, 'File containing IP:PORT combinations, one per line.'],
-                     ['resume', 'r', 0, 'Resume at this index']]
-
-class tcpconnectTest(OONITest):
-    implements(IPlugin, ITest)
-
-    shortName = "tcpconnect"
-    description = "tcpconnect"
-    requirements = None
-    options = tcpconnectArgs
-    blocking = False
-
-    def experiment(self, args):
-        try:
-            host, port = args['asset'].split(':')
-        except:
-            raise Exception("Error in parsing asset. Wrong format?")
-        class DummyFactory(Factory):
-            def buildProtocol(self, addr):
-                return Protocol()
-
-        def gotProtocol(p):
-            p.transport.loseConnection()
-            log.msg("Got a connection!")
-            log.msg(str(p))
-            return {'result': True, 'target': [host, port]}
-
-        def gotError(err):
-            log.msg("Had error :(")
-            log.msg(err)
-            return {'result': False, 'target': [host, port]}
-
-        # What you return here gets handed as input to control
-        point = TCP4ClientEndpoint(self.reactor, host, int(port))
-        d = point.connect(DummyFactory())
-        d.addCallback(gotProtocol)
-        d.addErrback(gotError)
-        return d
-
-    def load_assets(self):
-        if self.local_options:
-            return {'asset': Asset(self.local_options['asset'])}
-        else:
-            return {}
-
-# We need to instantiate it otherwise getPlugins does not detect it
-# XXX Find a way to load plugins without instantiating them.
-#tcpconnect = tcpconnectTest(None, None, None)



More information about the tor-commits mailing list