[tor-commits] [stem/master] Drop test runner's get_tor_version()

atagar at torproject.org atagar at torproject.org
Thu Apr 6 18:38:22 UTC 2017


commit 7214fe9a195c71a26a2829a76d0ecfa24a0cb6b8
Author: Damian Johnson <atagar at torproject.org>
Date:   Wed Mar 8 10:59:42 2017 -0800

    Drop test runner's get_tor_version()
    
    We left a TODO comment to replace this long ago. Might as well finally get
    around to it. :P
---
 test/integ/connection/authentication.py |  6 +++---
 test/integ/control/controller.py        | 11 +++++------
 test/integ/response/protocolinfo.py     |  6 +++---
 test/integ/socket/control_socket.py     |  4 ++--
 test/integ/version.py                   | 11 -----------
 test/runner.py                          | 35 +++------------------------------
 test/util.py                            | 26 +++++++++++++++++++++++-
 7 files changed, 41 insertions(+), 58 deletions(-)

diff --git a/test/integ/connection/authentication.py b/test/integ/connection/authentication.py
index 3687af3..4289fac 100644
--- a/test/integ/connection/authentication.py
+++ b/test/integ/connection/authentication.py
@@ -12,6 +12,7 @@ import stem.version
 import test.runner
 
 from test.runner import require_controller
+from test.util import tor_version
 
 # Responses given by tor for various authentication failures. These may change
 # in the future and if they do then this test should be updated.
@@ -43,7 +44,7 @@ def _can_authenticate(auth_type):
   tor_options = runner.get_options()
   password_auth = test.runner.Torrc.PASSWORD in tor_options
   cookie_auth = test.runner.Torrc.COOKIE in tor_options
-  safecookie_auth = cookie_auth and runner.get_tor_version() >= stem.version.Requirement.AUTH_SAFECOOKIE
+  safecookie_auth = cookie_auth and tor_version() >= stem.version.Requirement.AUTH_SAFECOOKIE
 
   if not password_auth and not cookie_auth:
     # open socket, anything but safecookie will work
@@ -103,8 +104,7 @@ class TestAuthenticate(unittest.TestCase):
   def setUp(self):
     self.cookie_auth_methods = [stem.connection.AuthMethod.COOKIE]
 
-    tor_version = test.runner.get_runner().get_tor_version()
-    if tor_version >= stem.version.Requirement.AUTH_SAFECOOKIE:
+    if tor_version() >= stem.version.Requirement.AUTH_SAFECOOKIE:
       self.cookie_auth_methods.append(stem.connection.AuthMethod.SAFECOOKIE)
 
   @require_controller
diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index f5c91d7..a0f9b99 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -27,7 +27,7 @@ from stem.control import EventType, Listener, State
 from stem.exit_policy import ExitPolicy
 from stem.version import Requirement
 
