[tor-commits] [ooni-probe/master] Clean up NetTest tests

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


commit bc62ec09ab0b62a92364c019797a2c44e41991f2
Author: aagbsn <aagbsn at extc.org>
Date:   Fri Jan 25 14:15:08 2013 +0000

    Clean up NetTest tests
---
 tests/test_nettest.py |  143 +++++++++++++++++++++++++-----------------------
 1 files changed, 74 insertions(+), 69 deletions(-)

diff --git a/tests/test_nettest.py b/tests/test_nettest.py
index a029fae..ee571e7 100644
--- a/tests/test_nettest.py
+++ b/tests/test_nettest.py
@@ -4,9 +4,10 @@ from tempfile import TemporaryFile, mkstemp
 
 from twisted.trial import unittest
 from twisted.internet import defer, reactor
+from twisted.python.usage import UsageError
 
 from ooni.nettest import NetTest, InvalidOption, MissingRequiredOption
-from ooni.nettest import FailureToLoadNetTest
+from ooni.nettest import NetTestLoader, FailureToLoadNetTest
 from ooni.tasks import BaseTask
 from ooni.utils import NotRootError
 
@@ -17,6 +18,7 @@ from ooni.managers import TaskManager
 from tests.mocks import MockMeasurement, MockMeasurementFailOnce
 from tests.mocks import MockNetTest, MockDirector, MockReporter
 from tests.mocks import MockMeasurementManager
+defer.setDebugging(True)
 
 net_test_string = """
 from twisted.python import usage
@@ -84,9 +86,13 @@ class DummyTestCase(NetTestCase):
 """
 
 dummyInputs = range(1)
-dummyOptions = {'spam': 'notham'}
-dummyInvalidOptions = {'cram': 'jam'}
-dummyOptionsWithRequiredOptions = {'foo':'moo', 'bar':'baz'}
+dummyArgs = ('--spam', 'notham')
+dummyOptions = {'spam':'notham'}
+dummyInvalidArgs = ('--cram', 'jam')
+dummyInvalidOptions= {'cram':'jam'}
+dummyArgsWithRequiredOptions = ('--foo', 'moo', '--bar', 'baz')
+dummyRequiredOptions = {'foo':'moo', 'bar':'baz'}
+dummyArgsWithFile = ('--spam', 'notham', '--file', 'dummyInputFile.txt')
 
 class TestNetTest(unittest.TestCase):
     timeout = 1
@@ -108,11 +114,11 @@ class TestNetTest(unittest.TestCase):
             f.write(net_test_string)
         f.close()
 
-        net_test_from_file = NetTest(net_test_file,
-                dummyOptions, MockReporter())
+        ntl = NetTestLoader(net_test_file,
+                dummyArgs)
 
         test_methods = set()
-        for test_class, test_method in net_test_from_file.test_cases:
+        for test_class, test_method in ntl.testCases:
             instance = test_class()
             c = getattr(instance, test_method)
             self.assertCallable(c)
@@ -128,11 +134,11 @@ class TestNetTest(unittest.TestCase):
         Given a file like object verify that the net test cases are properly
         generated.
         """
-        net_test_from_string = NetTest(net_test_string,
-                dummyOptions, MockReporter())
+        ntl = NetTestLoader(net_test_string,
+                dummyArgs)
 
         test_methods = set()
-        for test_class, test_method in net_test_from_string.test_cases:
+        for test_class, test_method in ntl.testCases:
             instance = test_class()
             c = getattr(instance, test_method)
             self.assertCallable(c)
@@ -146,11 +152,11 @@ class TestNetTest(unittest.TestCase):
         Given a file like object verify that the net test cases are properly
         generated.
         """
-        net_test_from_string = NetTest(StringIO(net_test_string),
-                dummyOptions, MockReporter())
+        ntl = NetTestLoader(StringIO(net_test_string),
+                dummyArgs)
 
         test_methods = set()
-        for test_class, test_method in net_test_from_string.test_cases:
+        for test_class, test_method in ntl.testCases:
             instance = test_class()
             c = getattr(instance, test_method)
             self.assertCallable(c)
@@ -160,95 +166,94 @@ class TestNetTest(unittest.TestCase):
         self.assertEqual(set(['test_a', 'test_b']), test_methods)
 
     def test_load_with_option(self):
-        net_test = NetTest(StringIO(net_test_string),
-                dummyOptions, None)
-        self.assertIsInstance(net_test, NetTest)
-        net_test.setUpNetTestCases()
-        for test_klass, test_meth in net_test.test_cases:
+        ntl = NetTestLoader(StringIO(net_test_string),
+                dummyArgs)
+        self.assertIsInstance(ntl, NetTestLoader)
+        for test_klass, test_meth in ntl.testCases:
             for option in dummyOptions.keys():
                 self.assertIn(option, test_klass.usageOptions())
 
     def test_load_with_invalid_option(self):
         try:
-            net_test = NetTest(StringIO(net_test_string), dummyInvalidOptions, None)
-            net_test.setUpNetTestCases()
-        except InvalidOption:
+            ntl = NetTestLoader(StringIO(net_test_string), dummyInvalidArgs)
+            ntl.checkOptions()
+            raise Exception
+        except UsageError:
             pass
 
     def test_load_with_required_option(self):
