[tor-commits] [nyx/master] Fix unit tests

atagar at torproject.org atagar at torproject.org
Tue Oct 24 17:16:56 UTC 2017


commit c6c16ebc42908f56d064711492da6787c946c493
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Oct 24 10:17:43 2017 -0700

    Fix unit tests
    
    Lots of breakages have slipped in while attempting to improve our performance.
    Most were timing related due to our switch to static sleeps.
---
 nyx/__init__.py                    |  1 +
 nyx/panel/__init__.py              |  5 ++---
 nyx/panel/connection.py            | 10 +++++++---
 nyx/panel/header.py                |  4 ++--
 nyx/tracker.py                     | 11 ++++++-----
 run_tests.py                       |  2 +-
 test/panel/connection.py           |  4 ++--
 test/panel/header.py               |  2 +-
 test/tracker/connection_tracker.py |  8 ++++----
 test/tracker/port_usage_tracker.py |  2 +-
 test/tracker/resource_tracker.py   |  2 +-
 11 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/nyx/__init__.py b/nyx/__init__.py
index d9a9b52..5947294 100644
--- a/nyx/__init__.py
+++ b/nyx/__init__.py
@@ -268,6 +268,7 @@ def our_address(default = None):
 
   return CACHED_ADDRESS if CACHED_ADDRESS is not None else default
 
