commit e07558f035ee50e597d30ee82f1d4f3b7c25aabd Author: aagbsn aagbsn@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),
tor-commits@lists.torproject.org