[tor-commits] [stem/master] Mislabeled server descriptors as being version 3

atagar at torproject.org atagar at torproject.org
Sun May 6 01:13:58 UTC 2012


commit cffc3c1be1c4c2a00ce41325a37038d83c8a80a1
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat May 5 15:47:06 2012 -0700

    Mislabeled server descriptors as being version 3
    
    We're using version 3 of the dir-spec, but server descriptors themselves are
    still using their initial version. Correcting the class names and documentation
    that labeled them as being version 3. Thanks to Karsten for the correction!
---
 stem/descriptor/__init__.py                |    2 +-
 stem/descriptor/server_descriptor.py       |   36 ++++++++++++------------
 test/integ/descriptor/server_descriptor.py |   16 +++++-----
 test/unit/descriptor/server_descriptor.py  |   42 ++++++++++++++--------------
 4 files changed, 48 insertions(+), 48 deletions(-)

diff --git a/stem/descriptor/__init__.py b/stem/descriptor/__init__.py
index 21f40c2..2af1fb0 100644
--- a/stem/descriptor/__init__.py
+++ b/stem/descriptor/__init__.py
@@ -41,7 +41,7 @@ def parse_file(path, descriptor_file):
   descriptor_file.seek(0)
   
   if filename == "cached-descriptors" or first_line.startswith("router "):
-    for desc in stem.descriptor.server_descriptor.parse_file_v3(descriptor_file):
+    for desc in stem.descriptor.server_descriptor.parse_file(descriptor_file):
       desc._set_path(path)
       yield desc
   else:
diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index d56b453..5a187df 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -7,13 +7,13 @@ etc). This information is provided from a few sources...
 - the 'cached-descriptors' file in tor's data directory
 - tor metrics, at https://metrics.torproject.org/data.html
 
-parse_file_v3 - Iterates over the server descriptors in a file.
-ServerDescriptorV3 - Tor server descriptor, version 3.
-  |  |- RelayDescriptorV3 - Server descriptor for a relay.
+parse_file - Iterates over the server descriptors in a file.
+ServerDescriptor - Tor server descriptor.
+  |  |- RelayDescriptor - Server descriptor for a relay.
   |  |  |- is_valid - checks the signature against the descriptor content
   |  |  +- digest - calculates the digest value for our content
   |  |
-  |  +- BridgeDescriptorV3 - Scrubbed server descriptor for a bridge.
+  |  +- BridgeDescriptor - Scrubbed server descriptor for a bridge.
   |     |- is_scrubbed - checks if our content has been properly scrubbed
   |     +- get_scrubbing_issues - description of issues with our scrubbing
   |
@@ -66,10 +66,10 @@ SINGLE_FIELDS = (
   "allow-single-hop-exits",
 )
 
-def parse_file_v3(descriptor_file, validate = True):
+def parse_file(descriptor_file, validate = True):
   """
-  Iterates over the version 3 server descriptors in a file. This can read
-  either relay or bridge v3 server descriptors.
+  Iterates over the server descriptors in a file. This can read either relay or
+  bridge server descriptors.
   
   Arguments:
     descriptor_file (file) - file with descriptor content
@@ -77,7 +77,7 @@ def parse_file_v3(descriptor_file, validate = True):
                              True, skips these checks otherwise
   
   Returns:
-    iterator for ServerDescriptorV3 instances in the file
+    iterator for ServerDescriptor instances in the file
   
   Raises:
     ValueError if the contents is malformed and validate is True
@@ -95,7 +95,7 @@ def parse_file_v3(descriptor_file, validate = True):
   descriptor_file.seek(0)
   
   if first_line.startswith("router Unnamed 10."):
-    yield BridgeDescriptorV3(descriptor_file.read())
+    yield BridgeDescriptor(descriptor_file.read())
     return
   
   # Handler for relay descriptors
@@ -137,7 +137,7 @@ def parse_file_v3(descriptor_file, validate = True):
       annotations = map(str.strip, annotations)
       
       descriptor_text = "".join(descriptor_content)
-      descriptor = RelayDescriptorV3(descriptor_text, validate, annotations)
+      descriptor = RelayDescriptor(descriptor_text, validate, annotations)
       yield descriptor
     else: break # done parsing descriptors
 
@@ -175,9 +175,9 @@ def _read_until_keyword(keyword, descriptor_file, inclusive = False):
   
   return content
 
-class ServerDescriptorV3(stem.descriptor.Descriptor):
+class ServerDescriptor(stem.descriptor.Descriptor):
   """
-  Common parent for version 3 server descriptors.
+  Common parent for server descriptors.
   
   Attributes:
     nickname (str)           - relay's nickname (*)
@@ -599,7 +599,7 @@ class ServerDescriptorV3(stem.descriptor.Descriptor):
   def _first_keyword(self): return None
   def _last_keyword(self): return None
 
