commit abd7de7fb6e64d0c1974d8554950d82bace7f983 Author: Arturo Filastò art@fuffa.org Date: Sat Nov 10 12:26:43 2012 +0100
Refactor the logic for running of tests * There was a bug related to generators not being rewindable we now convert the generator of one input unit to a list --- ooni/oonicli.py | 2 +- ooni/reporter.py | 2 +- ooni/runner.py | 55 +++++++++++++++++++++++++++++++++++------------------ 3 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/ooni/oonicli.py b/ooni/oonicli.py index 8e4fa14..f7a6fe3 100644 --- a/ooni/oonicli.py +++ b/ooni/oonicli.py @@ -77,7 +77,7 @@ def testsEnded(*arg, **kw): """ You can place here all the post shutdown tasks. """ - log.debug("Finished running all tests") + log.debug("testsEnded: Finished running all tests")
def run(): """ diff --git a/ooni/reporter.py b/ooni/reporter.py index 6d37838..33b4675 100644 --- a/ooni/reporter.py +++ b/ooni/reporter.py @@ -230,7 +230,7 @@ class OReporter(YamlReporter): self.writeReportEntry(report)
def allDone(self): - log.debug("Finished running all tests") + log.debug("allDone: Finished running all tests") self.finish() try: reactor.stop() diff --git a/ooni/runner.py b/ooni/runner.py index 238d7d5..d03f6c6 100644 --- a/ooni/runner.py +++ b/ooni/runner.py @@ -13,6 +13,7 @@ import sys import time import inspect import traceback +import itertools
from twisted.python import reflect, usage from twisted.internet import defer @@ -150,6 +151,29 @@ def loadTestsAndOptions(classes, cmd_line_options):
return test_cases, options
+def runTestWithInput(test_class, test_method, test_input, oreporter): + log.debug("Running %s with %s" % (test_method, test_input)) + def test_done(result, test_instance): + oreporter.testDone(test_instance) + + def test_error(error, test_instance): + log.err("%s\n" % error) + + test_instance = test_class() + test_instance.input = test_input + test_instance.report = {} + log.debug("Processing %s" % test_instance.name) + # use this to keep track of the test runtime + test_instance._start_time = time.time() + # call setup on the test + test_instance.setUp() + test = getattr(test_instance, test_method) + d = defer.maybeDeferred(test) + d.addCallback(test_done, test_instance) + d.addErrback(test_error, test_instance) + log.debug("returning %s input" % test_method) + return d + def runTestWithInputUnit(test_class, test_method, input_unit, oreporter): @@ -164,27 +188,17 @@ def runTestWithInputUnit(test_class,
returns a deferred list containing all the tests to be run at this time """ - def test_done(result, test_instance): - oreporter.testDone(test_instance) - - def test_error(error, test_instance): - log.err("%s\n" % error)
dl = [] - for i in input_unit: - test_instance = test_class() - test_instance.input = i - test_instance.report = {} - # use this to keep track of the test runtime - test_instance._start_time = time.time() - # call setup on the test - test_instance.setUp() - test = getattr(test_instance, test_method) - d = defer.maybeDeferred(test) - d.addCallback(test_done, test_instance) - d.addErrback(test_error, test_instance) + log.debug("input unit %s" % input_unit) + for test_input in input_unit: + log.debug("IU: %s" % test_input) + try: + d = runTestWithInput(test_class, test_method, test_input, oreporter) + except Exception, e: + print e + log.debug("here y0") dl.append(d) - return defer.DeferredList(dl)
@defer.inlineCallbacks @@ -217,11 +231,14 @@ def runTestCases(test_cases, options, # it is used to store all the deferreds of the tests that # are run for input_unit in input_unit_factory: + # We do this because generators can't we rewound. + input_list = list(input_unit) for test_case in test_cases: + log.debug("Processing %s" % test_case[1]) test_class = test_case[0] test_method = test_case[1] yield runTestWithInputUnit(test_class, - test_method, input_unit, + test_method, input_list, oreporter) oreporter.allDone()
tor-commits@lists.torproject.org