[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [ooni-probe/master] Implement TCP payload sending test template



commit f873cd780a37451810b04526065fbe90d6250ba7
Author: Arturo Filastò <art@xxxxxxxxx>
Date:   Wed Nov 21 18:59:56 2012 +0100

    Implement TCP payload sending test template
    * Example test based on this test template
---
 nettests/examples/example_tcpt.py |    8 +++++
 ooni/templates/tcpt.py            |   58 +++++++++++++++++++++++++++++++++++++
 2 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/nettests/examples/example_tcpt.py b/nettests/examples/example_tcpt.py
new file mode 100644
index 0000000..ccb3077
--- /dev/null
+++ b/nettests/examples/example_tcpt.py
@@ -0,0 +1,8 @@
+from ooni.templates import tcpt
+
+class ExampleTCPT(tcpt.TCPTest):
+    def test_hello_world(self):
+        self.address = "127.0.0.1"
+        self.port = 57002
+        payload = "Hello World!\n\r"
+        return self.sendPayload(payload)
diff --git a/ooni/templates/tcpt.py b/ooni/templates/tcpt.py
new file mode 100644
index 0000000..3312cbe
--- /dev/null
+++ b/ooni/templates/tcpt.py
@@ -0,0 +1,58 @@
+from twisted.internet import protocol, defer, reactor
+from twisted.internet.error import ConnectionDone
+from twisted.internet.endpoints import TCP4ClientEndpoint
+
+from ooni.nettest import NetTestCase
+from ooni.utils import log
+
+class TCPSender(protocol.Protocol):
+    report = None
+    def dataReceived(self, data):
+        self.report['received'].append(data)
+
+    def sendPayload(self, payload):
+        self.report['sent'].append(payload)
+        self.transport.write(payload)
+
+class TCPSenderFactory(protocol.Factory):
+    def buildProtocol(self, addr):
+        return TCPSender()
+
+class TCPTest(NetTestCase):
+    name = "Base TCP Test"
+    version = "0.1"
+
+    requiresRoot = False
+    timeout = 2
+    address = None
+    port = None
+
+    def _setUp(self):
+        self.report['sent'] = []
+        self.report['received'] = []
+
+    def sendPayload(self, payload):
+        d1 = defer.Deferred()
+
+        def closeConnection(p):
+            p.transport.loseConnection()
+            log.debug("Closing connection")
+            d1.callback(None)
+
+        def errback(failure):
+            self.report['error'] = str(failure)
+            log.exception(failure)
+
+        def connected(p):
+            log.debug("Connected to %s:%s" % (self.address, self.port))
+            p.report = self.report
+            p.sendPayload(payload)
+            reactor.callLater(self.timeout, closeConnection, p)
+
+        point = TCP4ClientEndpoint(reactor, self.address, self.port)
+        d2 = point.connect(TCPSenderFactory())
+        d2.addCallback(connected)
+        d2.addErrback(errback)
+        return d1
+
+



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits