commit 423d3d6882b8945be915162e54a914c49b393fd7 Author: Arturo Filastò art@fuffa.org Date: Sun Jan 13 12:55:38 2013 +0100
Load NetTests from strings
This is achieved by converting the string to a StringIO --- ooni/nettest.py | 26 +++++++++++++++++--------- tests/test_nettest.py | 24 ++++++++++++++++++++---- 2 files changed, 37 insertions(+), 13 deletions(-)
diff --git a/ooni/nettest.py b/ooni/nettest.py index 5c2e8cf..c9e2ed3 100644 --- a/ooni/nettest.py +++ b/ooni/nettest.py @@ -9,6 +9,9 @@ from ooni.utils import log, checkForRoot, NotRootError from inspect import getmembers from StringIO import StringIO
+class NoTestCasesFound(Exception): + pass + class NetTest(object): director = None method_prefix = 'test' @@ -33,7 +36,7 @@ class NetTest(object): """ raise NotImplementedError
- def loadNetTest(self, net_test_object): + def loadNetTest(self, net_test_file): """ Creates all the necessary test_cases (a list of tuples containing the NetTestCase (test_class, test_method)) @@ -50,23 +53,28 @@ class NetTest(object):
Note: the inputs must be valid for test_classA and test_classB.
- net_test_object: - is a file like object that will be used to generate the test_cases. + net_test_file: + is either a file path or a file like object that will be used to + generate the test_cases. """ + test_cases = None try: - if os.path.isfile(net_test_object): - test_cases = self._loadNetTestFile(net_test_object) + if os.path.isfile(net_test_file): + test_cases = self._loadNetTestFile(net_test_file) + else: + net_test_file = StringIO(net_test_file) + raise TypeError("not a file path") + except TypeError: - if isinstance(net_test_object, StringIO) or \ - isinstance(net_test_object, str): - test_cases = self._loadNetTestString(net_test_object) + if hasattr(net_test_file, 'read'): + test_cases = self._loadNetTestFromFileObject(net_test_file)
if not test_cases: raise NoTestCasesFound
return test_cases
- def _loadNetTestString(self, net_test_string): + def _loadNetTestFromFileObject(self, net_test_string): """ Load NetTest from a string """ diff --git a/tests/test_nettest.py b/tests/test_nettest.py index 0c91a9e..f2d4c6f 100644 --- a/tests/test_nettest.py +++ b/tests/test_nettest.py @@ -51,7 +51,6 @@ class DummyTestCase(NetTestCase): self.report['foo'] = 'foo' """
- #XXX you should actually implement this net_test_with_required_option = net_test_string
@@ -132,7 +131,25 @@ class TestNetTest(unittest.TestCase):
os.unlink(net_test_file)
- def test_load_net_test_from_string(self): + def test_load_net_test_from_str(self): + """ + Given a file like object verify that the net test cases are properly + generated. + """ + net_test_from_string = NetTest(net_test_string, + dummyOptions, DummyReporter()) + + test_methods = set() + for test_class, test_method in net_test_from_string.test_cases: + 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) + + def test_load_net_test_from_StringIO(self): """ Given a file like object verify that the net test cases are properly generated. @@ -199,8 +216,7 @@ class TestNetTest(unittest.TestCase): dummyOptionsWithFile, None)
measurements = list(net_test.generateMeasurements()) - self.assertEqual(len(measuremenets), 20) - + self.assertEqual(len(measurements), 20)
def dd_test_require_root_succeed(self): n = NetTest(StringIO(net_test_root_required),