Skip to content
Snippets Groups Projects
Commit b94f9aa2 authored by Sambuddha Basu's avatar Sambuddha Basu Committed by Damian Johnson
Browse files

Read python scripts from docs/_static/example directory for tutorial tests

Outdated Relays and Compare Flags now reads from reads python script from docs/_static/example/

All the tutorial_examples read python script from docs/_static/example/

test/unit/tutorial.py now read python scripts from docs/_static/example
parent 2a0110cc
No related branches found
No related tags found
No related merge requests found
......@@ -40,24 +40,13 @@ class TestTutorial(unittest.TestCase):
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_the_little_relay_that_could(self, from_port_mock, stdout_mock):
def tutorial_example():
from stem.control import Controller
with Controller.from_port(control_port = 9051) as controller:
controller.authenticate() # provide the password here if you set one
bytes_read = controller.get_info('traffic/read')
bytes_written = controller.get_info('traffic/written')
print('My Tor relay has read %s bytes and written %s.' % (bytes_read, bytes_written))
controller = from_port_mock().__enter__()
controller.get_info.side_effect = lambda arg: {
'traffic/read': '33406',
'traffic/written': '29649',
}[arg]
tutorial_example()
execfile('docs/_static/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)
......@@ -129,38 +118,18 @@ class TestTutorial(unittest.TestCase):
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.DescriptorDownloader')
def test_mirror_mirror_on_the_wall_1(self, downloader_mock, stdout_mock):
def tutorial_example():
from stem.descriptor.remote import DescriptorDownloader
downloader = DescriptorDownloader()
try:
for desc in downloader.get_consensus().run():
print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
except Exception as exc:
print('Unable to retrieve the consensus: %s' % exc)
downloader_mock().get_consensus().run.return_value = [mocking.get_router_status_entry_v2()]
tutorial_example()
execfile('docs/_static/example/current_descriptors.py')
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_mirror_mirror_on_the_wall_2(self, from_port_mock, stdout_mock):
def tutorial_example():
from stem.control import Controller
with Controller.from_port(control_port = 9051) as controller:
controller.authenticate()
for desc in controller.get_network_statuses():
print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
controller = from_port_mock().__enter__()
controller.get_network_statuses.return_value = [mocking.get_router_status_entry_v2()]
tutorial_example()
execfile('docs/_static/example/descriptor_from_tor_control_socket.py')
self.assertEqual('found relay caerSidi (A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB)\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
......@@ -186,17 +155,10 @@ class TestTutorial(unittest.TestCase):
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.reader.DescriptorReader', spec = DescriptorReader)
def test_mirror_mirror_on_the_wall_4(self, reader_mock, stdout_mock):
def tutorial_example():
from stem.descriptor.reader import DescriptorReader
with DescriptorReader(['/home/atagar/server-descriptors-2013-03.tar']) as reader:
for desc in reader:
print('found relay %s (%s)' % (desc.nickname, desc.fingerprint))
reader = reader_mock().__enter__()
reader.__iter__.return_value = iter([mocking.get_relay_server_descriptor()])
tutorial_example()
execfile('docs/_static/example/past_descriptors.py')
self.assertEqual('found relay caerSidi (None)\n', stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
......
......@@ -5,12 +5,6 @@ Tests for the examples given in stem's tutorial.
import itertools
import unittest
try:
# added in python 2.7
from collections import OrderedDict
except ImportError:
from stem.util.ordereddict import OrderedDict
try:
from StringIO import StringIO
except ImportError:
......@@ -148,28 +142,6 @@ class TestTutorialExamples(unittest.TestCase):
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.control.Controller.from_port', spec = Controller)
def test_list_circuits(self, from_port_mock, stdout_mock):
def tutorial_example():
from stem import CircStatus
from stem.control import Controller
with Controller.from_port(port = 9051) as controller:
controller.authenticate()
for circ in sorted(controller.get_circuits()):
if circ.status != CircStatus.BUILT:
continue
print('\nCircuit %s (%s)' % (circ.id, circ.purpose))
for i, entry in enumerate(circ.path):
div = '+' if (i == len(circ.path) - 1) else '|'
fingerprint, nickname = entry
desc = controller.get_network_status(fingerprint, None)
address = desc.address if desc else 'unknown'
print(' %s- %s (%s, %s)' % (div, fingerprint, nickname, address))
path_1 = ('B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C', 'ByTORAndTheSnowDog')
path_2 = ('0DD9935C5E939CFA1E07B8DDA6D91C1A2A9D9338', 'afo02')
path_3 = ('DB3B1CFBD3E4D97B84B548ADD5B9A31451EEC4CC', 'edwardsnowden3')
......@@ -195,7 +167,7 @@ class TestTutorialExamples(unittest.TestCase):
path_7[0]: _get_router_status('176.67.169.171')
}[fingerprint]
tutorial_example()
execfile('docs/_static/example/list_circuits.py')
self.assert_equal_unordered(LIST_CIRCUITS_OUTPUT, stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
......@@ -252,25 +224,6 @@ class TestTutorialExamples(unittest.TestCase):
@patch('sys.stdout', new_callable = StringIO)
@patch('stem.descriptor.remote.DescriptorDownloader')
def test_outdated_relays(self, downloader_mock, stdout_mock):
def tutorial_example():
from stem.descriptor.remote import DescriptorDownloader
from stem.version import Version
downloader = DescriptorDownloader()
count, with_contact = 0, 0
print('Checking for outdated relays...\n')
for desc in downloader.get_server_descriptors():
if desc.tor_version < Version('0.2.3.0'):
count += 1
if desc.contact:
print(' %-15s %s' % (desc.tor_version, desc.contact.decode('utf-8', 'replace')))
with_contact += 1
print('\n%i outdated relays found, %i had contact information' % (count, with_contact))
downloader_mock().get_server_descriptors.return_value = [
get_relay_server_descriptor({'platform': 'node-Tor 0.2.3.0 on Linux x86_64'}),
get_relay_server_descriptor({'platform': 'node-Tor 0.1.0 on Linux x86_64'}),
......@@ -278,7 +231,7 @@ class TestTutorialExamples(unittest.TestCase):
get_relay_server_descriptor({'opt': 'contact Sambuddha Basu', 'platform': 'node-Tor 0.1.0 on Linux x86_64'}),
]
tutorial_example()
execfile('docs/_static/example/outdated_relays.py')
self.assert_equal_unordered(OUTDATED_RELAYS_OUTPUT, stdout_mock.getvalue())
......@@ -286,49 +239,6 @@ class TestTutorialExamples(unittest.TestCase):
@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 = OrderedDict()
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 = [
......@@ -362,7 +272,7 @@ class TestTutorialExamples(unittest.TestCase):
[get_network_status_document_v3(routers = (entry[5], entry[6], entry[7], entry[8], entry[9]))],
]
tutorial_example()
execfile('docs/_static/example/compare_flags.py')
self.assert_equal_unordered(COMPARE_FLAGS_OUTPUT, stdout_mock.getvalue())
......@@ -370,37 +280,6 @@ class TestTutorialExamples(unittest.TestCase):
@patch('stem.descriptor.remote.get_authorities')
@patch('stem.descriptor.remote.DescriptorDownloader.query')
def test_votes_by_bandwidth_authorities(self, query_mock, get_authorities_mock, stdout_mock):
def tutorial_example():
from stem.descriptor import remote
# request votes from all the bandwidth authorities
queries = {}
downloader = remote.DescriptorDownloader()
for authority in remote.get_authorities().values():
if authority.is_bandwidth_authority:
queries[authority.nickname] = downloader.query(
'/tor/status-vote/current/authority',
endpoints = [(authority.address, authority.dir_port)],
)
for authority_name, query in queries.items():
try:
print("Getting %s's vote from %s:" % (authority_name, query.download_url))
measured, unmeasured = 0, 0
for desc in query.run():
if desc.measured:
measured += 1
else:
unmeasured += 1
print(' %i measured entries and %i unmeasured' % (measured, unmeasured))
except Exception as exc:
print(' failed to get the vote (%s)' % exc)
directory_values = [
DIRECTORY_AUTHORITIES['gabelmoo'],
DIRECTORY_AUTHORITIES['tor26'],
......@@ -432,7 +311,7 @@ class TestTutorialExamples(unittest.TestCase):
query_mock.side_effect = [query1, query2, query3, query4]
tutorial_example()
execfile('docs/_static/example/votes_by_bandwidth_authorities.py')
self.assert_equal_unordered(VOTES_BY_BANDWIDTH_AUTHORITIES_OUTPUT, stdout_mock.getvalue())
@patch('sys.stdout', new_callable = StringIO)
......@@ -440,16 +319,6 @@ class TestTutorialExamples(unittest.TestCase):
@patch('%s.open' % __name__, create = True)
@patch('stem.descriptor.remote.Query')
def test_persisting_a_consensus(self, query_mock, open_mock, parse_file_mock, stdout_mock):
def tutorial_example_1():
from stem.descriptor import DocumentHandler
from stem.descriptor.remote import DescriptorDownloader
downloader = DescriptorDownloader()
consensus = downloader.get_consensus(document_handler = DocumentHandler.DOCUMENT).run()[0]
with open('/tmp/descriptor_dump', 'w') as descriptor_file:
descriptor_file.write(str(consensus))
def tutorial_example_2():
from stem.descriptor import DocumentHandler, parse_file
......@@ -466,7 +335,7 @@ class TestTutorialExamples(unittest.TestCase):
query_mock().run.return_value = [network_status]
parse_file_mock.return_value = itertools.cycle([network_status])
tutorial_example_1()
tutorial_example_2()
execfile('docs/_static/example/persisting_a_consensus.py')
execfile('docs/_static/example/persisting_a_consensus_with_parse_file.py')
self.assertEqual(PERSISTING_A_CONSENSUS_OUTPUT, stdout_mock.getvalue())
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment