[tor-commits] [ooni-probe/master] Parse the test specific command line options when running a test or tests
art at torproject.org
art at torproject.org
Tue Nov 27 14:15:56 UTC 2012
commit 5cbd79a53c6e9d2612b270677ed7d3f5c9401225
Author: Arturo Filastò <art at fuffa.org>
Date: Tue Nov 27 11:54:55 2012 +0100
Parse the test specific command line options when running a test or tests
* Read the SOCKS port and Control port via the control port when starting with Tor
---
ooni/oonicli.py | 57 ++++++++++++++++++++++++++++++++----------------------
ooni/runner.py | 20 ++++++++++++++----
2 files changed, 49 insertions(+), 28 deletions(-)
diff --git a/ooni/oonicli.py b/ooni/oonicli.py
index 26cfdab..f706ee3 100644
--- a/ooni/oonicli.py
+++ b/ooni/oonicli.py
@@ -111,26 +111,18 @@ def startSniffing():
sniffer = ScapySniffer(config.reports.pcap)
config.scapyFactory.registerProtocol(sniffer)
+def runTestList(none, test_list):
+ """
+ none: is always None.
-def runTestDeckOrTest(result, cmd_line_options):
+ test_list (list): a list of tuples containing (test_cases, options,
+ cmd_line_options)
+ """
deck_dl = []
- resume = cmd_line_options['resume']
- if cmd_line_options['testdeck']:
- test_deck = yaml.safe_load(open(cmd_line_options['testdeck']))
- for test in test_deck:
- del cmd_line_options
- cmd_line_options = test['options']
- if resume:
- cmd_line_options['resume'] = True
- else:
- cmd_line_options['resume'] = False
- d1 = runner.runTest(cmd_line_options)
- deck_dl.append(d1)
- else:
- log.msg("No test deck detected")
- del cmd_line_options['testdeck']
- d1 = runner.runTest(cmd_line_options)
+ for test in test_list:
+ test_cases, options, cmd_line_options = test
+ d1 = runner.runTestCases(test_cases, options, cmd_line_options)
deck_dl.append(d1)
d2 = defer.DeferredList(deck_dl)
@@ -146,9 +138,8 @@ def errorRunningTests(failure):
def run():
"""
- Call me to begin testing from a file.
+ Parses command line arguments of test.
"""
-
cmd_line_options = Options()
if len(sys.argv) == 1:
cmd_line_options.getUsage()
@@ -163,15 +154,35 @@ def run():
log.msg("Starting")
runner.startSniffing()
+ resume = cmd_line_options['resume']
+
+ # contains (test_cases, options, cmd_line_options)
+ test_list = []
+
+ if cmd_line_options['testdeck']:
+ test_deck = yaml.safe_load(open(cmd_line_options['testdeck']))
+ for test in test_deck:
+ del cmd_line_options
+ cmd_line_options = test['options']
+ if resume:
+ cmd_line_options['resume'] = True
+ else:
+ cmd_line_options['resume'] = False
+ test_list.append(runner.loadTest(cmd_line_options))
+ else:
+ log.msg("No test deck detected")
+ del cmd_line_options['testdeck']
+ test_list.append(runner.loadTest(cmd_line_options))
+
if config.advanced.start_tor:
log.msg("Starting Tor...")
d = runner.startTor()
- d.addCallback(runTestDeckOrTest, cmd_line_options)
+ d.addCallback(runTestList, test_list)
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)
+ # We need to pass None as first argument because when the callback is
+ # fired it will pass it's result to runTestCase.
+ d = runTestList(None, test_list)
d.addErrback(errorRunningTests)
reactor.run()
diff --git a/ooni/runner.py b/ooni/runner.py
index 30682e9..d5cc5fb 100644
--- a/ooni/runner.py
+++ b/ooni/runner.py
@@ -44,9 +44,11 @@ def processTest(obj):
:param obj:
An uninstantiated old test, which should be a subclass of
:class:`ooni.plugoo.tests.OONITest`.
+
:param cmd_line_options:
A configured and instantiated :class:`twisted.python.usage.Options`
class.
+
"""
if not hasattr(obj.usageOptions, 'optParameters'):
obj.usageOptions.optParameters = []
@@ -440,8 +442,12 @@ def startTor():
log.debug("We now have the following circuits: ")
for circuit in state.circuits.values():
log.debug(" * %s" % circuit)
- config.tor.socks_port = yield state.protocol.get_conf("SocksPort")
- config.tor.control_port = yield state.protocol.get_conf("ControlPort")
+
+ socks_port = yield state.protocol.get_conf("SocksPort")
+ control_port = yield state.protocol.get_conf("ControlPort")
+
+ config.tor.socks_port = int(socks_port.values()[0])
+ config.tor.control_port = int(control_port.values()[0])
def setup_failed(failure):
log.exception(failure)
@@ -458,7 +464,7 @@ def startTor():
return state.post_bootstrap
def updates(prog, tag, summary):
- print "%d%%: %s" % (prog, summary)
+ log.msg("%d%%: %s" % (prog, summary))
tor_config = TorConfig()
if config.tor.control_port:
@@ -501,7 +507,11 @@ def startSniffing():
sniffer = ScapySniffer(config.reports.pcap)
config.scapyFactory.registerProtocol(sniffer)
-def runTest(cmd_line_options):
+def loadTest(cmd_line_options):
+ """
+ Takes care of parsing test command line arguments and loading their
+ options.
+ """
config.cmd_line_options = cmd_line_options
config.generateReportFilenames()
@@ -517,4 +527,4 @@ def runTest(cmd_line_options):
classes = findTestClassesFromFile(cmd_line_options['test'])
test_cases, options = loadTestsAndOptions(classes, cmd_line_options)
- return runTestCases(test_cases, options, cmd_line_options)
+ return test_cases, options, cmd_line_options
More information about the tor-commits
mailing list