[tor-commits] [stem/master] Tor added default IPv6 ORPort

atagar at torproject.org atagar at torproject.org
Thu Jul 23 22:40:36 UTC 2020


commit 435b980c62aa7bc68323de90911c9dbe4cb37b6d
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu Jul 23 15:37:07 2020 -0700

    Tor added default IPv6 ORPort
    
    Tor recently changed its ORPort behavior so it provides both an IPv4 and IPv6
    endpoint by default...
    
      https://github.com/torproject/stem/issues/70
    
    Adjusting our tests. Our get_ports() method now provides a set rather than a
    list so we don't return duplicate values.
---
 stem/control.py                  |  8 ++++----
 test/integ/control/controller.py | 18 +++++++++---------
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/stem/control.py b/stem/control.py
index 7b90eed0..47b8a37c 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -271,7 +271,7 @@ import stem.version
 from stem import UNDEFINED, CircStatus, Signal
 from stem.util import Synchronous, log
 from types import TracebackType
-from typing import Any, AsyncIterator, Awaitable, Callable, Dict, List, Mapping, Optional, Sequence, Tuple, Type, Union
+from typing import Any, AsyncIterator, Awaitable, Callable, Dict, List, Mapping, Optional, Sequence, Set, Tuple, Type, Union
 
 # When closing the controller we attempt to finish processing enqueued events,
 # but if it takes longer than this we terminate.
@@ -1352,7 +1352,7 @@ class Controller(BaseController):
     return policy
 
   @with_default()
-  async def get_ports(self, listener_type: 'stem.control.Listener', default: Any = UNDEFINED) -> Sequence[int]:
+  async def get_ports(self, listener_type: 'stem.control.Listener', default: Any = UNDEFINED) -> Set[int]:
     """
     get_ports(listener_type, default = UNDEFINED)
 
@@ -1366,7 +1366,7 @@ class Controller(BaseController):
     :param listener_type: connection type being handled by the ports we return
     :param default: response if the query fails
 
-    :returns: **list** of **ints** for the local ports where tor handles
+    :returns: **set** of **ints** for the local ports where tor handles
       connections of the given type
 
     :raises: :class:`stem.ControllerError` if unable to determine the ports
@@ -1385,7 +1385,7 @@ class Controller(BaseController):
         log.info("Request for %s ports got an address that's neither IPv4 or IPv6: %s" % (listener_type, address))
         return False
 
-    return [port for (addr, port) in (await self.get_listeners(listener_type)) if is_localhost(addr)]
+    return set([port for (addr, port) in (await self.get_listeners(listener_type)) if is_localhost(addr)])
 
   @with_default()
   async def get_listeners(self, listener_type: 'stem.control.Listener', default: Any = UNDEFINED) -> Sequence[Tuple[str, int]]:
diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index b539fc0e..40e036a7 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -951,17 +951,17 @@ class TestController(unittest.TestCase):
     runner = test.runner.get_runner()
 
     async with await runner.get_tor_controller() as controller:
-      self.assertEqual([test.runner.ORPORT], await controller.get_ports(Listener.OR))
-      self.assertEqual([], await controller.get_ports(Listener.DIR))
-      self.assertEqual([test.runner.SOCKS_PORT], await controller.get_ports(Listener.SOCKS))
-      self.assertEqual([], await controller.get_ports(Listener.TRANS))
-      self.assertEqual([], await controller.get_ports(Listener.NATD))
-      self.assertEqual([], await controller.get_ports(Listener.DNS))
+      self.assertEqual(set([test.runner.ORPORT]), await controller.get_ports(Listener.OR))
+      self.assertEqual(set(), await controller.get_ports(Listener.DIR))
+      self.assertEqual(set([test.runner.SOCKS_PORT]), await controller.get_ports(Listener.SOCKS))
+      self.assertEqual(set(), await controller.get_ports(Listener.TRANS))
+      self.assertEqual(set(), await controller.get_ports(Listener.NATD))
+      self.assertEqual(set(), await controller.get_ports(Listener.DNS))
 
       if test.runner.Torrc.PORT in runner.get_options():
-        self.assertEqual([test.runner.CONTROL_PORT], await controller.get_ports(Listener.CONTROL))
+        self.assertEqual(set([test.runner.CONTROL_PORT]), await controller.get_ports(Listener.CONTROL))
       else:
-        self.assertEqual([], await controller.get_ports(Listener.CONTROL))
+        self.assertEqual(set(), await controller.get_ports(Listener.CONTROL))
 
   @test.require.controller
   @async_test
@@ -973,7 +973,7 @@ class TestController(unittest.TestCase):
     runner = test.runner.get_runner()
 
     async with await runner.get_tor_controller() as controller:
-      self.assertEqual([('0.0.0.0', test.runner.ORPORT)], await controller.get_listeners(Listener.OR))
+      self.assertEqual([('0.0.0.0', test.runner.ORPORT), ('::', test.runner.ORPORT)], await controller.get_listeners(Listener.OR))
       self.assertEqual([], await controller.get_listeners(Listener.DIR))
       self.assertEqual([('127.0.0.1', test.runner.SOCKS_PORT)], await controller.get_listeners(Listener.SOCKS))
       self.assertEqual([], await controller.get_listeners(Listener.TRANS))



More information about the tor-commits mailing list