-from test.util import register_new_capability
+from test.util import register_new_capability, tor_version
 
 from test.runner import (
   require_controller,
@@ -273,7 +273,7 @@ class TestController(unittest.TestCase):
     with runner.get_tor_controller() as controller:
       version = controller.get_version()
       self.assertTrue(isinstance(version, stem.version.Version))
-      self.assertEqual(version, runner.get_tor_version())
+      self.assertEqual(version, tor_version())
 
   @require_controller
   def test_get_exit_policy(self):
@@ -344,13 +344,12 @@ class TestController(unittest.TestCase):
 
       # Doing a sanity test on the ProtocolInfoResponse instance returned.
       tor_options = runner.get_options()
-      tor_version = runner.get_tor_version()
       auth_methods = []
 
       if test.runner.Torrc.COOKIE in tor_options:
         auth_methods.append(stem.response.protocolinfo.AuthMethod.COOKIE)
 
-        if tor_version >= stem.version.Requirement.AUTH_SAFECOOKIE:
+        if tor_version() >= stem.version.Requirement.AUTH_SAFECOOKIE:
           auth_methods.append(stem.response.protocolinfo.AuthMethod.SAFECOOKIE)
 
       if test.runner.Torrc.PASSWORD in tor_options:
@@ -1147,7 +1146,7 @@ class TestController(unittest.TestCase):
 
     runner = test.runner.get_runner()
 
-    if runner.get_tor_version() >= Requirement.MICRODESCRIPTOR_IS_DEFAULT:
+    if tor_version() >= Requirement.MICRODESCRIPTOR_IS_DEFAULT:
       test.runner.skip(self, '(requires server descriptors)')
       return
 
@@ -1177,7 +1176,7 @@ class TestController(unittest.TestCase):
 
     runner = test.runner.get_runner()
 
-    if runner.get_tor_version() >= Requirement.MICRODESCRIPTOR_IS_DEFAULT:
+    if tor_version() >= Requirement.MICRODESCRIPTOR_IS_DEFAULT:
       test.runner.skip(self, '(requires server descriptors)')
       return
 
diff --git a/test/integ/response/protocolinfo.py b/test/integ/response/protocolinfo.py
index b2ecd2c..5c2c092 100644
--- a/test/integ/response/protocolinfo.py
+++ b/test/integ/response/protocolinfo.py
@@ -11,8 +11,9 @@ import stem.util.system
 import stem.version
 import test.runner
 
-from test.runner import require_controller
 from test.integ.util.system import filter_system_call
+from test.runner import require_controller
+from test.util import tor_version
 
 try:
   # added in python 3.3
@@ -126,13 +127,12 @@ class TestProtocolInfo(unittest.TestCase):
 
     runner = test.runner.get_runner()
     tor_options = runner.get_options()
-    tor_version = runner.get_tor_version()
     auth_methods, auth_cookie_path = [], None
 
     if test.runner.Torrc.COOKIE in tor_options:
       auth_methods.append(stem.response.protocolinfo.AuthMethod.COOKIE)
 
-      if tor_version >= stem.version.Requirement.AUTH_SAFECOOKIE:
+      if tor_version() >= stem.version.Requirement.AUTH_SAFECOOKIE:
         auth_methods.append(stem.response.protocolinfo.AuthMethod.SAFECOOKIE)
 
       chroot_path = runner.get_chroot()
diff --git a/test/integ/socket/control_socket.py b/test/integ/socket/control_socket.py
index a1e603b..1a8b50a 100644
--- a/test/integ/socket/control_socket.py
+++ b/test/integ/socket/control_socket.py
@@ -17,6 +17,7 @@ import stem.socket
 import test.runner
 
 from test.runner import require_controller
+from test.util import tor_version
 
 
 class TestControlSocket(unittest.TestCase):
@@ -61,7 +62,6 @@ class TestControlSocket(unittest.TestCase):
     """
 
     runner = test.runner.get_runner()
-    tor_version = runner.get_tor_version()
 
     with runner.get_tor_socket() as control_socket:
       for _ in range(100):
@@ -69,7 +69,7 @@ class TestControlSocket(unittest.TestCase):
 
       for _ in range(100):
         response = control_socket.recv()
-        self.assertTrue(str(response).startswith('version=%s' % tor_version))
+        self.assertTrue(str(response).startswith('version=%s' % tor_version()))
         self.assertTrue(str(response).endswith('\nOK'))
 
   @require_controller
diff --git a/test/integ/version.py b/test/integ/version.py
index 7ba8e7a..57e469c 100644
--- a/test/integ/version.py
+++ b/test/integ/version.py
@@ -35,17 +35,6 @@ class TestVersion(unittest.TestCase):
     self.assertRaises(IOError, stem.version.get_system_tor_version, 'blarg')
 
   @require_controller
-  def test_get_system_tor_version_value(self):
-    """
-    Checks that the get_system_tor_version() provides the same value as our
-    test instance provides.
-    """
-
-    runner = test.runner.get_runner()
-    system_tor_version = stem.version.get_system_tor_version(runner.get_tor_command())
-    self.assertEqual(runner.get_tor_version(), system_tor_version)
-
-  @require_controller
   def test_getinfo_version_parsing(self):
     """
     Issues a 'GETINFO version' query to our test instance and makes sure that
diff --git a/test/runner.py b/test/runner.py
index 8ab65f6..a5d39d6 100644
--- a/test/runner.py
+++ b/test/runner.py
@@ -35,7 +35,6 @@ about the tor test instance they're running against.
     |- get_pid - process id of our tor process
     |- get_tor_socket - provides a socket to our test instance
     |- get_tor_controller - provides a controller for our test instance
-    |- get_tor_version - provides the version of tor we're running against
     +- get_tor_command - provides the command used to start tor
 """
 
@@ -57,7 +56,7 @@ import stem.util.enum
 import stem.version
 
 from test.output import println, STATUS, ERROR, SUBSTATUS, NO_NL
-from test.util import Target, STEM_BASE
+from test.util import Target, STEM_BASE, tor_version
 
 CONFIG = stem.util.conf.config_dict('test', {
   'integ.test_directory': './test/data',
@@ -139,7 +138,7 @@ def require_version(req_version):
 
   def decorator(func):
     def wrapped(self, *args, **kwargs):
-      if get_runner().get_tor_version() >= req_version:
+      if tor_version() >= req_version:
         return func(self, *args, **kwargs)
       else:
         skip(self, '(requires %s)' % req_version)
@@ -414,8 +413,7 @@ class Runner(object):
     # If we're running a tor version where ptrace is disabled and we didn't
     # set 'DisableDebuggerAttachment=1' then we can infer that it's disabled.
 
-    tor_version = self.get_tor_version()
-    has_option = tor_version >= stem.version.Requirement.TORRC_DISABLE_DEBUGGER_ATTACHMENT
+    has_option = tor_version() >= stem.version.Requirement.TORRC_DISABLE_DEBUGGER_ATTACHMENT
     return not has_option or Torrc.PTRACE in self.get_options()
 
   def get_options(self):
@@ -558,33 +556,6 @@ class Runner(object):
 
     return controller
 
-  def get_tor_version(self):
-    """
-    Queries our test instance for tor's version.
-
-    :returns: :class:`stem.version.Version` for our test instance
-    """
-
-    try:
-      # TODO: replace with higher level functions when we've completed a basic
-      # controller class
-
-      control_socket = self.get_tor_socket()
-
-      control_socket.send('GETINFO version')
-      version_response = control_socket.recv()
-      control_socket.close()
-
-      tor_version = list(version_response)[0]
-      tor_version = tor_version[8:]
-
-      if ' ' in tor_version:
-        tor_version = tor_version.split(' ', 1)[0]
-
-      return stem.version.Version(tor_version)
-    except TorInaccessable:
-      return stem.version.get_system_tor_version(self.get_tor_command())
-
   def get_tor_command(self, base_cmd = False):
     """
     Provides the command used to run our tor instance.
diff --git a/test/util.py b/test/util.py
index 092d8d6..2a58e2f 100644
--- a/test/util.py
+++ b/test/util.py
@@ -78,6 +78,8 @@ Target = stem.util.enum.UppercaseEnum(
   'RUN_ALL',
 )
 
+TOR_VERSION = None
+
 # We make some paths relative to stem's base directory (the one above us)
 # rather than the process' cwd. This doesn't end with a slash.
 
@@ -208,7 +210,12 @@ def check_stem_version():
 
 
 def check_tor_version(tor_path):
-  return str(stem.version.get_system_tor_version(tor_path)).split()[0]
+  global TOR_VERSION
+
+  if TOR_VERSION is None:
+    TOR_VERSION = stem.version.get_system_tor_version(tor_path)
+
+  return str(TOR_VERSION).split()[0]
 
 
 def check_python_version():
@@ -354,6 +361,23 @@ def run_tasks(category, *tasks):
   println()
 
 
+def tor_version():
+  """
+  Provides the version of tor we're testing against.
+
+  :returns: :class:`~stem.version.Version` of tor invoked by our integration
+    tests
+
+  :raise: **ValueError** if :func:`~test.util.check_tor_version` isn't called
+    first
+  """
+
+  if TOR_VERSION is None:
+    raise ValueError('BUG: check_tor_version() must be called before tor_version()')
+
+  return TOR_VERSION
+
+
 class Task(object):
   """
   Task we can process while running our tests. The runner can return either a





More information about the tor-commits mailing list