[tor-commits] [stem/master] @require_online decorator

atagar at torproject.org atagar at torproject.org
Sat Feb 21 22:08:00 UTC 2015


commit 5aec4d5d8abc614c089a95e09b81bf9f1e3c6ce2
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Feb 21 13:39:39 2015 -0800

    @require_online decorator
---
 test/integ/control/controller.py |   53 ++++++++++----------------------------
 test/integ/descriptor/remote.py  |   42 +++++++++++++-----------------
 test/runner.py                   |   16 ++++++------
 3 files changed, 39 insertions(+), 72 deletions(-)

diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index 2a7bc69..0a0e112 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -29,6 +29,7 @@ from stem.version import Requirement
 from test.runner import (
   require_controller,
   require_version,
+  require_online,
 )
 
 # Router status entry for a relay with a nickname other than 'Unnamed'. This is
@@ -709,6 +710,7 @@ class TestController(unittest.TestCase):
       self.assertEqual([('127.0.0.1', 1112)], controller.get_socks_listeners())
 
   @require_controller
+  @require_online
   @require_version(stem.version.Version('0.1.2.2-alpha'))
   def test_enable_feature(self):
     """
@@ -720,13 +722,6 @@ class TestController(unittest.TestCase):
     with runner.get_tor_controller() as controller:
       self.assertTrue(controller.is_feature_enabled('VERBOSE_NAMES'))
 
-      orconn_output = controller.get_info('orconn-status')
-
-      # the orconn-status results will be empty if we don't have a connection
-      if orconn_output == '':
-        if test.runner.require_online(self):
-          return
-
       self.assertTrue('VERBOSE_NAMES' in controller._enabled_features)
       self.assertRaises(stem.InvalidArguments, controller.enable_feature, ['NOT', 'A', 'FEATURE'])
 
@@ -766,11 +761,9 @@ class TestController(unittest.TestCase):
       self.assertTrue(controller.get_newnym_wait() > 9.0)
 
   @require_controller
+  @require_online
   @require_version(Requirement.EXTENDCIRCUIT_PATH_OPTIONAL)
   def test_extendcircuit(self):
-    if test.runner.require_online(self):
-      return
-
     with test.runner.get_runner().get_tor_controller() as controller:
       circuit_id = controller.extend_circuit('0')
 
@@ -784,15 +777,13 @@ class TestController(unittest.TestCase):
       self.assertRaises(stem.InvalidRequest, controller.extend_circuit, '0', 'thisroutershouldntexistbecausestemexists!@##$%#', 'foo')
 
   @require_controller
+  @require_online
   @require_version(Requirement.EXTENDCIRCUIT_PATH_OPTIONAL)
   def test_repurpose_circuit(self):
     """
     Tests Controller.repurpose_circuit with valid and invalid input.
     """
 
-    if test.runner.require_online(self):
-      return
-
     runner = test.runner.get_runner()
 
     with runner.get_tor_controller() as controller:
@@ -809,15 +800,13 @@ class TestController(unittest.TestCase):
       self.assertRaises(stem.InvalidRequest, controller.repurpose_circuit, '4', 'fooo')
 
   @require_controller
+  @require_online
   @require_version(Requirement.EXTENDCIRCUIT_PATH_OPTIONAL)
   def test_close_circuit(self):
     """
     Tests Controller.close_circuit with valid and invalid input.
     """
 
-    if test.runner.require_online(self):
-      return
-
     runner = test.runner.get_runner()
 
     with runner.get_tor_controller() as controller:
@@ -838,14 +827,12 @@ class TestController(unittest.TestCase):
       self.assertRaises(stem.InvalidRequest, controller.close_circuit, '')
 
   @require_controller
+  @require_online
   def test_get_streams(self):
     """
     Tests Controller.get_streams().
     """
 
-    if test.runner.require_online(self):
-      return
-
     host = socket.gethostbyname('www.torproject.org')
     port = 443
 
@@ -865,14 +852,12 @@ class TestController(unittest.TestCase):
     self.assertTrue('%s:%s' % (host, port) in [stream.target for stream in streams])
 
   @require_controller
+  @require_online
   def test_close_stream(self):
     """
     Tests Controller.close_stream with valid and invalid input.
     """
 
-    if test.runner.require_online(self):
-      return
-
     runner = test.runner.get_runner()
 
     with runner.get_tor_controller() as controller:
@@ -906,10 +891,8 @@ class TestController(unittest.TestCase):
       self.assertRaises(stem.InvalidArguments, controller.close_stream, 'blarg')
 
   @require_controller
+  @require_online
   def test_mapaddress(self):
-    if test.runner.require_online(self):
-      return
-
     runner = test.runner.get_runner()
 
     with runner.get_tor_controller() as controller:
@@ -946,15 +929,13 @@ class TestController(unittest.TestCase):
       self.assertTrue(stem.util.connection.is_valid_ipv4_address(stem.util.str_tools._to_unicode(ip_addr)))
 
   @require_controller
+  @require_online
   @require_version(Requirement.MICRODESCRIPTOR_IS_DEFAULT)
   def test_get_microdescriptor(self):
     """
     Basic checks for get_microdescriptor().
     """
 
-    if test.runner.require_online(self):
-      return
-
     with test.runner.get_runner().get_tor_controller() as controller:
       # we should balk at invalid content
       self.assertRaises(ValueError, controller.get_microdescriptor, '')
@@ -1052,14 +1033,12 @@ class TestController(unittest.TestCase):
           break
 
   @require_controller
+  @require_online
   def test_get_network_status(self):
     """
     Basic checks for get_network_status().
     """
 
-    if test.runner.require_online(self):
-      return
-
     with test.runner.get_runner().get_tor_controller() as controller:
       # we should balk at invalid content
       self.assertRaises(ValueError, controller.get_network_status, '')
@@ -1078,6 +1057,7 @@ class TestController(unittest.TestCase):
       self.assertEqual(desc_by_fingerprint, desc_by_nickname)
 
   @require_controller
+  @require_online
   def test_get_network_statuses(self):
     """
     Fetches a few descriptors via the get_network_statuses() method.
