commit 87446136328bddbbd0cbecf931349a4cdd029518
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Sep 26 23:08:51 2020 -0700
Move exit_used test
Seriously? I copy-pasted the tutorial example into our test? That is...
embarrasing.
---
docs/_static/example/exit_used.py | 2 +-
test/unit/examples.py | 52 +++++++++++++++++++++++++-------
test/unit/tutorial_examples.py | 63 ---------------------------------------
3 files changed, 43 insertions(+), 74 deletions(-)
diff --git a/docs/_static/example/exit_used.py b/docs/_static/example/exit_used.py
index 9a16c130..fde2db84 100644
--- a/docs/_static/example/exit_used.py
+++ b/docs/_static/example/exit_used.py
@@ -13,7 +13,7 @@ def main():
stream_listener = functools.partial(stream_event, controller)
controller.add_event_listener(stream_listener, EventType.STREAM)
- raw_input() # wait for user to press enter
+ input() # wait for user to press enter
def stream_event(controller, event):
diff --git a/test/unit/examples.py b/test/unit/examples.py
index 30375ea3..efdac292 100644
--- a/test/unit/examples.py
+++ b/test/unit/examples.py
@@ -4,6 +4,7 @@ Exercise the code in our examples directory.
import base64
import binascii
+import functools
import io
import os
import sys
@@ -104,6 +105,17 @@ EXPECTED_COLLECTOR_READING = """\
caerSidi (4F0C867DF0EF68160568C826838F482CEA7CFE44)
"""
+EXPECTED_EXIT_USED = """\
+Tracking requests for tor exits. Press 'enter' to end.
+
+Exit relay for our connection to 64.15.112.44:80
+ address: 31.172.30.2:443
+ fingerprint: A59E1E7C7EAEE083D756EE1FF6EC31CA3D8651D7
+ nickname: chaoscomputerclub19
+ locale: unknown
+
+"""
+
EXPECTED_LIST_CIRCUITS = """\
Circuit 4 (GENERAL)
@@ -123,6 +135,12 @@ Circuit 10 (GENERAL)
"""
+def _make_circ_event(circ_id, hop1, hop2, hop3):
+ path = '$%s=%s,$%s=%s,$%s=%s' % (hop1[0], hop1[1], hop2[0], hop2[1], hop3[0], hop3[1])
+ content = '650 CIRC %i BUILT %s PURPOSE=GENERAL' % (circ_id, path)
+ return ControlMessage.from_str(content, 'EVENT', normalize = True)
+
+
class TestExamples(unittest.TestCase):
def setUp(self):
self.original_path = list(sys.path)
@@ -328,8 +346,27 @@ class TestExamples(unittest.TestCase):
def test_event_listening(self):
pass
- def test_exit_used(self):
- pass
+ @patch('stem.control.Controller.from_port', spec = Controller)
+ @patch('sys.stdout', new_callable = io.StringIO)
+ def test_exit_used(self, stdout_mock, from_port_mock):
+ path_1 = ('9EA317EECA56BDF30CAEB208A253FB456EDAB1A0', 'bolobolo1')
+ path_2 = ('00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F', 'ph3x')
+ path_3 = ('A59E1E7C7EAEE083D756EE1FF6EC31CA3D8651D7', 'chaoscomputerclub19')
+
+ event = ControlMessage.from_str('650 STREAM 15 SUCCEEDED 3 64.15.112.44:80', 'EVENT', normalize = True)
+ r_line = '%s pZ4efH6u4IPXVu4f9uwxyj2GUdc= oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 31.172.30.2 443 0'
+
+ controller = from_port_mock().__enter__()
+ controller.get_circuit.return_value = _make_circ_event(1, path_1, path_2, path_3)
+ controller.get_network_status.return_value = RouterStatusEntryV3.create({'r': r_line % path_3[1]})
+ controller.get_info.return_value = 'unknown'
+
+ import exit_used
+
+ with patch('builtins.input', Mock(side_effect = functools.partial(exit_used.stream_event, controller, event))):
+ exit_used.main()
+
+ self.assertEqual(EXPECTED_EXIT_USED, stdout_mock.getvalue())
def test_fibonacci_multiprocessing(self):
pass
@@ -349,11 +386,6 @@ class TestExamples(unittest.TestCase):
@patch('stem.control.Controller.from_port', spec = Controller)
@patch('sys.stdout', new_callable = io.StringIO)
def test_list_circuits(self, stdout_mock, from_port_mock):
- def _get_circ_event(circ_id, hop1, hop2, hop3):
- path = '$%s=%s,$%s=%s,$%s=%s' % (hop1[0], hop1[1], hop2[0], hop2[1], hop3[0], hop3[1])
- content = '650 CIRC %i BUILT %s PURPOSE=GENERAL' % (circ_id, path)
- return ControlMessage.from_str(content, 'EVENT', normalize = True)
-
path_1 = ('B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C', 'ByTORAndTheSnowDog')
path_2 = ('0DD9935C5E939CFA1E07B8DDA6D91C1A2A9D9338', 'afo02')
path_3 = ('DB3B1CFBD3E4D97B84B548ADD5B9A31451EEC4CC', 'edwardsnowden3')
@@ -362,9 +394,9 @@ class TestExamples(unittest.TestCase):
path_6 = ('00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F', 'ph3x')
path_7 = ('65242C91BFF30F165DA4D132C81A9EBA94B71D62', 'torexit16')
- circuit_4 = _get_circ_event(4, path_1, path_2, path_3)
- circuit_6 = _get_circ_event(6, path_1, path_4, path_5)
- circuit_10 = _get_circ_event(10, path_1, path_6, path_7)
+ circuit_4 = _make_circ_event(4, path_1, path_2, path_3)
+ circuit_6 = _make_circ_event(6, path_1, path_4, path_5)
+ circuit_10 = _make_circ_event(10, path_1, path_6, path_7)
controller = from_port_mock().__enter__()
controller.get_circuits.return_value = [circuit_4, circuit_6, circuit_10]
diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py
index d673662f..4df9f6c4 100644
--- a/test/unit/tutorial_examples.py
+++ b/test/unit/tutorial_examples.py
@@ -9,7 +9,6 @@ import unittest
from unittest.mock import Mock, patch
-from stem.control import Controller
from stem.descriptor.networkstatus import NetworkStatusDocumentV3
from stem.descriptor.router_status_entry import RouterStatusEntryV3
from stem.descriptor.server_descriptor import RelayDescriptor
@@ -26,17 +25,6 @@ PURPOSE=%s'
PATH_CONTENT = '$%s=%s,$%s=%s,$%s=%s'
-EXIT_USED_OUTPUT = """\
-Tracking requests for tor exits. Press 'enter' to end.
-
-Exit relay for our connection to 64.15.112.44:80
- address: 31.172.30.2:443
- fingerprint: A59E1E7C7EAEE083D756EE1FF6EC31CA3D8651D7
- nickname: chaoscomputerclub19
- locale: unknown
-
-"""
-
OUTDATED_RELAYS_OUTPUT = """\
Checking for outdated relays...
@@ -99,57 +87,6 @@ def _get_router_status(address = None, port = None, nickname = None, fingerprint
class TestTutorialExamples(unittest.TestCase):
- @patch('sys.stdout', new_callable = io.StringIO)
- @patch('stem.control.Controller.from_port', spec = Controller)
- def test_exit_used(self, from_port_mock, stdout_mock):
- def tutorial_example(mock_event):
- import functools
-
- from stem import StreamStatus
- from stem.control import EventType, Controller
-
- def main():
- print("Tracking requests for tor exits. Press 'enter' to end.\n")
-
- with Controller.from_port() as controller:
- controller.authenticate()
-
- stream_listener = functools.partial(stream_event, controller)
- controller.add_event_listener(stream_listener, EventType.STREAM)
-
- stream_event(controller, mock_event) # simulate an event during the raw_input()
-
- def stream_event(controller, event):
- if event.status == StreamStatus.SUCCEEDED and event.circ_id:
- circ = controller.get_circuit(event.circ_id)
-
- exit_fingerprint = circ.path[-1][0]
- exit_relay = controller.get_network_status(exit_fingerprint)
-
- print('Exit relay for our connection to %s' % (event.target))
- print(' address: %s:%i' % (exit_relay.address, exit_relay.or_port))
- print(' fingerprint: %s' % exit_relay.fingerprint)
- print(' nickname: %s' % exit_relay.nickname)
- print(' locale: %s\n' % controller.get_info('ip-to-country/%s' % exit_relay.address, 'unknown'))
-
- main()
-
- path_1 = ('9EA317EECA56BDF30CAEB208A253FB456EDAB1A0', 'bolobolo1')
- path_2 = ('00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F', 'ph3x')
- path_3 = ('A59E1E7C7EAEE083D756EE1FF6EC31CA3D8651D7', 'chaoscomputerclub19')
- circuit = _get_circ_event(1, 'BUILT', path_1, path_2, path_3, 'GENERAL')
-
- event_content = '650 STREAM 15 SUCCEEDED 3 64.15.112.44:80'
- event = _get_event(event_content)
-
- controller = from_port_mock().__enter__()
- controller.get_circuit.return_value = circuit
- controller.get_network_status.return_value = _get_router_status('31.172.30.2', '443', path_3[1], 'pZ4efH6u4IPXVu4f9uwxyj2GUdc=')
- controller.get_info.return_value = 'unknown'
-
- tutorial_example(event)
- self.assertCountEqual(EXIT_USED_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines())
-
@patch('sys.stdout', new_callable = io.StringIO)
@patch('stem.descriptor.remote.DescriptorDownloader')
def test_outdated_relays(self, downloader_mock, stdout_mock):