-class RelayDescriptorV3(ServerDescriptorV3):
+class RelayDescriptor(ServerDescriptor):
   """
   Version 3 server descriptor, as specified in...
   https://gitweb.torproject.org/torspec.git/blob/HEAD:/dir-spec.txt
@@ -618,7 +618,7 @@ class RelayDescriptorV3(ServerDescriptorV3):
     self.signature = None
     self._digest = None
     
-    ServerDescriptorV3.__init__(self, raw_contents, validate, annotations)
+    ServerDescriptor.__init__(self, raw_contents, validate, annotations)
   
   def is_valid(self):
     """
@@ -680,7 +680,7 @@ class RelayDescriptorV3(ServerDescriptorV3):
         self.signature = block_contents
         del entries["router-signature"]
     
-    ServerDescriptorV3._parse(self, entries, validate)
+    ServerDescriptor._parse(self, entries, validate)
   
   def _required_fields(self):
     return REQUIRED_FIELDS
@@ -694,7 +694,7 @@ class RelayDescriptorV3(ServerDescriptorV3):
   def _last_keyword(self):
     return "router-signature"
 
-class BridgeDescriptorV3(ServerDescriptorV3):
+class BridgeDescriptor(ServerDescriptor):
   """
   Version 3 bridge descriptor, as specified in...
   https://metrics.torproject.org/formats.html#bridgedesc
@@ -708,7 +708,7 @@ class BridgeDescriptorV3(ServerDescriptorV3):
   def __init__(self, raw_contents, validate = True, annotations = None):
     self.address_alt = []
     self._scrubbing_issues = None
-    ServerDescriptorV3.__init__(self, raw_contents, validate, annotations)
+    ServerDescriptor.__init__(self, raw_contents, validate, annotations)
   
   def _parse(self, entries, validate):
     entries = dict(entries)
@@ -744,7 +744,7 @@ class BridgeDescriptorV3(ServerDescriptorV3):
         
         del entries["or-address"]
     
-    ServerDescriptorV3._parse(self, entries, validate)
+    ServerDescriptor._parse(self, entries, validate)
   
   def is_scrubbed(self):
     """
diff --git a/test/integ/descriptor/server_descriptor.py b/test/integ/descriptor/server_descriptor.py
index 84732b8..5ad700f 100644
--- a/test/integ/descriptor/server_descriptor.py
+++ b/test/integ/descriptor/server_descriptor.py
@@ -74,7 +74,7 @@ dskLSPz8beUW7bzwDjR6EVNGpyoZde83Ejvau+5F2c6cGnlu91fiZN3suE88iE6e
 Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
 -----END SIGNATURE-----"""
     
-    desc = stem.descriptor.server_descriptor.RelayDescriptorV3(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.RelayDescriptor(descriptor_contents)
     self.assertEquals("caerSidi", desc.nickname)
     self.assertEquals("A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB", desc.fingerprint)
     self.assertEquals("71.35.133.197", desc.address)
@@ -116,7 +116,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
     descriptor_contents = descriptor_file.read()
     descriptor_file.close()
     
-    desc = stem.descriptor.server_descriptor.RelayDescriptorV3(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.RelayDescriptor(descriptor_contents)
     self.assertEquals("krypton", desc.nickname)
     self.assertEquals("3E2F63E2356F52318B536A12B6445373808A5D6C", desc.fingerprint)
     self.assertEquals("212.37.39.59", desc.address)
@@ -181,7 +181,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
       RAN_CACHED_DESCRIPTOR_TEST = True
     
     with open(descriptor_path) as descriptor_file:
-      for desc in stem.descriptor.server_descriptor.parse_file_v3(descriptor_file):
+      for desc in stem.descriptor.server_descriptor.parse_file(descriptor_file):
         # the following attributes should be deprecated, and not appear in the wild
         self.assertEquals(None, desc.read_history)
         self.assertEquals(None, desc.write_history)
@@ -214,7 +214,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
     expected_published = datetime.datetime(2012, 3, 21, 16, 28, 14)
     expected_contact = "2048R/F171EC1F Johan Bl\xc3\xa5b\xc3\xa4ck \xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf"
     
-    desc = stem.descriptor.server_descriptor.RelayDescriptorV3(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.RelayDescriptor(descriptor_contents)
     self.assertEquals("torrelay389752132", desc.nickname)
     self.assertEquals("FEBC7F992AC418BBE42BC13FE94EFCFE6549197E", desc.fingerprint)
     self.assertEquals("130.243.230.116", desc.address)
@@ -253,7 +253,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
     descriptor_contents = descriptor_file.read()
     descriptor_file.close()
     
-    desc = stem.descriptor.server_descriptor.RelayDescriptorV3(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.RelayDescriptor(descriptor_contents)
     
     self.assertEquals("pogonip", desc.nickname)
     self.assertEquals("6DABD62BC65D4E6FE620293157FC76968DAB9C9B", desc.fingerprint)
@@ -280,7 +280,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
     descriptor_contents = descriptor_file.read()
     descriptor_file.close()
     
-    desc = stem.descriptor.server_descriptor.RelayDescriptorV3(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.RelayDescriptor(descriptor_contents)
     
     self.assertEquals("TipTor", desc.nickname)
     self.assertEquals("137962D4931DBF08A24E843288B8A155D6D2AEDD", desc.fingerprint)
@@ -290,7 +290,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
     # should appear
     
     descriptor_contents = descriptor_contents.replace("Tor 0.1.1.25", "Tor 0.1.2.7")
-    self.assertRaises(ValueError, stem.descriptor.server_descriptor.RelayDescriptorV3, descriptor_contents)
+    self.assertRaises(ValueError, stem.descriptor.server_descriptor.RelayDescriptor, descriptor_contents)
   
   def test_bridge_descriptor(self):
     """