@@ -1085,9 +1065,6 @@ class TestController(unittest.TestCase):
 
     runner = test.runner.get_runner()
 
-    if test.runner.require_online(self):
-      return
-
     with runner.get_tor_controller() as controller:
       count = 0
 
@@ -1105,11 +1082,9 @@ class TestController(unittest.TestCase):
           break
 
   @require_controller
+  @require_online
   @require_version(Requirement.EXTENDCIRCUIT_PATH_OPTIONAL)
   def test_attachstream(self):
-    if test.runner.require_online(self):
-      return
-
     host = socket.gethostbyname('www.torproject.org')
     port = 80
 
@@ -1148,15 +1123,13 @@ class TestController(unittest.TestCase):
     self.assertEqual(our_stream.circ_id, circuit_id)
 
   @require_controller
+  @require_online
   @require_version(Requirement.EXTENDCIRCUIT_PATH_OPTIONAL)
   def test_get_circuits(self):
     """
     Fetches circuits via the get_circuits() method.
     """
 
-    if test.runner.require_online(self):
-      return
-
     with test.runner.get_runner().get_tor_controller() as controller:
       new_circ = controller.new_circuit()
       circuits = controller.get_circuits()
diff --git a/test/integ/descriptor/remote.py b/test/integ/descriptor/remote.py
index 9450c0e..cc7d4cb 100644
--- a/test/integ/descriptor/remote.py
+++ b/test/integ/descriptor/remote.py
@@ -13,17 +13,18 @@ import stem.descriptor.router_status_entry
 import stem.descriptor.server_descriptor
 import test.runner
 
+from test.runner import require_online
+
 
 class TestDescriptorDownloader(unittest.TestCase):