-        net_test = NetTest(StringIO(net_test_with_required_option),
-                dummyOptionsWithRequiredOptions, None)
-        net_test.setUpNetTestCases()
-        self.assertIsInstance(net_test, NetTest)
+        net_test = NetTestLoader(StringIO(net_test_with_required_option),
+                dummyArgsWithRequiredOptions)
+        self.assertIsInstance(net_test, NetTestLoader)
 
     def test_load_with_missing_required_option(self):
         try:
-            net_test = NetTest(StringIO(net_test_with_required_option),
-                    dummyOptions, None)
-            net_test.setUpNetTestCases()
+            net_test = NetTestLoader(StringIO(net_test_with_required_option),
+                    dummyArgs)
         except MissingRequiredOption:
             pass
 
     def test_net_test_inputs(self):
-        dummyOptionsWithFile = dict(dummyOptions)
-        dummyOptionsWithFile['file'] = 'dummyInputFile.txt'
-
-        net_test = NetTest(StringIO(net_test_string_with_file),
-            dummyOptionsWithFile, None)
-        net_test.setUpNetTestCases()
-
-        for test_class, test_method in net_test.test_cases:
-            self.assertEqual(len(list(test_class.inputs)), 10)
+        ntl = NetTestLoader(StringIO(net_test_string_with_file),
+            dummyArgsWithFile)
+        ntl.checkOptions()
+
+        # XXX: if you use the same test_class twice you will have consumed all
+        # of its inputs!
+        tested = set([])
+        for test_class, test_method in ntl.testCases:
+            if test_class not in tested:
+                tested.update([test_class])
+                self.assertEqual(len(list(test_class.inputs)), 10)
 
     def test_setup_local_options_in_test_cases(self):
-        net_test = NetTest(StringIO(net_test_string),
-            dummyOptions, None)
-        net_test.setUpNetTestCases()
+        ntl = NetTestLoader(StringIO(net_test_string),
+            dummyArgs)
+        ntl.checkOptions()
 
-        for test_class, test_method in net_test.test_cases:
+        for test_class, test_method in ntl.testCases:
             self.assertEqual(test_class.localOptions, dummyOptions)
 
     def test_generate_measurements_size(self):
-        dummyOptionsWithFile = dict(dummyOptions)
-        dummyOptionsWithFile['file'] = 'dummyInputFile.txt'
 
-        net_test = NetTest(StringIO(net_test_string_with_file),
-            dummyOptionsWithFile, None)
-        net_test.setUpNetTestCases()
+        ntl = NetTestLoader(StringIO(net_test_string_with_file),
+            dummyArgsWithFile)
+        ntl.checkOptions()
+        net_test = NetTest(ntl, None)
+
         measurements = list(net_test.generateMeasurements())
         self.assertEqual(len(measurements), 20)
 
     def test_net_test_completed_callback(self):
-        dummyOptionsWithFile = dict(dummyOptions)
-        dummyOptionsWithFile['file'] = 'dummyInputFile.txt'
+        ntl = NetTestLoader(StringIO(net_test_string_with_file),
+            dummyArgsWithFile)
+        ntl.checkOptions()
+        director = Director()
 
-        net_test = NetTest(StringIO(net_test_string_with_file),
-            dummyOptionsWithFile, MockReporter())
-        net_test.measurementManager = MockMeasurementManager()
-        net_test.director = Director()
+        d = director.startNetTest('', ntl, [MockReporter()])
 
-        d = net_test.start()
         @d.addCallback
         def complete(result):
-            self.assertEqual(result, None)
+            #XXX: why is the return type (True, None) ?
+            self.assertEqual(result, [(True,None)])
+            self.assertEqual(director.successfulMeasurements, 20)
 
         return d
 
-    #def test_require_root_succeed(self):
-    #    #XXX: will require root to run
-    #    n = NetTest(StringIO(net_test_root_required),
-    #            dummyOptions, None)
-    #    for test_class, method in n.test_cases:
-    #        self.assertTrue(test_class.requiresRoot)
-
-    def test_require_root_failed(self):
-        #XXX: will fail if you run as root
-        try:
-            net_test = NetTest(StringIO(net_test_root_required),
-                    dummyOptions, None)
-            net_test.setUpNetTestCases()
-        except NotRootError:
-            pass
+    def test_require_root_succeed(self):
+        #XXX: will require root to run
+        ntl = NetTestLoader(StringIO(net_test_root_required),
+                dummyArgs)
+        for test_class, method in ntl.testCases:
+            self.assertTrue(test_class.requiresRoot)
+
+    #def test_require_root_failed(self):
+    #    #XXX: will fail if you run as root
+    #    try:
+    #        net_test = NetTestLoader(StringIO(net_test_root_required),
+    #                dummyArgs)
+    #    except NotRootError:
+    #        pass
 
     #def test_create_report_succeed(self):
     #    pass





More information about the tor-commits mailing list