commit 63c08cc70c69776e55197d0a9b6bb86d6b644c6b
Author: Damian Johnson <atagar(a)torproject.org>
Date: Fri May 29 09:11:15 2015 -0700
Doc example unit tests used relative paths
Recently we changed our unit tests for tutorial examples to test the docs
rather than a copy of the code (yay, no more duplication!). However, we used
relative paths so our unit tests failed if executed outside of our base stem
directory. Caught by toralf.
---
run_tests.py | 11 +++++++----
test/unit/__init__.py | 12 ++++++++++++
test/unit/tutorial.py | 15 +++++----------
test/unit/tutorial_examples.py | 19 +++++++------------
4 files changed, 31 insertions(+), 26 deletions(-)
diff --git a/run_tests.py b/run_tests.py
index c7ac574..d988900 100755
--- a/run_tests.py
+++ b/run_tests.py
@@ -357,10 +357,13 @@ def _run_test(args, test_class, output_filters, logging_buffer):
try:
suite = unittest.TestLoader().loadTestsFromName(test_class)
- except AttributeError:
- # should only come up if user provided '--test' for something that doesn't exist
- println(' no such test', ERROR)
- return None
+ except AttributeError as exc:
+ if args.specific_test:
+ # should only come up if user provided '--test' for something that doesn't exist
+ println(' no such test', ERROR)
+ return None
+ else:
+ raise exc
except Exception as exc:
println(' failed', ERROR)
traceback.print_exc(exc)
diff --git a/test/unit/__init__.py b/test/unit/__init__.py
index 9a83be9..d76ecfe 100644
--- a/test/unit/__init__.py
+++ b/test/unit/__init__.py
@@ -11,3 +11,15 @@ __all__ = [
'util',
'version',
]
+
+
+import os
+import test.util
+
+
+def exec_documentation_example(filename):
+ path = os.path.join(test.util.STEM_BASE, 'docs', '_static', 'example', filename)
+
+ with open(path) as f:
+ code = compile(f.read(), path, 'exec')
+ exec(code)
diff --git a/test/unit/tutorial.py b/test/unit/tutorial.py
index 95634dc..3c5bfd6 100644
--- a/test/unit/tutorial.py
+++ b/test/unit/tutorial.py
@@ -9,6 +9,7 @@ from stem.control import Controller
from stem.descriptor.reader import DescriptorReader
from stem.descriptor.server_descriptor import RelayDescriptor
from test import mocking
+from test.unit import exec_documentation_example
try:
from StringIO import StringIO
@@ -36,12 +37,6 @@ MIRROR_MIRROR_OUTPUT = """\
"""
-def exec_file(path):
- with open(path) as f:
- code = compile(f.read(), path, 'exec')
- exec(code)
-
-
class TestTutorial(unittest.TestCase):
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
@@ -52,7 +47,7 @@ class TestTutorial(unittest.TestCase):
'traffic/written': '29649',
}[arg]
- exec_file('docs/_static/example/hello_world.py')
+ exec_documentation_example('hello_world.py')
self.assertEqual('My Tor relay has read 33406 bytes and written 29649.\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
@@ -126,7 +121,7 @@ class TestTutorial(unittest.TestCase):
def test_mirror_mirror_on_the_wall_1(self, downloader_mock, stdout_mock):
downloader_mock().get_consensus().run.return_value = [mocking.get_router_status_entry_v2()]
- exec_file('docs/_static/example/current_descriptors.py')
+ exec_documentation_example('current_descriptors.py')
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
@@ -135,7 +130,7 @@ class TestTutorial(unittest.TestCase):
controller = from_port_mock().__enter__()
controller.get_network_statuses.return_value = [mocking.get_router_status_entry_v2()]
- exec_file('docs/_static/example/descriptor_from_tor_control_socket.py')
+ exec_documentation_example('descriptor_from_tor_control_socket.py')
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
@@ -164,7 +159,7 @@ class TestTutorial(unittest.TestCase):
reader = reader_mock().__enter__()
reader.__iter__.return_value = iter([mocking.get_relay_server_descriptor()])
- exec_file('docs/_static/example/past_descriptors.py')
+ exec_documentation_example('past_descriptors.py')
self.assertEqual('found relay caerSidi (None)\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index 246b483..c102c1a 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -19,6 +19,7 @@ from stem.control import Controller
from stem.descriptor.remote import DIRECTORY_AUTHORITIES
from test import mocking
+from test.unit import exec_documentation_example
from test.mocking import (
get_relay_server_descriptor,
get_router_status_entry_v3,
@@ -101,12 +102,6 @@ A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB: caerSidi
"""
-def exec_file(path):
- with OPEN_FUNCTION(path, 'rb') as f:
- code = compile(f.read(), path, 'exec')
- exec(code)
-
-
def _get_event(content):
controller_event = mocking.get_message(content)
stem.response.convert('EVENT', controller_event)
@@ -175,7 +170,7 @@ class TestTutorialExamples(unittest.TestCase):
path_7[0]: _get_router_status('176.67.169.171')
}[fingerprint]
- exec_file('docs/_static/example/list_circuits.py')
+ exec_documentation_example('list_circuits.py')
self.assert_equal_unordered(LIST_CIRCUITS_OUTPUT, stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
@@ -239,7 +234,7 @@ class TestTutorialExamples(unittest.TestCase):
get_relay_server_descriptor({'opt': 'contact Sambuddha Basu', 'platform': 'node-Tor 0.1.0 on Linux x86_64'}),
]
- exec_file('docs/_static/example/outdated_relays.py')
+ exec_documentation_example('outdated_relays.py')
self.assert_equal_unordered(OUTDATED_RELAYS_OUTPUT, stdout_mock.getvalue())
@@ -280,7 +275,7 @@ class TestTutorialExamples(unittest.TestCase):
[get_network_status_document_v3(routers = (entry[5], entry[6], entry[7], entry[8], entry[9]))],
]
- exec_file('docs/_static/example/compare_flags.py')
+ exec_documentation_example('compare_flags.py')
self.assert_equal_unordered(COMPARE_FLAGS_OUTPUT, stdout_mock.getvalue())
@@ -319,7 +314,7 @@ class TestTutorialExamples(unittest.TestCase):
query_mock.side_effect = [query1, query2, query3, query4]
- exec_file('docs/_static/example/votes_by_bandwidth_authorities.py')
+ exec_documentation_example('votes_by_bandwidth_authorities.py')
self.assert_equal_unordered(VOTES_BY_BANDWIDTH_AUTHORITIES_OUTPUT, stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
@@ -343,7 +338,7 @@ class TestTutorialExamples(unittest.TestCase):
query_mock().run.return_value = [network_status]
parse_file_mock.return_value = itertools.cycle([network_status])
- exec_file('docs/_static/example/persisting_a_consensus.py')
- exec_file('docs/_static/example/persisting_a_consensus_with_parse_file.py')
+ exec_documentation_example('persisting_a_consensus.py')
+ exec_documentation_example('persisting_a_consensus_with_parse_file.py')
self.assertEqual(PERSISTING_A_CONSENSUS_OUTPUT, stdout_mock.getvalue())