@@ -311,7 +311,7 @@ Qlx9HNCqCY877ztFRC624ja2ql6A2hBcuoYMbkHjcQ4=
       "$8C8A470D7C23151665A7B84E75E89FCC205A3304",
     ]
     
-    desc = stem.descriptor.server_descriptor.BridgeDescriptorV3(descriptor_contents)
+    desc = stem.descriptor.server_descriptor.BridgeDescriptor(descriptor_contents)
     self.assertEquals("Unnamed", desc.nickname)
     self.assertEquals("AE54E28ED069CDF45F3009F963EE3B3D6FA26A2E", desc.fingerprint)
     self.assertEquals("10.45.227.253", desc.address)
diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py
index 101cdcd..e3b2ec6 100644
--- a/test/unit/descriptor/server_descriptor.py
+++ b/test/unit/descriptor/server_descriptor.py
@@ -7,7 +7,7 @@ import StringIO
 import unittest
 
 import stem.descriptor.server_descriptor
-from stem.descriptor.server_descriptor import RelayDescriptorV3, BridgeDescriptorV3
+from stem.descriptor.server_descriptor import RelayDescriptor, BridgeDescriptor
 
 CRYPTO_BLOB = """
 MIGJAoGBAJv5IIWQ+WDWYUdyA/0L8qbIkEVH/cwryZWoIaPAzINfrw1WfNZGtBmg
@@ -80,7 +80,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor()
-    desc = RelayDescriptorV3(desc_text)
+    desc = RelayDescriptor(desc_text)
     
     self.assertEquals("caerSidi", desc.nickname)
     self.assertEquals("71.35.133.197", desc.address)
@@ -95,7 +95,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor({"opt": "contact www.atagar.com/contact/"})
-    desc = RelayDescriptorV3(desc_text)
+    desc = RelayDescriptor(desc_text)
     self.assertEquals("www.atagar.com/contact/", desc.contact)
   
   def test_unrecognized_line(self):
@@ -104,7 +104,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor({"pepperjack": "is oh so tasty!"})
-    desc = RelayDescriptorV3(desc_text)
+    desc = RelayDescriptor(desc_text)
     self.assertEquals(["pepperjack is oh so tasty!"], desc.get_unrecognized_lines())
   
   def test_proceeding_line(self):
@@ -185,12 +185,12 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor({"platform": ""})
-    desc = RelayDescriptorV3(desc_text, validate = False)
+    desc = RelayDescriptor(desc_text, validate = False)
     self.assertEquals("", desc.platform)
     
     # does the same but with 'platform ' replaced with 'platform'
     desc_text = desc_text.replace("platform ", "platform")
-    desc = RelayDescriptorV3(desc_text, validate = False)
+    desc = RelayDescriptor(desc_text, validate = False)
     self.assertEquals("", desc.platform)
   
   def test_protocols_no_circuit_versions(self):
@@ -212,7 +212,7 @@ class TestServerDescriptor(unittest.TestCase):
     
     desc_text = _make_descriptor({"published": "2012-02-29 04:03:19"})
     expected_published = datetime.datetime(2012, 2, 29, 4, 3, 19)
-    self.assertEquals(expected_published, RelayDescriptorV3(desc_text).published)
+    self.assertEquals(expected_published, RelayDescriptor(desc_text).published)
   
   def test_published_no_time(self):
     """
@@ -232,7 +232,7 @@ class TestServerDescriptor(unittest.TestCase):
     for field in ("read-history", "write-history"):
       value = "2005-12-16 18:00:48 (900 s) 81,8848,8927,8927,83,8848"
       desc_text = _make_descriptor({"opt %s" % field: value})