+  @require_online
   def test_authorities_are_up_to_date(self):
     """
     Check that our hardcoded directory authority data matches the present
     consensus.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader()
@@ -42,6 +43,7 @@ class TestDescriptorDownloader(unittest.TestCase):
         if getattr(auth, attr) != getattr(stem_auth, attr):
           self.fail("%s has %s %s, but we expected %s" % (auth.nickname, attr, getattr(auth, attr), getattr(stem_auth, attr)))
 
+  @require_online
   def test_using_authorities(self):
     """
     Fetches a descriptor from each of the directory authorities. This is
@@ -52,9 +54,7 @@ class TestDescriptorDownloader(unittest.TestCase):
     then this test will need to be updated.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     queries = []
@@ -77,28 +77,26 @@ class TestDescriptorDownloader(unittest.TestCase):
       self.assertEqual(1, len(descriptors))
       self.assertEqual('moria1', descriptors[0].nickname)
 
+  @require_online
   def test_use_directory_mirrors(self):
     """
     Checks that we can fetch and use a list of directory mirrors.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader()
     downloader.use_directory_mirrors()
     self.assertTrue(len(downloader._endpoints) > 50)
 
+  @require_online
   def test_get_server_descriptors(self):
     """
     Exercises the downloader's get_server_descriptors() method.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader(validate = True)
@@ -127,14 +125,13 @@ class TestDescriptorDownloader(unittest.TestCase):
 
     self.assertEqual(2, len(list(multiple_query)))
 
+  @require_online
   def test_get_extrainfo_descriptors(self):
     """
     Exercises the downloader's get_extrainfo_descriptors() method.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader(validate = True)
@@ -156,6 +153,7 @@ class TestDescriptorDownloader(unittest.TestCase):
 
     self.assertEqual(2, len(list(multiple_query)))
 
+  @require_online
   def test_get_microdescriptors(self):
     """
     Exercises the downloader's get_microdescriptors() method.
@@ -166,9 +164,7 @@ class TestDescriptorDownloader(unittest.TestCase):
     test.runner.skip(self, '(test presently broken)')
     return
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader(validate = True)
@@ -190,14 +186,13 @@ class TestDescriptorDownloader(unittest.TestCase):
 
     self.assertEqual(2, len(list(multiple_query)))
 
+  @require_online
   def test_get_consensus(self):
     """
     Exercises the downloader's get_consensus() method.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader(validate = True)
@@ -209,14 +204,13 @@ class TestDescriptorDownloader(unittest.TestCase):
     self.assertTrue(len(consensus) > 50)
     self.assertTrue(isinstance(consensus[0], stem.descriptor.router_status_entry.RouterStatusEntryV3))
 
+  @require_online
   def test_get_key_certificates(self):
     """
     Exercises the downloader's get_key_certificates() method.
     """
 
-    if test.runner.require_online(self):
-      return
-    elif test.runner.only_run_once(self):
+    if test.runner.only_run_once(self):
       return
 
     downloader = stem.descriptor.remote.DescriptorDownloader(validate = True)
diff --git a/test/runner.py b/test/runner.py
index 6d637de..ecf5fb6 100644
--- a/test/runner.py
+++ b/test/runner.py
@@ -150,19 +150,19 @@ def require_version(req_version):
   return decorator
 
 
-def require_online(test_case):
+def require_online(func):
   """
   Skips the test if we weren't started with the ONLINE target, which indicates
   that tests requiring network connectivity should run.
-
-  :param unittest.TestCase test_case: test being ran
-
-  :returns: True if test should be skipped, False otherwise
   """
 
-  if Target.ONLINE not in get_runner().attribute_targets:
-    skip(test_case, '(requires online target)')
-    return True
+  def wrapped(self, *args, **kwargs):
+    if Target.ONLINE in get_runner().attribute_targets:
+      return func(self, *args, **kwargs)
+    else:
+      skip(self, '(requires online target)')
+
+  return wrapped
 
 
 def only_run_once(test_case):





More information about the tor-commits mailing list