commit 63c08cc70c69776e55197d0a9b6bb86d6b644c6b Author: Damian Johnson atagar@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())