[tor-commits] [stem/master] Test relay_connections example

atagar at torproject.org atagar at torproject.org
Fri Oct 2 23:16:05 UTC 2020


commit 386b9ba692d21074b4aeac50591bacd889d93581
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu Oct 1 17:15:56 2020 -0700

    Test relay_connections example
---
 docs/_static/example/relay_connections.py | 10 ++--
 test/unit/examples.py                     | 78 +++++++++++++++++++++++++++++--
 2 files changed, 78 insertions(+), 10 deletions(-)

diff --git a/docs/_static/example/relay_connections.py b/docs/_static/example/relay_connections.py
index 26f59f4c..90539f89 100644
--- a/docs/_static/example/relay_connections.py
+++ b/docs/_static/example/relay_connections.py
@@ -9,7 +9,7 @@ import stem.util.str_tools
 from stem.control import Listener
 from stem.util.connection import get_connections, port_usage, is_valid_ipv4_address
 
-HEADER_LINE = " {version}   uptime: {uptime}   flags: {flags}\n"
+HEADER_LINE = ' {version}   uptime: {uptime}   flags: {flags}\n'
 
 DIV = '+%s+%s+%s+' % ('-' * 30, '-' * 6, '-' * 6)
 COLUMN = '| %-28s | %4s | %4s |'
@@ -23,11 +23,11 @@ OUTBOUND_EXIT = 'Outbound exit traffic'
 OUTBOUND_UNKNOWN = 'Outbound uncategorized'
 
 
-def main():
+def main(args = None):
   parser = argparse.ArgumentParser()
-  parser.add_argument("--ctrlport", help="default: 9051 or 9151")
-  parser.add_argument("--resolver", help="default: autodetected")
-  args = parser.parse_args()
+  parser.add_argument('--ctrlport', help = 'default: 9051 or 9151')
+  parser.add_argument('--resolver', help = 'default: autodetected')
+  args = parser.parse_args(args)
 
   control_port = int(args.ctrlport) if args.ctrlport else 'default'
   controller = stem.connection.connect(control_port = ('127.0.0.1', control_port))
diff --git a/test/unit/examples.py b/test/unit/examples.py
index 9d42299d..e1c223bf 100644
--- a/test/unit/examples.py
+++ b/test/unit/examples.py
@@ -13,10 +13,11 @@ import unittest
 
 import stem.socket
 import stem.util.system
+import stem.version
 import test
 import test.require
 
-from stem.control import Controller
+from stem.control import Controller, Listener
 from stem.descriptor.bandwidth_file import BandwidthFile
 from stem.descriptor.extrainfo_descriptor import RelayExtraInfoDescriptor
 from stem.descriptor.hidden_service import HiddenServiceDescriptorV2
@@ -26,6 +27,7 @@ from stem.descriptor.server_descriptor import RelayDescriptor
 from stem.directory import DIRECTORY_AUTHORITIES
 from stem.exit_policy import ExitPolicy
 from stem.response import ControlMessage
+from stem.util.connection import Connection
 from unittest.mock import Mock, patch
 
 EXAMPLE_DIR = os.path.join(test.STEM_BASE, 'docs', '_static', 'example')
@@ -36,6 +38,7 @@ UNTESTED = (
 
   'client_usage_using_pycurl',
   'client_usage_using_socksipy',
+  'reading_twitter',
 )
 
 EXPECTED_BANDWIDTH_STATS = """\
@@ -199,6 +202,31 @@ EXPECTED_PERSISTING_A_CONSENSUS = """\
 A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB: caerSidi
 """
 
+EXPECTED_RELAY_CONNECTIONS_HELP = """\
+usage: run_tests.py [-h] [--ctrlport CTRLPORT] [--resolver RESOLVER]
+
+optional arguments:
+  -h, --help           show this help message and exit
+  --ctrlport CTRLPORT  default: 9051 or 9151
+  --resolver RESOLVER  default: autodetected
+"""
+
+EXPECTED_RELAY_CONNECTIONS = """\
+ 1.2.3.4   uptime: 00:50   flags: Fast, Stable
+
++------------------------------+------+------+
+| Type                         | IPv4 | IPv6 |
++------------------------------+------+------+
+| Inbound to our ORPort        |    1 |    0 |
+| Inbound to our DirPort       |    2 |    0 |
+| Inbound to our ControlPort   |    1 |    0 |
+| Outbound uncategorized       |    1 |    0 |
++------------------------------+------+------+
+| Total                        |    5 |    0 |
++------------------------------+------+------+
+
+"""
+
 EXPECTED_RUNNING_HIDDEN_SERVICE = """\
  * Connecting to tor
  * Creating our hidden service in /home/atagar/.tor/hello_world
@@ -794,11 +822,51 @@ class TestExamples(unittest.TestCase):
 
     self.assertEqual('4F0C867DF0EF68160568C826838F482CEA7CFE44\n', stdout_mock.getvalue())
 
-  def test_reading_twitter(self):
-    pass
+  @patch('sys.exit', Mock())
+  @patch('time.time', Mock(return_value = 100))
+  @patch('stem.util.system.start_time', Mock(return_value = 50))
+  @patch('stem.util.connection.get_connections')
+  @patch('stem.connection.connect')
+  def test_relay_connections(self, connect_mock, get_connections_mock):
+    import relay_connections
 
-  def test_relay_connections(self):
-    pass
+    with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
+      connect_mock.return_value = None
+
+      relay_connections.main(['--help'])
+      self.assertEqual(EXPECTED_RELAY_CONNECTIONS_HELP, stdout_mock.getvalue())
+
+    with patch('sys.stdout', new_callable = io.StringIO) as stdout_mock:
+      consensus_desc = RouterStatusEntryV2.create({
+        'r': 'caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0',
+        's': 'Fast Stable',
+      })
+
+      controller = Mock()
+      controller.get_pid.return_value = 123
+      controller.get_version.return_value = stem.version.Version('1.2.3.4')
+      controller.get_exit_policy.return_value = ExitPolicy('reject *:*')
+      controller.get_network_status.return_value = consensus_desc
+      controller.get_network_statuses.return_value = [consensus_desc]
+
+      controller.get_ports.side_effect = lambda port_type, default_val: {
+        Listener.OR: [4369],
+        Listener.DIR: [443],
+        Listener.CONTROL: [9100],
+      }.get(port_type, default_val)
+
+      connect_mock.return_value = controller
+
+      get_connections_mock.return_value = [
+        Connection('17.17.17.17', 4369, '34.34.34.34', 8738, 'tcp', False),
+        Connection('18.18.18.18', 443, '35.35.35.35', 4281, 'tcp', False),
+        Connection('19.19.19.19', 443, '36.36.36.36', 2814, 'tcp', False),
+        Connection('20.20.20.20', 9100, '37.37.37.37', 2814, 'tcp', False),
+        Connection('21.21.21.21', 80, '38.38.38.38', 8142, 'tcp', False),
+      ]
+
+      relay_connections.main([])
+      self.assertEqual(EXPECTED_RELAY_CONNECTIONS, stdout_mock.getvalue())
 
   def test_resuming_ephemeral_hidden_service(self):
     pass





More information about the tor-commits mailing list