[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