[tor-commits] [stem/master] Added compare_flags test
atagar at torproject.org
atagar at torproject.org
Sun Dec 21 23:15:52 UTC 2014
commit 4fddd2335fb8e3e88798e77523b2c9c62df72022
Author: Sambuddha Basu <sambuddhabasu1 at gmail.com>
Date: Wed Dec 17 17:56:08 2014 +0400
Added compare_flags test
---
test/unit/tutorial_examples.py | 92 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 90 insertions(+), 2 deletions(-)
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index 9ce78a0..efcaab7 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -6,13 +6,16 @@ import StringIO
import unittest
import stem.response
+import stem.descriptor.remote
from stem.control import Controller
+from stem.descriptor.remote import DIRECTORY_AUTHORITIES
from test import mocking
from test.mocking import (
get_relay_server_descriptor,
get_router_status_entry_v3,
ROUTER_STATUS_ENTRY_V3_HEADER,
+ get_network_status_document_v3,
)
try:
@@ -64,6 +67,14 @@ Checking for outdated relays...
2 outdated relays found, 1 had contact information
"""
+COMPARE_FLAGS_OUTPUT = """\
+maatuska has the Running flag but moria1 doesn't: E2BB13AA2F6960CD93ABE5257A825687F3973C62
+moria1 has the Running flag but maatuska doesn't: 546C54E2A89D88E0794D04AECBF1AC8AC9DA81DE
+maatuska has the Running flag but moria1 doesn't: 92FCB6748A40E6088E22FBAB943AB2DD743EA818
+maatuska has the Running flag but moria1 doesn't: 6871F682350BA931838C0EC1E4A23044DAE06A73
+moria1 has the Running flag but maatuska doesn't: DCAEC3D069DC39AAE43D13C8AF31B5645E05ED61
+"""
+
def _get_event(content):
controller_event = mocking.get_message(content)
@@ -77,7 +88,7 @@ def _get_circ_event(id, status, hop1, hop2, hop3, purpose):
return _get_event(content)
-def _get_router_status(address = None, port = None, nickname = None, fingerprint_base64 = None):
+def _get_router_status(address = None, port = None, nickname = None, fingerprint_base64 = None, s_line = None):
r_line = ROUTER_STATUS_ENTRY_V3_HEADER[0][1]
if address:
r_line = r_line.replace('71.35.150.29', address)
@@ -87,7 +98,10 @@ def _get_router_status(address = None, port = None, nickname = None, fingerprint
r_line = r_line.replace('caerSidi', nickname)
if fingerprint_base64:
r_line = r_line.replace('p1aag7VwarGxqctS7/fS0y5FU+s', fingerprint_base64)
- content = get_router_status_entry_v3({'r': r_line})
+ if s_line:
+ content = get_router_status_entry_v3({'r': r_line, 's': s_line})
+ else:
+ content = get_router_status_entry_v3({'r': r_line})
return content
@@ -228,3 +242,77 @@ class TestTutorialExamples(unittest.TestCase):
downloader_mock().get_server_descriptors.return_value = [desc_1, desc_2, desc_3, desc_4]
tutorial_example()
self.assertEqual(OUTDATED_RELAYS_OUTPUT, stdout_mock.getvalue())
+
+ @patch('sys.stdout', new_callable = StringIO.StringIO)
+ @patch('stem.descriptor.remote.Query')
+ @patch('stem.descriptor.remote.get_authorities')
+ def test_compare_flags(self, get_authorities_mock, query_mock, stdout_mock):
+ def tutorial_example():
+ from stem.descriptor import DocumentHandler, remote
+
+ # Query all authority votes asynchronously.
+
+ downloader = remote.DescriptorDownloader(document_handler = DocumentHandler.DOCUMENT)
+ queries = {}
+
+ for name, authority in remote.get_authorities().items():
+ if authority.v3ident is None:
+ continue # authority doens't vote if it lacks a v3ident
+
+ queries[name] = downloader.get_vote(authority)
+
+ # Wait for the votes to finish being downloaded, this produces a dictionary of
+ # authority nicknames to their vote.
+
+ votes = dict((name, query.run()[0]) for (name, query) in queries.items())
+
+ # Get a superset of all the fingerprints in all the votes.
+
+ all_fingerprints = set()
+
+ for vote in votes.values():
+ all_fingerprints.update(vote.routers.keys())
+
+ # Finally, compare moria1's votes to maatuska.
+
+ for fingerprint in all_fingerprints:
+ moria1_vote = votes['moria1'].routers.get(fingerprint)
+ maatuska_vote = votes['maatuska'].routers.get(fingerprint)
+
+ if not moria1_vote and not maatuska_vote:
+ print "both moria1 and maatuska haven't voted about %s" % fingerprint
+ elif not moria1_vote:
+ print "moria1 hasn't voted about %s" % fingerprint
+ elif not maatuska_vote:
+ print "maatuska hasn't voted about %s" % fingerprint
+ elif 'Running' in moria1_vote.flags and 'Running' not in maatuska_vote.flags:
+ print "moria1 has the Running flag but maatuska doesn't: %s" % fingerprint
+ elif 'Running' in maatuska_vote.flags and 'Running' not in moria1_vote.flags:
+ print "maatuska has the Running flag but moria1 doesn't: %s" % fingerprint
+
+ get_authorities_mock().items.return_value = [('moria1', DIRECTORY_AUTHORITIES['moria1']), ('maatuska', DIRECTORY_AUTHORITIES['maatuska'])]
+ fingerprint = []
+ fingerprint.append(('92FCB6748A40E6088E22FBAB943AB2DD743EA818', 'kvy2dIpA5giOIvurlDqy3XQ+qBg='))
+ fingerprint.append(('6871F682350BA931838C0EC1E4A23044DAE06A73', 'aHH2gjULqTGDjA7B5KIwRNrganM='))
+ fingerprint.append(('E2BB13AA2F6960CD93ABE5257A825687F3973C62', '4rsTqi9pYM2Tq+UleoJWh/OXPGI='))
+ fingerprint.append(('546C54E2A89D88E0794D04AECBF1AC8AC9DA81DE', 'VGxU4qidiOB5TQSuy/Gsisnagd4='))
+ fingerprint.append(('DCAEC3D069DC39AAE43D13C8AF31B5645E05ED61', '3K7D0GncOarkPRPIrzG1ZF4F7WE='))
+ entry = []
+ # Entries for moria1.
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[0][1], s_line = ' '))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[1][1], s_line = ' '))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[2][1], s_line = ' '))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[3][1]))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[4][1]))
+ # Entries for maatuska.
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[0][1]))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[1][1]))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[2][1]))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[3][1], s_line = ' '))
+ entry.append(_get_router_status(fingerprint_base64 = fingerprint[4][1], s_line = ' '))
+ network_status = []
+ network_status.append(get_network_status_document_v3(routers = (entry[0], entry[1], entry[2], entry[3], entry[4],)))
+ network_status.append(get_network_status_document_v3(routers = (entry[5], entry[6], entry[7], entry[8], entry[9],)))
+ query_mock().run.side_effect = [[network_status[0]], [network_status[1]]]
+ tutorial_example()
+ self.assertEqual(COMPARE_FLAGS_OUTPUT, stdout_mock.getvalue())
More information about the tor-commits
mailing list