[tor-commits] [stem/master] Add an offline test for mapaddress.

atagar at torproject.org atagar at torproject.org
Mon Oct 7 02:39:02 UTC 2019


commit 4ec8b7c9303148149b3af8a52f0ef63383b30708
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Sep 17 20:11:31 2019 -0400

    Add an offline test for mapaddress.
---
 test/integ/control/controller.py | 77 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index ef90de80..a1d0655b 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -1122,6 +1122,83 @@ class TestController(unittest.TestCase):
       ip_addr = response[response.find(b'\r\n\r\n'):].strip()
       self.assertTrue(stem.util.connection.is_valid_ipv4_address(stem.util.str_tools._to_unicode(ip_addr)), "'%s' isn't an address" % ip_addr)
 
+
+  @test.require.controller
+  def test_mapaddress_offline(self):
+    runner = test.runner.get_runner()
+
+    with runner.get_tor_controller() as controller:
+      # Try mapping one element, make sure the result is as expected.
+      map1 = {'1.2.1.2': 'ifconfig.me'}
+      x = controller.map_address(map1)
+      self.assertEqual(x, map1)
+
+      # Try mapping two elements, make sure the result is as expected.
+      map2 = {'1.2.3.4': 'foobar.example.com',
+              '1.2.3.5': 'barfuzz.example.com'}
+      x = controller.map_address(map2)
+      self.assertEqual(x, map2)
+
+      # Try mapping zero elements, get an error.
+      self.assertRaises(stem.InvalidRequest, controller.map_address, {})
+
+      # Try a virtual mapping to IPv4
+      map3 = {'0.0.0.0': 'quux'}
+      x = controller.map_address(map3)
+      self.assertEquals(len(x), 1)
+      (addr1, target) = x.items()[0]
+      # The default IPv4 virtualaddressrange is 127.192.0.0/10
+      self.assertTrue(addr1.startswith("127."),
+                      "%s did not start with 127."%addr1)
+      self.assertEquals(target, "quux")
+
+      # Try a virtual mapping to IPv6
+      map4 = {'::': 'quibble'}
+      x = controller.map_address(map4)
+      self.assertEquals(len(x), 1)
+      (addr2, target) = x.items()[0]
+      # The default IPv6 virtualaddressrange is FE80::/10
+      self.assertTrue(addr2.startswith("[fe"),
+                      "%s did not start with [fe."%addr2)
+      self.assertEquals(target, "quibble")
+
+      def parse_mapping_list(s):
+        # Helper function -- parse the response from getinfo address-mappings
+        # into a dict.
+        result = dict()
+        for line in s.split("\n"):
+          if not line.strip(): continue
+          k,v,timeout = line.split()
+          result[k] = v
+        return result
+
+      # Ask for a list of all the address mappings we've added.
+      x = controller.get_info(['address-mappings/control'])
+      m = parse_mapping_list(x['address-mappings/control'])
+      self.assertEquals(m["1.2.1.2"], "ifconfig.me")
+      self.assertEquals(m["1.2.3.4"], "foobar.example.com")
+      self.assertEquals(m["1.2.3.5"], "barfuzz.example.com")
+      self.assertEquals(m[addr1], "quux")
+      self.assertEquals(m[addr2], "quibble")
+
+      # Ask for a list of all the address mappings.
+      x = controller.get_info(['address-mappings/all'])
+      m = parse_mapping_list(x['address-mappings/all'])
+      self.assertEquals(m["1.2.1.2"], "ifconfig.me")
+      self.assertEquals(m["1.2.3.4"], "foobar.example.com")
+      self.assertEquals(m["1.2.3.5"], "barfuzz.example.com")
+      self.assertEquals(m[addr1], "quux")
+      self.assertEquals(m[addr2], "quibble")
+
+      # Now ask for a list of only the mappings configured with the
+      # configuration.  Ours should not be there.
+      x = controller.get_info(['address-mappings/config'])
+      m = parse_mapping_list(x['address-mappings/config'])
+      self.assertEquals(m.get("1.2.1.2"), None)
+      self.assertEquals(m.get("1.2.3.4"), None)
+      self.assertEquals(m.get(addr1), None)
+      self.assertEquals(m.get(addr2), None)
+
   @test.require.controller
   @test.require.online
   @test.require.version(Requirement.MICRODESCRIPTOR_IS_DEFAULT)





More information about the tor-commits mailing list