[tor-commits] [ooni-probe/master] Refactor test_case loader so that test methods share an input set

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


commit e07558f035ee50e597d30ee82f1d4f3b7c25aabd
Author: aagbsn <aagbsn at extc.org>
Date:   Sat Jan 26 11:49:57 2013 +0000

    Refactor test_case loader so that test methods share an input set
---
 ooni/nettest.py       |   21 +++++++++++----------
 tests/test_nettest.py |   44 +++++++++++++-------------------------------
 2 files changed, 24 insertions(+), 41 deletions(-)

diff --git a/ooni/nettest.py b/ooni/nettest.py
index 61e6270..9e86ab4 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -202,8 +202,11 @@ class NetTestLoader(object):
         try:
             assert issubclass(item, NetTestCase)
             methods = reflect.prefixedMethodNames(item, self.method_prefix)
+            test_methods = []
             for method in methods:
-                test_cases.append((item, self.method_prefix + method))
+                test_methods.append(self.method_prefix + method)
+            if test_methods:
+                test_cases.append((item, test_methods))
         except (TypeError, AssertionError):
             pass
         return test_cases
@@ -336,15 +339,13 @@ class NetTest(object):
         This is a generator that yields measurements and registers the
         callbacks for when a measurement is successful or has failed.
         """
-        self.report.open()
-        for test_class, test_method in self.testCases:
-            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)
-
-                self.state.taskCreated()
-                yield measurement
+        for test_class, test_methods in self.testCases:
+            for input in test_class.inputs:
+                for method in test_methods:
+                    log.debug("Running %s %s" % (test_class, method))
+                    measurement = self.makeMeasurement(test_class, method, input)
+                    self.state.taskCreated()
+                    yield measurement
 
         self.state.allTasksScheduled()
 
diff --git a/tests/test_nettest.py b/tests/test_nettest.py
index ee571e7..5645dbf 100644
--- a/tests/test_nettest.py
+++ b/tests/test_nettest.py
@@ -104,6 +104,16 @@ class TestNetTest(unittest.TestCase):
     def assertCallable(self, thing):
         self.assertIn('__call__', dir(thing))
 
+    def verifyMethods(self, testCases):
+        uniq_test_methods = set()
+        for test_class, test_methods in testCases:
+            instance = test_class()
+            for test_method in test_methods:
+                c = getattr(instance, test_method)
+                self.assertCallable(c)
+                uniq_test_methods.add(test_method)
+        self.assertEqual(set(['test_a', 'test_b']), uniq_test_methods)
+
     def test_load_net_test_from_file(self):
         """
         Given a file verify that the net test cases are properly
@@ -116,17 +126,7 @@ class TestNetTest(unittest.TestCase):
 
         ntl = NetTestLoader(net_test_file,
                 dummyArgs)
-
-        test_methods = set()
-        for test_class, test_method in ntl.testCases:
-            instance = test_class()
-            c = getattr(instance, test_method)
-            self.assertCallable(c)
-
-            test_methods.add(test_method)
-
-        self.assertEqual(set(['test_a', 'test_b']), test_methods)
-
+        self.verifyMethods(ntl.testCases)
         os.unlink(net_test_file)
 
     def test_load_net_test_from_str(self):
@@ -136,16 +136,7 @@ class TestNetTest(unittest.TestCase):
         """
         ntl = NetTestLoader(net_test_string,
                 dummyArgs)
-
-        test_methods = set()
-        for test_class, test_method in ntl.testCases:
-            instance = test_class()
-            c = getattr(instance, test_method)
-            self.assertCallable(c)
-
-            test_methods.add(test_method)
-
-        self.assertEqual(set(['test_a', 'test_b']), test_methods)
+        self.verifyMethods(ntl.testCases)
 
     def test_load_net_test_from_StringIO(self):
         """
@@ -154,16 +145,7 @@ class TestNetTest(unittest.TestCase):
         """
         ntl = NetTestLoader(StringIO(net_test_string),
                 dummyArgs)
-
-        test_methods = set()
-        for test_class, test_method in ntl.testCases:
-            instance = test_class()
-            c = getattr(instance, test_method)
-            self.assertCallable(c)
-
-            test_methods.add(test_method)
-
-        self.assertEqual(set(['test_a', 'test_b']), test_methods)
+        self.verifyMethods(ntl.testCases)
 
     def test_load_with_option(self):
         ntl = NetTestLoader(StringIO(net_test_string),





More information about the tor-commits mailing list