-      desc = RelayDescriptorV3(desc_text)
+      desc = RelayDescriptor(desc_text)
       
       if field == "read-history":
         attr = (desc.read_history, desc.read_history_end,
@@ -256,7 +256,7 @@ class TestServerDescriptor(unittest.TestCase):
     
     value = "2005-12-17 01:23:11 (900 s) "
     desc_text = _make_descriptor({"opt read-history": value})
-    desc = RelayDescriptorV3(desc_text)
+    desc = RelayDescriptor(desc_text)
     self.assertEquals(value, desc.read_history)
     self.assertEquals(datetime.datetime(2005, 12, 17, 1, 23, 11), desc.read_history_end)
     self.assertEquals(900, desc.read_history_interval)
@@ -271,8 +271,8 @@ class TestServerDescriptor(unittest.TestCase):
     desc_text += _make_descriptor()
     desc_text += "\ntrailing text that should be ignored, ho hum"
     
-    # running parse_file_v3 should provide an iterator with a single descriptor
-    desc_iter = stem.descriptor.server_descriptor.parse_file_v3(StringIO.StringIO(desc_text))
+    # running parse_file should provide an iterator with a single descriptor
+    desc_iter = stem.descriptor.server_descriptor.parse_file(StringIO.StringIO(desc_text))
     desc_entries = list(desc_iter)
     self.assertEquals(1, len(desc_entries))
     desc = desc_entries[0]
@@ -299,10 +299,10 @@ class TestServerDescriptor(unittest.TestCase):
     
     for attr in stem.descriptor.server_descriptor.REQUIRED_FIELDS:
       desc_text = _make_descriptor(exclude = [attr])
-      self.assertRaises(ValueError, RelayDescriptorV3, desc_text)
+      self.assertRaises(ValueError, RelayDescriptor, desc_text)
       
       # check that we can still construct it without validation
-      desc = RelayDescriptorV3(desc_text, validate = False)
+      desc = RelayDescriptor(desc_text, validate = False)
       
       # for one of them checks that the corresponding values are None
       if attr == "router":
@@ -318,7 +318,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor(is_bridge = True)
-    desc = BridgeDescriptorV3(desc_text)
+    desc = BridgeDescriptor(desc_text)
     
     self.assertEquals("Unnamed", desc.nickname)
     self.assertEquals("10.45.227.253", desc.address)
@@ -347,7 +347,7 @@ class TestServerDescriptor(unittest.TestCase):
     
     for attr in unsanitized_attr:
       desc_text = _make_descriptor(attr, is_bridge = True)
-      desc = BridgeDescriptorV3(desc_text)
+      desc = BridgeDescriptor(desc_text)
       self.assertFalse(desc.is_scrubbed())
   
   def test_bridge_unsanitized_relay(self):
@@ -357,7 +357,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor()
-    desc = BridgeDescriptorV3(desc_text)
+    desc = BridgeDescriptor(desc_text)
     self.assertFalse(desc.is_scrubbed())
   
   def test_or_address_v4(self):
@@ -366,7 +366,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor({"or-address": "10.45.227.253:9001"}, is_bridge = True)
-    desc = BridgeDescriptorV3(desc_text)
+    desc = BridgeDescriptor(desc_text)
     self.assertEquals([("10.45.227.253", 9001, False)], desc.address_alt)
   
   def test_or_address_v6(self):
@@ -375,7 +375,7 @@ class TestServerDescriptor(unittest.TestCase):
     """
     
     desc_text = _make_descriptor({"or-address": "[fd9f:2e19:3bcf::02:9970]:9001"}, is_bridge = True)
-    desc = BridgeDescriptorV3(desc_text)
+    desc = BridgeDescriptor(desc_text)
     self.assertEquals([("fd9f:2e19:3bcf::02:9970", 9001, True)], desc.address_alt)
   
   def test_or_address_multiple(self):
@@ -394,7 +394,7 @@ class TestServerDescriptor(unittest.TestCase):
       ("fd9f:2e19:3bcf::02:9970", 443, True),
     ]
     
-    desc = BridgeDescriptorV3(desc_text)
+    desc = BridgeDescriptor(desc_text)
     self.assertEquals(expected_address_alt, desc.address_alt)
   
   def _expect_invalid_attr(self, desc_text, attr = None, expected_value = None):
@@ -404,8 +404,8 @@ class TestServerDescriptor(unittest.TestCase):
     value when we're constructed without validation.
     """
     
-    self.assertRaises(ValueError, RelayDescriptorV3, desc_text)
-    desc = RelayDescriptorV3(desc_text, validate = False)
+    self.assertRaises(ValueError, RelayDescriptor, desc_text)
+    desc = RelayDescriptor(desc_text, validate = False)
     
     if attr:
       # check that the invalid attribute matches the expected value when





More information about the tor-commits mailing list