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