[tor-commits] [stem/master] Move persisting_a_consensus tests
atagar at torproject.org
atagar at torproject.org
Fri Oct 2 23:16:05 UTC 2020
commit 1a8cff380c76b8a90a868472f92951cd08e35919
Author: Damian Johnson <atagar at torproject.org>
Date: Sun Sep 27 15:58:27 2020 -0700
Move persisting_a_consensus tests
---
test/settings.cfg | 1 -
test/unit/__init__.py | 11 -----
test/unit/examples.py | 54 +++++++++++++++++++------
test/unit/tutorial.py | 12 +++++-
test/unit/tutorial_examples.py | 92 ------------------------------------------
5 files changed, 51 insertions(+), 119 deletions(-)
diff --git a/test/settings.cfg b/test/settings.cfg
index 26561327..91f287cf 100644
--- a/test/settings.cfg
+++ b/test/settings.cfg
@@ -290,7 +290,6 @@ test.unit_tests
|test.unit.directory.authority.TestAuthority
|test.unit.directory.fallback.TestFallback
|test.unit.tutorial.TestTutorial
-|test.unit.tutorial_examples.TestTutorialExamples
|test.unit.response.add_onion.TestAddOnionResponse
|test.unit.response.control_message.TestControlMessage
|test.unit.response.control_line.TestControlLine
diff --git a/test/unit/__init__.py b/test/unit/__init__.py
index 1b16bc99..7fb58a67 100644
--- a/test/unit/__init__.py
+++ b/test/unit/__init__.py
@@ -2,9 +2,6 @@
Unit tests for the stem library.
"""
-import os
-import test
-
__all__ = [
'client',
'connection',
@@ -16,11 +13,3 @@ __all__ = [
'util',
'version',
]
-
-
-def exec_documentation_example(filename):
- path = os.path.join(test.STEM_BASE, 'docs', '_static', 'example', filename)
-
- with open(path) as f:
- code = compile(f.read(), path, 'exec')
- exec(code)
diff --git a/test/unit/examples.py b/test/unit/examples.py
index 1b055628..3f528b80 100644
--- a/test/unit/examples.py
+++ b/test/unit/examples.py
@@ -152,6 +152,9 @@ Checking for outdated relays...
2 outdated relays found, 1 had contact information
"""
+EXPECTED_PERSISTING_A_CONSENSUS = """\
+A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB: caerSidi
+"""
EXPECTED_VOTES_BY_BANDWIDTH_AUTHORITIES = """\
Getting gabelmoo's vote from http://131.188.40.189:80/tor/status-vote/current/authority:
5935 measured entries and 1332 unmeasured
@@ -168,6 +171,12 @@ def _make_circ_event(circ_id, hop1, hop2, hop3):
return ControlMessage.from_str(content, 'EVENT', normalize = True)
+def _download_of(desc):
+ query = Mock()
+ query.run.return_value = [desc]
+ return Mock(return_value = query)
+
+
class TestExamples(unittest.TestCase):
def setUp(self):
self.original_path = list(sys.path)
@@ -268,11 +277,6 @@ class TestExamples(unittest.TestCase):
@test.require.cryptography
def test_check_digests(self):
- def download_of(desc):
- query = Mock()
- query.run.return_value = [desc]
- return Mock(return_value = query)
-
import check_digests as module
fingerprint = 'A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB'
@@ -289,18 +293,18 @@ class TestExamples(unittest.TestCase):
'r': 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0',
})
- with patch('stem.descriptor.remote.get_server_descriptors', download_of(server_desc)):
- with patch('stem.descriptor.remote.get_extrainfo_descriptors', download_of(extrainfo_desc)):
+ with patch('stem.descriptor.remote.get_server_descriptors', _download_of(server_desc)):
+ with patch('stem.descriptor.remote.get_extrainfo_descriptors', _download_of(extrainfo_desc)):
# correctly signed descriptors
- with patch('stem.descriptor.remote.get_consensus', download_of(consensus_desc)):
+ with patch('stem.descriptor.remote.get_consensus', _download_of(consensus_desc)):
with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
module.validate_relay(fingerprint)
self.assertEqual(EXPECTED_CHECK_DIGESTS_OK, stdout_mock.getvalue())
# incorrect server descriptor digest
- with patch('stem.descriptor.remote.get_consensus', download_of(bad_consensus_desc)):
+ with patch('stem.descriptor.remote.get_consensus', _download_of(bad_consensus_desc)):
with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
module.validate_relay(fingerprint)
self.assertEqual(EXPECTED_CHECK_DIGESTS_BAD % server_desc.digest(), stdout_mock.getvalue())
@@ -494,11 +498,35 @@ class TestExamples(unittest.TestCase):
self.assertEqual(EXPECTED_OUTDATED_RELAYS, stdout_mock.getvalue())
- def test_persisting_a_consensus(self):
- pass
+ @patch('stem.descriptor.remote.DescriptorDownloader')
+ def test_persisting_a_consensus(self, downloader_mock):
+ consensus = NetworkStatusDocumentV3.create(routers = (RouterStatusEntryV3.create({
+ 'r': 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0',
+ }),))
- def test_persisting_a_consensus_with_parse_file(self):
- pass
+ downloader_mock().get_consensus = _download_of(consensus)
+
+ try:
+ import persisting_a_consensus
+
+ with open('/tmp/descriptor_dump') as output_file:
+ self.assertEqual(str(consensus), output_file.read())
+ finally:
+ if os.path.exists('/tmp/descriptor_dump'):
+ os.remove('/tmp/descriptor_dump')
+
+ @patch('stem.descriptor.parse_file')
+ @patch('sys.stdout', new_callable = io.StringIO)
+ def test_persisting_a_consensus_with_parse_file(self, stdout_mock, parse_file_mock):
+ consensus = NetworkStatusDocumentV3.create(routers = (RouterStatusEntryV3.create({
+ 'r': 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0',
+ }),))
+
+ parse_file_mock.return_value = iter([consensus])
+
+ import persisting_a_consensus_with_parse_file
+
+ self.assertEqual(EXPECTED_PERSISTING_A_CONSENSUS, stdout_mock.getvalue())
def test_queue_listener(self):
pass
diff --git a/test/unit/tutorial.py b/test/unit/tutorial.py
index 35b2fe28..140bbba5 100644
--- a/test/unit/tutorial.py
+++ b/test/unit/tutorial.py
@@ -3,9 +3,11 @@ Tests for the examples given in stem's tutorial.
"""
import io
+import os
import unittest
import stem.descriptor.remote
+import test
from unittest.mock import Mock, patch
@@ -14,8 +16,6 @@ from stem.descriptor.router_status_entry import RouterStatusEntryV2, RouterStatu
from stem.descriptor.networkstatus import NetworkStatusDocumentV3
from stem.descriptor.server_descriptor import RelayDescriptor
from stem.exit_policy import ExitPolicy
-from test.unit import exec_documentation_example
-
OVER_THE_RIVER_OUTPUT = """\
* Connecting to tor
@@ -31,6 +31,14 @@ MIRROR_MIRROR_OUTPUT = """\
"""
+def exec_documentation_example(filename):
+ path = os.path.join(test.STEM_BASE, 'docs', '_static', 'example', filename)
+
+ with open(path) as f:
+ code = compile(f.read(), path, 'exec')
+ exec(code)
+
+
class TestTutorial(unittest.TestCase):
def tearDown(self):
# Ensure we don't cache a Mock object as our downloader. Otherwise future
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
deleted file mode 100644
index 451bb2aa..00000000
--- a/test/unit/tutorial_examples.py
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-Tests for the examples given in stem's tutorial.
-"""
-
-import io
-import itertools
-import os
-import unittest
-
-from unittest.mock import patch
-
-from stem.descriptor.networkstatus import NetworkStatusDocumentV3
-from stem.descriptor.router_status_entry import RouterStatusEntryV3
-from stem.response import ControlMessage
-
-from test.unit import exec_documentation_example
-
-OPEN_FUNCTION = open # make a reference so mocking open() won't mess with us
-
-CIRC_CONTENT = '650 CIRC %d %s \
-%s \
-PURPOSE=%s'
-
-PATH_CONTENT = '$%s=%s,$%s=%s,$%s=%s'
-
-PERSISTING_A_CONSENSUS_OUTPUT = """\
-A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB: caerSidi
-"""
-
-
-def _get_event(content):
- return ControlMessage.from_str(content, 'EVENT', normalize = True)
-
-
-def _get_circ_event(id, status, hop1, hop2, hop3, purpose):
- path = PATH_CONTENT % (hop1[0], hop1[1], hop2[0], hop2[1], hop3[0], hop3[1])
- content = CIRC_CONTENT % (id, status, path, purpose)
- return _get_event(content)
-
-
-def _get_router_status(address = None, port = None, nickname = None, fingerprint_base64 = None, s_line = None):
- r_line = 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0'
-
- if address:
- r_line = r_line.replace('71.35.150.29', address)
-
- if port:
- r_line = r_line.replace('9001', port)
-
- if nickname:
- r_line = r_line.replace('caerSidi', nickname)
-
- if fingerprint_base64:
- r_line = r_line.replace('p1aag7VwarGxqctS7/fS0y5FU+s', fingerprint_base64)
-
- if s_line:
- return RouterStatusEntryV3.create({'r': r_line, 's': s_line})
- else:
- return RouterStatusEntryV3.create({'r': r_line})
-
-
-class TestTutorialExamples(unittest.TestCase):
- @patch('sys.stdout', new_callable = io.StringIO)
- @patch('stem.descriptor.parse_file')
- @patch('stem.descriptor.remote.Query')
- def test_persisting_a_consensus(self, query_mock, parse_file_mock, stdout_mock):
- def tutorial_example_2():
- from stem.descriptor import DocumentHandler, parse_file
-
- consensus = next(parse_file(
- '/tmp/descriptor_dump',
- descriptor_type = 'network-status-consensus-3 1.0',
- document_handler = DocumentHandler.DOCUMENT,
- ))
-
- for fingerprint, relay in consensus.routers.items():
- print('%s: %s' % (fingerprint, relay.nickname))
-
- network_status = NetworkStatusDocumentV3.create(routers = (RouterStatusEntryV3.create({
- 'r': 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0',
- }),))
-
- query_mock().run.return_value = [network_status]
- parse_file_mock.return_value = itertools.cycle([network_status])
-
- 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())
-
- if os.path.exists('/tmp/descriptor_dump'):
- os.remove('/tmp/descriptor_dump')
More information about the tor-commits
mailing list