+
 def show_message(message = None, *attr, **kwargs):
   """
   Shows a message in our header.
diff --git a/nyx/panel/__init__.py b/nyx/panel/__init__.py
index ed32887..b75964c 100644
--- a/nyx/panel/__init__.py
+++ b/nyx/panel/__init__.py
@@ -31,10 +31,9 @@ import inspect
 import threading
 import time
 
+import nyx
 import nyx.curses
 
-from nyx import PAUSE_TIME, nyx_interface
-
 __all__ = [
   'config',
   'connection',
@@ -207,7 +206,7 @@ class DaemonPanel(Panel, threading.Thread):
         sleep_until = last_ran + self._update_rate + 0.1
 
         while not self._halt and time.time() < sleep_until:
-          time.sleep(PAUSE_TIME)
+          time.sleep(nyx.PAUSE_TIME)
 
         continue  # done waiting, try again
 
diff --git a/nyx/panel/connection.py b/nyx/panel/connection.py
index 3fe283b..3002d67 100644
--- a/nyx/panel/connection.py
+++ b/nyx/panel/connection.py
@@ -11,12 +11,13 @@ import itertools
 import re
 import time
 
+import nyx
 import nyx.curses
 import nyx.panel
 import nyx.popups
 import nyx.tracker
 
-from nyx import PAUSE_TIME, nyx_interface, tor_controller, our_address
+from nyx import nyx_interface, tor_controller
 from nyx.curses import WHITE, NORMAL, BOLD, HIGHLIGHT
 from nyx.menu import MenuItem, Submenu, RadioMenuItem, RadioGroup
 
@@ -505,7 +506,7 @@ class ConnectionPanel(nyx.panel.DaemonPanel):
         elif self._halt:
           return
         else:
-          time.sleep(PAUSE_TIME)
+          time.sleep(nyx.PAUSE_TIME)
 
     controller = tor_controller()
     LAST_RETRIEVED_CIRCUITS = controller.get_circuits([])
@@ -607,7 +608,10 @@ def _draw_line(subwindow, x, y, line, is_selected, width, current_time):
 
 
 def _draw_address_column(subwindow, x, y, line, attr):
-  src = '%s:%s' % (our_address(line.connection.local_address), line.connection.local_port if line.line_type == LineType.CONNECTION else '')
+  if line.line_type == LineType.CONNECTION:
+    src = '%s:%s' % (nyx.our_address(line.connection.local_address), line.connection.local_port)
+  else:
+    src = nyx.our_address(line.connection.local_address)
 
   if line.line_type == LineType.CIRCUIT_HEADER and line.circuit.status != 'BUILT':
     dst = 'Building...'
diff --git a/nyx/panel/header.py b/nyx/panel/header.py
index 3751d56..0820a21 100644
--- a/nyx/panel/header.py
+++ b/nyx/panel/header.py
@@ -23,7 +23,7 @@ import nyx.popups
 import nyx.tracker
 
 from stem.util import conf, log
-from nyx import nyx_interface, tor_controller, our_address
+from nyx import nyx_interface, tor_controller
 
 from nyx.curses import RED, GREEN, YELLOW, CYAN, WHITE, BOLD, HIGHLIGHT
 
@@ -268,7 +268,7 @@ class Sampling(object):
       'version': str(controller.get_version('Unknown')).split()[0],
       'version_status': controller.get_info('status/version/current', 'Unknown'),
 
-      'address': or_listeners[0][0] if (or_listeners and or_listeners[0][0] != '0.0.0.0') else our_address('Unknown'),
+      'address': or_listeners[0][0] if (or_listeners and or_listeners[0][0] != '0.0.0.0') else nyx.our_address('Unknown'),
       'or_port': or_listeners[0][1] if or_listeners else '',
       'dir_port': controller.get_conf('DirPort', '0'),
       'control_port': str(control_listeners[0][1]) if control_listeners else None,
diff --git a/nyx/tracker.py b/nyx/tracker.py
index 6d6ab64..fb41f9e 100644
--- a/nyx/tracker.py
+++ b/nyx/tracker.py
@@ -60,7 +60,7 @@ import stem.control
 import stem.descriptor.router_status_entry
 import stem.util.log
 
-from nyx import PAUSE_TIME, tor_controller, our_address
+from nyx import tor_controller
 from stem.util import conf, connection, enum, proc, str_tools, system
 
 CONFIG = conf.config_dict('nyx', {
@@ -387,10 +387,10 @@ class Daemon(threading.Thread):
   def run(self):
     while not self._halt:
       if self._is_paused or time.time() - self._last_ran < self._rate:
-        sleep_until = self._last_ran + self._rate + 0.1
+        sleep_until = self._last_ran + self._rate
 
         while not self._halt and time.time() < sleep_until:
-          time.sleep(PAUSE_TIME)
+          time.sleep(nyx.PAUSE_TIME)
 
         continue  # done waiting, try again
 
@@ -903,7 +903,7 @@ class ConsensusTracker(object):
 
     controller = tor_controller()
 
-    if our_address() == address:
+    if nyx.our_address() == address:
       fingerprint = controller.get_info('fingerprint', None)
       ports = controller.get_ports(stem.control.Listener.OR, None)
 
@@ -924,9 +924,10 @@ class ConsensusTracker(object):
     controller = tor_controller()
 
     if fingerprint == controller.get_info('fingerprint', None):
+      my_address = nyx.our_address()
       my_or_ports = controller.get_ports(stem.control.Listener.OR, [])
 
-      if our_address() and len(my_or_ports) == 1:
+      if my_address and len(my_or_ports) == 1:
         return (my_address, my_or_ports[0])
 
     return nyx.cache().relay_address(fingerprint, default)
diff --git a/run_tests.py b/run_tests.py
index d923178..a9dd98a 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -30,7 +30,7 @@ SRC_PATHS = [os.path.join(NYX_BASE, path) for path in (
 
 @nyx.uses_settings
 def main():
-  nyx.TESTING = True
+  nyx.PAUSE_TIME = 0.000001  # make pauses negligibly low since our tests trigger things rapidly
   test_config = stem.util.conf.get_config('test')
   test_config.load(os.path.join(NYX_BASE, 'test', 'settings.cfg'))
 
diff --git a/test/panel/connection.py b/test/panel/connection.py
index f01d99a..c95f31a 100644
--- a/test/panel/connection.py
+++ b/test/panel/connection.py
@@ -195,8 +195,8 @@ class TestConnectionPanel(unittest.TestCase):
 
   @require_curses
   @patch('nyx.panel.connection.tor_controller')
+  @patch('nyx.our_address', Mock(return_value = '82.121.9.9'))
   def test_draw_line(self, tor_controller_mock):
-    tor_controller_mock().get_info.return_value = '82.121.9.9'
     tor_controller_mock().is_geoip_unavailable.return_value = False
 
     test_data = ((
@@ -222,8 +222,8 @@ class TestConnectionPanel(unittest.TestCase):
 
   @require_curses
   @patch('nyx.panel.connection.tor_controller')
+  @patch('nyx.our_address', Mock(return_value = '82.121.9.9'))
   def test_draw_address_column(self, tor_controller_mock):
-    tor_controller_mock().get_info.return_value = '82.121.9.9'
     tor_controller_mock().is_geoip_unavailable.return_value = False
 
     test_data = ((
diff --git a/test/panel/header.py b/test/panel/header.py
index 805c8c7..73259da 100644
--- a/test/panel/header.py
+++ b/test/panel/header.py
@@ -87,6 +87,7 @@ class TestHeaderPanel(unittest.TestCase):
   @patch('time.time', Mock(return_value = 1234.5))
   @patch('os.times', Mock(return_value = (0.08, 0.03, 0.0, 0.0, 18759021.31)))
   @patch('os.uname', Mock(return_value = ('Linux', 'odin', '3.5.0-54-generic', '#81~precise1-Ubuntu SMP Tue Jul 15 04:05:58 UTC 2014', 'i686')))
+  @patch('nyx.our_address', Mock(return_value = '174.21.17.28'))
   @patch('stem.util.system.start_time', Mock(return_value = 5678))
   @patch('stem.util.proc.file_descriptors_used', Mock(return_value = 89))
   def test_sample(self, consensus_tracker_mock, resource_tracker_mock, tor_controller_mock):
@@ -101,7 +102,6 @@ class TestHeaderPanel(unittest.TestCase):
     tor_controller_mock().get_info.side_effect = lambda param, default = None: {
       'fingerprint': '1A94D1A794FCB2F8B6CBC179EF8FDD4008A98D3B',
       'status/version/current': 'recommended',
-      'address': '174.21.17.28',
       'process/descriptor-limit': 678,
     }[param]
 
diff --git a/test/tracker/connection_tracker.py b/test/tracker/connection_tracker.py
index 39ded42..50faef1 100644
--- a/test/tracker/connection_tracker.py
+++ b/test/tracker/connection_tracker.py
@@ -49,17 +49,17 @@ class TestConnectionTracker(unittest.TestCase):
     get_value_mock.side_effect = IOError()
 
     with ConnectionTracker(0.01) as daemon:
-      time.sleep(0.03)
+      time.sleep(0.015)
 
       self.assertEqual([connection.Resolver.NETSTAT, connection.Resolver.LSOF], daemon._resolvers)
       self.assertEqual([], daemon.get_value())
 
-      time.sleep(0.05)
+      time.sleep(0.025)
 
       self.assertEqual([connection.Resolver.LSOF], daemon._resolvers)
       self.assertEqual([], daemon.get_value())
 
-      time.sleep(0.05)
+      time.sleep(0.035)
 
       self.assertEqual([], daemon._resolvers)
       self.assertEqual([], daemon.get_value())
@@ -96,7 +96,7 @@ class TestConnectionTracker(unittest.TestCase):
       self.assertEqual(1, len(connections))
 
       self.assertEqual(STEM_CONNECTIONS[0].remote_address, connections[0].remote_address)
-      self.assertTrue(first_start_time < connections[0].start_time < time.time())
+      self.assertTrue(first_start_time <= connections[0].start_time <= time.time())
       self.assertTrue(connections[0].is_legacy)
 
       second_start_time = time.time()
diff --git a/test/tracker/port_usage_tracker.py b/test/tracker/port_usage_tracker.py
index edf1157..7e69f21 100644
--- a/test/tracker/port_usage_tracker.py
+++ b/test/tracker/port_usage_tracker.py
@@ -111,7 +111,7 @@ class TestPortUsageTracker(unittest.TestCase):
       self.assertEqual(0, daemon._failure_count)
 
       daemon.query([37277, 51849], [])
-      time.sleep(0.03)
+      time.sleep(0.015)
       self.assertTrue(daemon.is_alive())
       time.sleep(0.1)
       self.assertFalse(daemon.is_alive())
diff --git a/test/tracker/resource_tracker.py b/test/tracker/resource_tracker.py
index 3f9d927..25837f1 100644
--- a/test/tracker/resource_tracker.py
+++ b/test/tracker/resource_tracker.py
@@ -94,7 +94,7 @@ class TestResourceTracker(unittest.TestCase):
     tor_controller_mock().get_pid.return_value = 12345
 
     with ResourceTracker(0.01) as daemon:
-      time.sleep(0.03)
+      time.sleep(0.015)
 
       self.assertEqual(True, daemon._use_proc)
       resources = daemon.get_value()



More information about the tor-commits mailing list