commit faa569fcbe8a8d5bb1014c2961478a33465d113e Author: Damian Johnson atagar@torproject.org Date: Sat Sep 26 18:08:45 2020 -0700
Move list_circuits test
Yikes. We have *three* test modules for our website examples...
* tutorial.py, made in 2012 * tutorial_examples.py, made in 2014 * examples.py, from this branch
I've worked on Stem for so long clearly even I can't keep all our tests straight. These modules cover a subset of our tutorial examples, so beginning to merge them into examples.py. Unlike them, examples.py checks for new example scripts so we'll finally stop re-inventing this wheel. --- docs/_static/example/list_circuits.py | 6 ++-- stem/response/events.py | 4 +++ test/unit/examples.py | 58 +++++++++++++++++++++++++++++++++-- test/unit/tutorial_examples.py | 49 ----------------------------- 4 files changed, 63 insertions(+), 54 deletions(-)
diff --git a/docs/_static/example/list_circuits.py b/docs/_static/example/list_circuits.py index b89e99fc..aff3b211 100644 --- a/docs/_static/example/list_circuits.py +++ b/docs/_static/example/list_circuits.py @@ -8,8 +8,8 @@ with Controller.from_port(port = 9051) as controller: if circ.status != CircStatus.BUILT: continue
- print("") - print("Circuit %s (%s)" % (circ.id, circ.purpose)) + print('') + print('Circuit %s (%s)' % (circ.id, circ.purpose))
for i, entry in enumerate(circ.path): div = '+' if (i == len(circ.path) - 1) else '|' @@ -18,4 +18,4 @@ with Controller.from_port(port = 9051) as controller: desc = controller.get_network_status(fingerprint, None) address = desc.address if desc else 'unknown'
- print(" %s- %s (%s, %s)" % (div, fingerprint, nickname, address)) + print(' %s- %s (%s, %s)' % (div, fingerprint, nickname, address)) diff --git a/stem/response/events.py b/stem/response/events.py index 300d02d0..d9d46d6a 100644 --- a/stem/response/events.py +++ b/stem/response/events.py @@ -417,6 +417,10 @@ class CircuitEvent(Event): my_id = getattr(self, 'id') their_id = getattr(other, 'id')
+ if my_id.isdigit() and their_id.isdigit(): + my_id = int(my_id) + their_id = int(their_id) + return method(my_id, their_id) if my_id != their_id else method(hash(self), hash(other))
def __gt__(self, other: Any) -> bool: diff --git a/test/unit/examples.py b/test/unit/examples.py index 7c801ece..30375ea3 100644 --- a/test/unit/examples.py +++ b/test/unit/examples.py @@ -104,6 +104,24 @@ EXPECTED_COLLECTOR_READING = """\ caerSidi (4F0C867DF0EF68160568C826838F482CEA7CFE44) """
+EXPECTED_LIST_CIRCUITS = """\ + +Circuit 4 (GENERAL) + |- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61) + |- 0DD9935C5E939CFA1E07B8DDA6D91C1A2A9D9338 (afo02, 87.238.194.176) + +- DB3B1CFBD3E4D97B84B548ADD5B9A31451EEC4CC (edwardsnowden3, 109.163.234.10) + +Circuit 6 (GENERAL) + |- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61) + |- EC01CB4766BADC1611678555CE793F2A7EB2D723 (sprockets, 46.165.197.96) + +- 9EA317EECA56BDF30CAEB208A253FB456EDAB1A0 (bolobolo1, 96.47.226.20) + +Circuit 10 (GENERAL) + |- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61) + |- 00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F (ph3x, 86.59.119.83) + +- 65242C91BFF30F165DA4D132C81A9EBA94B71D62 (torexit16, 176.67.169.171) +""" +
class TestExamples(unittest.TestCase): def setUp(self): @@ -328,8 +346,44 @@ class TestExamples(unittest.TestCase): def test_introduction_points(self): pass
- def test_list_circuits(self): - pass + @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') + path_4 = ('EC01CB4766BADC1611678555CE793F2A7EB2D723', 'sprockets') + path_5 = ('9EA317EECA56BDF30CAEB208A253FB456EDAB1A0', 'bolobolo1') + 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) + + controller = from_port_mock().__enter__() + controller.get_circuits.return_value = [circuit_4, circuit_6, circuit_10] + + r_line = 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 %s 9001 0' + + controller.get_network_status.side_effect = lambda fingerprint, *args: { + path_1[0]: RouterStatusEntryV3.create({'r': r_line % '173.209.180.61'}), + path_2[0]: RouterStatusEntryV3.create({'r': r_line % '87.238.194.176'}), + path_3[0]: RouterStatusEntryV3.create({'r': r_line % '109.163.234.10'}), + path_4[0]: RouterStatusEntryV3.create({'r': r_line % '46.165.197.96'}), + path_5[0]: RouterStatusEntryV3.create({'r': r_line % '96.47.226.20'}), + path_6[0]: RouterStatusEntryV3.create({'r': r_line % '86.59.119.83'}), + path_7[0]: RouterStatusEntryV3.create({'r': r_line % '176.67.169.171'}), + }[fingerprint] + + import list_circuits + + self.assertEqual(EXPECTED_LIST_CIRCUITS, stdout_mock.getvalue())
def test_load_test(self): pass diff --git a/test/unit/tutorial_examples.py b/test/unit/tutorial_examples.py index 5ccf1ce2..d673662f 100644 --- a/test/unit/tutorial_examples.py +++ b/test/unit/tutorial_examples.py @@ -26,24 +26,6 @@ PURPOSE=%s'
PATH_CONTENT = '$%s=%s,$%s=%s,$%s=%s'
-LIST_CIRCUITS_OUTPUT = """\ - -Circuit 4 (GENERAL) - |- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61) - |- 0DD9935C5E939CFA1E07B8DDA6D91C1A2A9D9338 (afo02, 87.238.194.176) - +- DB3B1CFBD3E4D97B84B548ADD5B9A31451EEC4CC (edwardsnowden3, 109.163.234.10) - -Circuit 6 (GENERAL) - |- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61) - |- EC01CB4766BADC1611678555CE793F2A7EB2D723 (sprockets, 46.165.197.96) - +- 9EA317EECA56BDF30CAEB208A253FB456EDAB1A0 (bolobolo1, 96.47.226.20) - -Circuit 10 (GENERAL) - |- B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C (ByTORAndTheSnowDog, 173.209.180.61) - |- 00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F (ph3x, 86.59.119.83) - +- 65242C91BFF30F165DA4D132C81A9EBA94B71D62 (torexit16, 176.67.169.171) -""" - EXIT_USED_OUTPUT = """\ Tracking requests for tor exits. Press 'enter' to end.
@@ -117,37 +99,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_list_circuits(self, from_port_mock, stdout_mock): - path_1 = ('B1FA7D51B8B6F0CB585D944F450E7C06EDE7E44C', 'ByTORAndTheSnowDog') - path_2 = ('0DD9935C5E939CFA1E07B8DDA6D91C1A2A9D9338', 'afo02') - path_3 = ('DB3B1CFBD3E4D97B84B548ADD5B9A31451EEC4CC', 'edwardsnowden3') - path_4 = ('EC01CB4766BADC1611678555CE793F2A7EB2D723', 'sprockets') - path_5 = ('9EA317EECA56BDF30CAEB208A253FB456EDAB1A0', 'bolobolo1') - path_6 = ('00C2C2A16AEDB51D5E5FB7D6168FC66B343D822F', 'ph3x') - path_7 = ('65242C91BFF30F165DA4D132C81A9EBA94B71D62', 'torexit16') - - circuit_4 = _get_circ_event(4, 'BUILT', path_1, path_2, path_3, 'GENERAL') - circuit_6 = _get_circ_event(6, 'BUILT', path_1, path_4, path_5, 'GENERAL') - circuit_10 = _get_circ_event(10, 'BUILT', path_1, path_6, path_7, 'GENERAL') - - controller = from_port_mock().__enter__() - controller.get_circuits.return_value = [circuit_4, circuit_6, circuit_10] - - controller.get_network_status.side_effect = lambda fingerprint, *args: { - path_1[0]: _get_router_status('173.209.180.61'), - path_2[0]: _get_router_status('87.238.194.176'), - path_3[0]: _get_router_status('109.163.234.10'), - path_4[0]: _get_router_status('46.165.197.96'), - path_5[0]: _get_router_status('96.47.226.20'), - path_6[0]: _get_router_status('86.59.119.83'), - path_7[0]: _get_router_status('176.67.169.171') - }[fingerprint] - - exec_documentation_example('list_circuits.py') - self.assertCountEqual(LIST_CIRCUITS_OUTPUT.splitlines(), stdout_mock.getvalue().splitlines()) - @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):
tor-commits@lists.torproject.org