[tor-commits] [ooni-probe/master] Load NetTests from strings

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


commit 423d3d6882b8945be915162e54a914c49b393fd7
Author: Arturo Filastò <art at 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),





More information about the tor-commits mailing list