[tor-commits] [ooni-probe/master] Add test for Vanilla Tor
art at torproject.org
art at torproject.org
Fri Apr 29 09:42:25 UTC 2016
commit 8b7adcae3bc80d3a844b60aacde5b6d5f8a0a2ae
Author: Arturo Filastò <arturo at filasto.net>
Date: Fri Mar 11 16:06:21 2016 +0100
Add test for Vanilla Tor
---
ooni/nettests/blocking/vanilla_tor.py | 105 ++++++++++++++++++++++++++++++++++
1 file changed, 105 insertions(+)
diff --git a/ooni/nettests/blocking/vanilla_tor.py b/ooni/nettests/blocking/vanilla_tor.py
new file mode 100644
index 0000000..257f21a
--- /dev/null
+++ b/ooni/nettests/blocking/vanilla_tor.py
@@ -0,0 +1,105 @@
+# -*- encoding: utf-8 -*-
+import os
+import tempfile
+import shutil
+
+from twisted.python import usage
+from twisted.internet import reactor, error
+
+import txtorcon
+
+from ooni.utils import log, onion, net
+from ooni import nettest
+
+
+class TorIsNotInstalled(Exception):
+ pass
+
+
+class UsageOptions(usage.Options):
+ optParameters = [
+ ['timeout', 't', 200,
+ 'Specify the timeout after which to consider '
+ 'the Tor bootstrapping process to have failed'], ]
+
+
+class VanillaTor(nettest.NetTestCase):
+ name = "Vanilla Tor"
+ description = "A test for checking if vanilla Tor connections work"
+ author = "Arturo Filastò"
+ version = "0.1.0"
+
+ usageOptions = UsageOptions
+
+ def requirements(self):
+ if not onion.find_tor_binary():
+ raise TorIsNotInstalled(
+ "For instructions on installing Tor see: "
+ "https://www.torproject.org/download/download")
+
+ def setUp(self):
+ self.tor_progress = 0
+ self.timeout = int(self.localOptions['timeout'])
+
+ fd, self.tor_logfile = tempfile.mkstemp()
+ os.close(fd)
+ self.tor_datadir = tempfile.mkdtemp()
+
+ self.report['error'] = None
+ self.report['success'] = None
+ self.report['timeout'] = self.timeout
+ self.report['transport_name'] = 'vanilla'
+ self.report['tor_version'] = str(onion.tor_details['version'])
+ self.report['tor_progress'] = 0
+ self.report['tor_progress_tag'] = None
+ self.report['tor_progress_summary'] = None
+ self.report['tor_log'] = None
+
+ def test_full_tor_connection(self):
+ config = txtorcon.TorConfig()
+ config.ControlPort = net.randomFreePort()
+ config.SocksPort = net.randomFreePort()
+ config.DataDirectory = self.tor_datadir
+ log.msg(
+ "Connecting to tor %s" %
+ (onion.tor_details['version']))
+
+ config.log = ['notice stdout', 'notice file %s' % self.tor_logfile]
+ config.save()
+
+ def updates(prog, tag, summary):
+ log.msg("Progress is at: %s%%" % (prog))
+ self.report['tor_progress'] = int(prog)
+ self.report['tor_progress_tag'] = tag
+ self.report['tor_progress_summary'] = summary
+
+ d = txtorcon.launch_tor(config, reactor, timeout=self.timeout,
+ progress_updates=updates)
+
+ @d.addCallback
+ def setup_complete(proto):
+ try:
+ proto.transport.signalProcess('TERM')
+ except error.ProcessExitedAlready:
+ proto.transport.loseConnection()
+ log.msg("Successfully connected to Tor")
+ self.report['success'] = True
+
+ @d.addErrback
+ def setup_failed(failure):
+ log.msg("Failed to connect to Tor")
+ self.report['success'] = False
+ self.report['error'] = 'timeout-reached'
+ return
+
+ @d.addCallback
+ def write_log(_):
+ with open(self.tor_logfile) as f:
+ self.report['tor_log'] = f.read()
+ os.remove(self.tor_logfile)
+ try:
+ shutil.rmtree(self.tor_datadir)
+ except:
+ pass
+
+ return d
More information about the tor-commits
mailing list