[tor-commits] [ooni-probe/master] Nettests are now running properly with the TaskManager

isis at torproject.org isis at torproject.org
Sun Mar 10 01:57:02 UTC 2013


commit cf274700c3e43f86d30a7fd5eb5cd093dbfc4e0a
Author: Arturo Filastò <art at fuffa.org>
Date:   Wed Jan 16 20:58:29 2013 +0100

    Nettests are now running properly with the TaskManager
    
    Issue retries, make tests timeout, etc.
---
 ooni/director.py |    4 ++-
 ooni/errors.py   |    2 +-
 ooni/nettest.py  |   97 +++++++++++++++++++++++++----------------------------
 ooni/reporter.py |    2 -
 4 files changed, 50 insertions(+), 55 deletions(-)

diff --git a/ooni/director.py b/ooni/director.py
index 6fe3859..80cf22c 100644
--- a/ooni/director.py
+++ b/ooni/director.py
@@ -1,6 +1,6 @@
 from ooni.managers import ReportEntryManager, MeasurementManager
 from ooni.reporter import Report
-
+from ooni.utils import log
 from ooni.nettest import NetTest
 
 class Director(object):
@@ -117,11 +117,13 @@ class Director(object):
         self.totalMeasurements += 1
 
     def measurementSucceeded(self, measurement):
+        log.msg("Successfully completed measurement: %s" % measurement)
         self.totalMeasurementRuntime += measurement.runtime
         self.successfulMeasurements += 1
         return measurement.testInstance.report
 
     def measurementFailed(self, failure, measurement):
+        log.msg("Failed doing measurement: %s" % measurement)
         self.totalMeasurementRuntime += measurement.runtime
 
         self.failedMeasurements += 1
diff --git a/ooni/errors.py b/ooni/errors.py
index c7ecfae..cd4a136 100644
--- a/ooni/errors.py
+++ b/ooni/errors.py
@@ -14,7 +14,7 @@ from txsocksx.errors import HostUnreachable, ConnectionRefused
 from txsocksx.errors import TTLExpired, CommandNotSupported
 
 from socket import gaierror
-
+from ooni.utils import log
 def handleAllFailures(failure):
     """
     Here we make sure to trap all the failures that are supported by the
diff --git a/ooni/nettest.py b/ooni/nettest.py
index 7c4278a..728d093 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -15,51 +15,6 @@ from StringIO import StringIO
 class NoTestCasesFound(Exception):
     pass
 
-class NetTestState(object):
-    def __init__(self, allTasksDone):
-        """
-        This keeps track of the state of a running NetTests case.
-
-        Args:
-            allTasksDone is a deferred that will get fired once all the NetTest
-            cases have reached a final done state.
-        """
-        self.doneTasks = 0
-        self.tasks = 0
-
-        self.completedScheduling = False
-        self.allTasksDone = allTasksDone
-
-    def taskCreated(self):
-        self.tasks += 1
-
-    def checkAllTasksDone(self):
-        if self.completedScheduling and \
-                self.doneTasks == self.tasks:
-            self.allTasksDone.callback(self.doneTasks)
-
-    def taskDone(self):
-        """
-        This is called every time a task has finished running.
-        """
-        self.doneTasks += 1
-        self.checkAllTasksDone()
-
-    def allTasksScheduled(self):
-        """
-        This should be called once all the tasks that need to run have been
-        scheduled.
-
-        XXX this is ghetto.
-        The reason for which we are calling allTasksDone inside of the
-        allTasksScheduled method is called after all tasks are done, then we
-        will run into a race condition. The race is that we don't end up
-        checking that all the tasks are complete because no task is to be
-        scheduled.
-        """
-        self.completedScheduling = True
-        self.checkAllTasksDone()
-
 class NetTestLoader(object):
     method_prefix = 'test'
 
@@ -226,6 +181,51 @@ class NetTestLoader(object):
             pass
         return test_cases
 
+class NetTestState(object):
+    def __init__(self, allTasksDone):
+        """
+        This keeps track of the state of a running NetTests case.
+
+        Args:
+            allTasksDone is a deferred that will get fired once all the NetTest
+            cases have reached a final done state.
+        """
+        self.doneTasks = 0
+        self.tasks = 0
+
+        self.completedScheduling = False
+        self.allTasksDone = allTasksDone
+
+    def taskCreated(self):
+        self.tasks += 1
+
+    def checkAllTasksDone(self):
+        if self.completedScheduling and \
+                self.doneTasks == self.tasks:
+            self.allTasksDone.callback(self.doneTasks)
+
+    def taskDone(self):
+        """
+        This is called every time a task has finished running.
+        """
+        self.doneTasks += 1
+        self.checkAllTasksDone()
+
+    def allTasksScheduled(self):
+        """
+        This should be called once all the tasks that need to run have been
+        scheduled.
+
+        XXX this is ghetto.
+        The reason for which we are calling allTasksDone inside of the
+        allTasksScheduled method is called after all tasks are done, then we
+        will run into a race condition. The race is that we don't end up
+        checking that all the tasks are complete because no task is to be
+        scheduled.
+        """
+        self.completedScheduling = True
+        self.checkAllTasksDone()
+
 class NetTest(object):
     director = None
 
@@ -295,12 +295,7 @@ class NetTest(object):
         """
         self.report.open()
         for test_class, test_method in self.testCases:
-            if not test_class.inputs:
-                # XXX this is a bit dirty, refactor me
-                yield self.makeMeasurement(test_class, test_method)
-                self.state.taskCreated()
-                break
-
+            log.debug("Running %s %s" % (test_class, test_method))
             for test_input in test_class.inputs:
                 measurement = self.makeMeasurement(test_class, test_method,
                         test_input)
diff --git a/ooni/reporter.py b/ooni/reporter.py
index 7d33bd1..30c4817 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -363,8 +363,6 @@ class Report(object):
         self.done.addCallback(self.close)
 
         self.reportEntryManager = reportEntryManager
-        # XXX call this when starting test
-        # self.open()
 
     def open(self):
         """





More information about the tor-commits mailing list