commit 511c7ac98f13bf7b0817ab759d331a65424472f6 Author: Damian Johnson atagar@torproject.org Date: Sun Jan 5 14:38:28 2014 -0800
Initial Daemon unit tests
Few simple tests for its initialization. Further testing for the Daemon and subclasses in the tracker module coming soon.
As for the load_test() test, it's both for a helper that no longer exists and the test wasn't being run due to not having an __init__.py. --- arm/util/tracker.py | 3 ++- run_tests.py | 8 +++++-- test/starter/load_settings.py | 31 --------------------------- test/util/tracker/daemon.py | 47 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 34 deletions(-)
diff --git a/arm/util/tracker.py b/arm/util/tracker.py index 476b11e..8febb12 100644 --- a/arm/util/tracker.py +++ b/arm/util/tracker.py @@ -1,5 +1,5 @@ """ -Background tasks for gathering informatino about the tor process. +Background tasks for gathering information about the tor process.
::
@@ -108,6 +108,7 @@ def stop_trackers(): tracker.join()
halt_thread = threading.Thread(target = halt_trackers) + halt_thread.setDaemon(True) halt_thread.start() return halt_thread
diff --git a/run_tests.py b/run_tests.py index 324ed02..1553da8 100755 --- a/run_tests.py +++ b/run_tests.py @@ -48,10 +48,14 @@ def main(): static_check_issues = {}
if is_pyflakes_available(): - static_check_issues.update(get_pyflakes_issues(SRC_PATHS)) + for path, issues in get_pyflakes_issues(SRC_PATHS).items(): + for issue in issues: + static_check_issues.setdefault(path, []).append(issue)
if is_pep8_available(): - static_check_issues.update(get_stylistic_issues(SRC_PATHS)) + for path, issues in get_stylistic_issues(SRC_PATHS).items(): + for issue in issues: + static_check_issues.setdefault(path, []).append(issue)
if static_check_issues: print "STATIC CHECKS" diff --git a/test/starter/load_settings.py b/test/starter/load_settings.py deleted file mode 100644 index 5c9cfd8..0000000 --- a/test/starter/load_settings.py +++ /dev/null @@ -1,31 +0,0 @@ -import io -import unittest - -from mock import patch - -from arm.starter import _load_settings - - -class TestLoadSettings(unittest.TestCase): - def test_we_can_load_the_settings(self): - config = _load_settings(self.id()) - self.assertEqual(config.get('settings_loaded'), 'true') - - @patch('stem.util.conf.open', create = True) - def test_when_file_doesnt_exist(self, open_mock): - open_mock.side_effect = IOError("No such file or directory") - - try: - _load_settings(self.id()) - self.fail("We didn't raise an exception for a missing settings.cfg") - except ValueError as exc: - self.assertTrue("Unable to load arm's internal configuration" in str(exc)) - - @patch('stem.util.conf.open', create = True) - def test_that_repeated_calls_are_ignored(self, open_mock): - open_mock.return_value = io.BytesIO("settings_loaded true") - - _load_settings(self.id()) - _load_settings(self.id()) - _load_settings(self.id()) - self.assertEqual(1, open_mock.call_count) diff --git a/test/util/tracker/__init__.py b/test/util/tracker/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/util/tracker/daemon.py b/test/util/tracker/daemon.py new file mode 100644 index 0000000..9bde71f --- /dev/null +++ b/test/util/tracker/daemon.py @@ -0,0 +1,47 @@ +import unittest + +from arm.util.tracker import Daemon + +from mock import patch + + +class TestDaemon(unittest.TestCase): + @patch('arm.util.tracker.tor_controller') + @patch('arm.util.tracker.system') + def test_init(self, system_mock, tor_controller_mock): + # Check that we register ourselves to listen for status changes, and + # properly retrieve the process' pid and name. + + tor_controller_mock().get_pid.return_value = 12345 + system_mock.get_name_by_pid.return_value = 'local_tor' + + daemon = Daemon(0.05) + + self.assertEqual(0.05, daemon._rate) + self.assertEqual(12345, daemon._process_pid) + self.assertEqual('local_tor', daemon._process_name) + + tor_controller_mock().add_status_listener.assert_called_with(daemon._tor_status_listener) + system_mock.get_name_by_pid.assert_called_with(12345) + + @patch('arm.util.tracker.tor_controller') + @patch('arm.util.tracker.system') + def test_init_without_name(self, system_mock, tor_controller_mock): + # Check when we default to 'tor' if unable to determine the process' name. + + tor_controller_mock().get_pid.return_value = 12345 + system_mock.get_name_by_pid.return_value = None + + daemon = Daemon(0.05) + self.assertEqual('tor', daemon._process_name) + + @patch('arm.util.tracker.tor_controller') + @patch('arm.util.tracker.system') + def test_init_without_pid(self, system_mock, tor_controller_mock): + # Check when we can't determine tor's pid. + + tor_controller_mock().get_pid.return_value = None + + daemon = Daemon(0.05) + self.assertEqual(None, daemon._process_pid) + self.assertEqual('tor', daemon._process_name)
tor-commits@lists.torproject.org