commit 12c12cee5224dc1f62ae7cfc77cd4e0c6e2283e9 Author: Arturo Filastò art@fuffa.org Date: Tue Nov 27 03:08:15 2012 +0100
If the option start_tor is set to True, make sure that Tor is started before running the test deck --- ooni/oonicli.py | 64 +++++++++++++++++++++++++++++++++++++++++++------------ ooni/runner.py | 61 +++++++++++++++++++--------------------------------- ooniprobe.conf | 4 +- 3 files changed, 74 insertions(+), 55 deletions(-)
diff --git a/ooni/oonicli.py b/ooni/oonicli.py index 2b0991b..26cfdab 100644 --- a/ooni/oonicli.py +++ b/ooni/oonicli.py @@ -96,22 +96,26 @@ def testsEnded(*arg, **kw): try: reactor.stop() except: pass
-def run(): - """ - Call me to begin testing from a file. - """ - cmd_line_options = Options() - if len(sys.argv) == 1: - cmd_line_options.getUsage() +def startSniffing(): + from ooni.utils.txscapy import ScapyFactory, ScapySniffer try: - cmd_line_options.parseOptions() - except usage.UsageError, ue: - raise SystemExit, "%s: %s" % (sys.argv[0], ue) + checkForRoot() + except NotRootError: + print "[!] Includepcap options requires root priviledges to run" + print " you should run ooniprobe as root or disable the options in ooniprobe.conf" + sys.exit(1) + + print "Starting sniffer" + config.scapyFactory = ScapyFactory(config.advanced.interface) + + sniffer = ScapySniffer(config.reports.pcap) + config.scapyFactory.registerProtocol(sniffer) +
+def runTestDeckOrTest(result, cmd_line_options): deck_dl = [] resume = cmd_line_options['resume']
- log.start(cmd_line_options['logfile']) if cmd_line_options['testdeck']: test_deck = yaml.safe_load(open(cmd_line_options['testdeck'])) for test in test_deck: @@ -135,7 +139,39 @@ def run(): # Print every 5 second the list of current tests running l = task.LoopingCall(updateStatusBar) l.start(5.0) + return d2 + +def errorRunningTests(failure): + failure.printTraceback() + +def run(): + """ + Call me to begin testing from a file. + """ + + cmd_line_options = Options() + if len(sys.argv) == 1: + cmd_line_options.getUsage() + try: + cmd_line_options.parseOptions() + except usage.UsageError, ue: + raise SystemExit, "%s: %s" % (sys.argv[0], ue) + + log.start(cmd_line_options['logfile']) + + if config.privacy.includepcap: + log.msg("Starting") + runner.startSniffing() + + if config.advanced.start_tor: + log.msg("Starting Tor...") + d = runner.startTor() + d.addCallback(runTestDeckOrTest, cmd_line_options) + d.addErrback(errorRunningTests) + else: + # We need to pass None as first argument because when the callback + # is fired it will pass it's result to runTestCase. + d = runTestDeckOrTest(None, cmd_line_options) + d.addErrback(errorRunningTests)
- if config.start_reactor: - log.debug("Starting reactor") - reactor.run() + reactor.run() diff --git a/ooni/runner.py b/ooni/runner.py index 6940ec6..30682e9 100644 --- a/ooni/runner.py +++ b/ooni/runner.py @@ -433,7 +433,6 @@ class UnableToStartTor(Exception): pass
def startTor(): - @defer.inlineCallbacks def state_complete(state): config.tor_state = state @@ -444,9 +443,9 @@ def startTor(): config.tor.socks_port = yield state.protocol.get_conf("SocksPort") config.tor.control_port = yield state.protocol.get_conf("ControlPort")
- def setup_failed(arg): - log.exception(arg) - raise UnableTorStartTor + def setup_failed(failure): + log.exception(failure) + raise UnableToStartTor
def setup_complete(proto): """ @@ -459,7 +458,7 @@ def startTor(): return state.post_bootstrap
def updates(prog, tag, summary): - log.msg("%d%%: %s" % (prog, summary)) + print "%d%%: %s" % (prog, summary)
tor_config = TorConfig() if config.tor.control_port: @@ -481,11 +480,27 @@ def startTor(): log.debug("Setting control port as %s" % tor_config.ControlPort) log.debug("Setting SOCKS port as %s" % tor_config.SocksPort)
- d = launch_tor(tor_config, reactor, progress_updates=updates) + d = launch_tor(tor_config, reactor, + progress_updates=updates) d.addCallback(setup_complete) d.addErrback(setup_failed) return d
+def startSniffing(): + from ooni.utils.txscapy import ScapyFactory, ScapySniffer + try: + checkForRoot() + except NotRootError: + print "[!] Includepcap options requires root priviledges to run" + print " you should run ooniprobe as root or disable the options in ooniprobe.conf" + sys.exit(1) + + print "Starting sniffer" + config.scapyFactory = ScapyFactory(config.advanced.interface) + + sniffer = ScapySniffer(config.reports.pcap) + config.scapyFactory.registerProtocol(sniffer) + def runTest(cmd_line_options): config.cmd_line_options = cmd_line_options config.generateReportFilenames() @@ -502,36 +517,4 @@ def runTest(cmd_line_options): classes = findTestClassesFromFile(cmd_line_options['test']) test_cases, options = loadTestsAndOptions(classes, cmd_line_options)
- if config.privacy.includepcap: - from ooni.utils.txscapy import ScapyFactory, ScapySniffer - try: - checkForRoot() - except NotRootError: - print "[!] Includepcap options requires root priviledges to run" - print " you should run ooniprobe as root or disable the options in ooniprobe.conf" - sys.exit(1) - - print "Starting sniffer" - config.scapyFactory = ScapyFactory(config.advanced.interface) - - sniffer = ScapySniffer(config.reports.pcap) - config.scapyFactory.registerProtocol(sniffer) - - # If we should start Tor then start it. Once Tor has started we will make - # sure. If not we assume that it is already running - if config.advanced.start_tor: - def tor_startup_failed(failure): - log.err(failure) - - def tor_started(): - return runTestCases(test_cases, - options, cmd_line_options) - - d = startTor() - d.addCallback(tor_started) - d.addErrback(tor_startup_failed) - return d - - else: - return runTestCases(test_cases, - options, cmd_line_options) + return runTestCases(test_cases, options, cmd_line_options) diff --git a/ooniprobe.conf b/ooniprobe.conf index b553a37..ed77dfe 100644 --- a/ooniprobe.conf +++ b/ooniprobe.conf @@ -22,13 +22,13 @@ advanced: # /path/to/ooni-probe/data/ geoip_data_dir: /usr/share/GeoIP/ debug: true - threadpool_size: 10 - tor_binary: '/usr/sbin/tor' # For auto detection interface: auto # Of specify a specific interface #interface: wlan0 + # If you do not specify start_tor, you will have to have Tor running and + # explicitly set the control port and orport. start_tor: true tor: #socks_port: 9050