[tor-commits] [stem/master] Unit tests for minimal v2 and microdescriptor v3 router status entries

atagar at torproject.org atagar at torproject.org
Sat Oct 13 18:35:45 UTC 2012


commit a1d2a0ffffd5aeec96c37fbbf1b4134c9b34b631
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun Oct 7 18:18:14 2012 -0700

    Unit tests for minimal v2 and microdescriptor v3 router status entries
    
    Tests to exercise basic parsing for the v2 and microdescriptor v3
    RouterStatusEntry subclasses. They're both largely a subset of the v3
    RouterStatusEntry so I don't plan to add additional tests for the moment.
---
 stem/descriptor/router_status_entry.py      |    2 +-
 test/mocking.py                             |   74 ++++++++++++++++++++++++---
 test/unit/descriptor/router_status_entry.py |   47 ++++++++++++++++-
 3 files changed, 111 insertions(+), 12 deletions(-)

diff --git a/stem/descriptor/router_status_entry.py b/stem/descriptor/router_status_entry.py
index 50f0825..f663f07 100644
--- a/stem/descriptor/router_status_entry.py
+++ b/stem/descriptor/router_status_entry.py
@@ -285,7 +285,7 @@ class RouterStatusEntryMicroV3(RouterStatusEntry):
     
     self.digest = None
     
-    super(RouterStatusEntryMicroV3, self).__init__(content)
+    super(RouterStatusEntryMicroV3, self).__init__(content, validate, document)
   
   def _parse(self, entries, validate):
     for keyword, values in entries.items():
diff --git a/test/mocking.py b/test/mocking.py
index 808cb8d..7c848ad 100644
--- a/test/mocking.py
+++ b/test/mocking.py
@@ -23,14 +23,24 @@ calling :func:`test.mocking.revert_mocking`.
   Instance Constructors
     get_message                     - stem.socket.ControlMessage
     get_protocolinfo_response       - stem.response.protocolinfo.ProtocolInfoResponse
-    get_relay_server_descriptor     - stem.descriptor.server_descriptor.RelayDescriptor
-    get_bridge_server_descriptor    - stem.descriptor.server_descriptor.BridgeDescriptor
-    get_relay_extrainfo_descriptor  - stem.descriptor.extrainfo_descriptor.RelayExtraInfoDescriptor
-    get_bridge_extrainfo_descriptor - stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor
-    get_router_status_entry_v3      - stem.descriptor.router_status_entry.RouterStatusEntryV3
-    get_directory_authority         - stem.descriptor.networkstatus.DirectoryAuthority
-    get_key_certificate             - stem.descriptor.networkstatus.KeyCertificate
-    get_network_status_document     - stem.descriptor.networkstatus.NetworkStatusDocument
+    
+    stem.descriptor.server_descriptor
+      get_relay_server_descriptor  - RelayDescriptor
+      get_bridge_server_descriptor - BridgeDescriptor
+    
+    stem.descriptor.extrainfo_descriptor
+      get_relay_extrainfo_descriptor  - RelayExtraInfoDescriptor
+      get_bridge_extrainfo_descriptor - BridgeExtraInfoDescriptor
+    
+    stem.descriptor.networkstatus
+      get_directory_authority     - DirectoryAuthority
+      get_key_certificate         - KeyCertificate
+      get_network_status_document - NetworkStatusDocument
+    
+    stem.descriptor.router_status_entry
+      get_router_status_entry_v2       - RouterStatusEntryV2
+      get_router_status_entry_v3       - RouterStatusEntryV3
+      get_router_status_entry_micro_v3 - RouterStatusEntryMicroV3
 """
 
 import inspect
@@ -107,11 +117,21 @@ BRIDGE_EXTRAINFO_FOOTER = (
   ("router-digest", "006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4"),
 )
 
+ROUTER_STATUS_ENTRY_V2_HEADER = (
+  ("r", "caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0"),
+)
+
 ROUTER_STATUS_ENTRY_V3_HEADER = (
   ("r", "caerSidi p1aag7VwarGxqctS7/fS0y5FU+s oQZFLYe9e4A7bOkWKR7TaNxb0JE 2012-08-06 11:19:31 71.35.150.29 9001 0"),
   ("s", "Fast Named Running Stable Valid"),
 )
 
+ROUTER_STATUS_ENTRY_MICRO_V3_HEADER = (
+  ("r", "Konata ARIJF2zbqirB9IwsW0mQznccWww 2012-09-24 13:40:40 69.64.48.168 9001 9030"),
+  ("m", "aiUklwBrua82obG5AsTX+iEpkjQA2+AQHxZ7GwMfY70"),
+  ("s", "Fast Guard HSDir Named Running Stable V2Dir Valid"),
+)
+
 AUTHORITY_HEADER = (
   ("dir-source", "turtles 27B6B5996C426270A5C95488AA5BCEB6BCC86956 no.place.com 76.73.17.194 9030 9090"),
   ("contact", "Mike Perry <email>"),
@@ -523,6 +543,25 @@ def get_bridge_extrainfo_descriptor(attr = None, exclude = (), content = False):
   else:
     return stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor(desc_content, validate = True)
 
+def get_router_status_entry_v2(attr = None, exclude = (), content = False):
+  """
+  Provides the descriptor content for...
+  stem.descriptor.router_status_entry.RouterStatusEntryV2
+  
+  :param dict attr: keyword/value mappings to be included in the descriptor
+  :param list exclude: mandatory keywords to exclude from the descriptor
+  :param bool content: provides the str content of the descriptor rather than the class if True
+  
+  :returns: RouterStatusEntryV2 for the requested descriptor content
+  """
+  
+  desc_content = _get_descriptor_content(attr, exclude, ROUTER_STATUS_ENTRY_V2_HEADER)
+  
+  if content:
+    return desc_content
+  else:
+    return stem.descriptor.router_status_entry.RouterStatusEntryV2(desc_content, validate = True)
+
 def get_router_status_entry_v3(attr = None, exclude = (), content = False):
   """
   Provides the descriptor content for...
@@ -542,6 +581,25 @@ def get_router_status_entry_v3(attr = None, exclude = (), content = False):
   else:
     return stem.descriptor.router_status_entry.RouterStatusEntryV3(desc_content, validate = True)
 
+def get_router_status_entry_micro_v3(attr = None, exclude = (), content = False):
+  """
+  Provides the descriptor content for...
+  stem.descriptor.router_status_entry.RouterStatusEntryMicroV3
+  
+  :param dict attr: keyword/value mappings to be included in the descriptor
+  :param list exclude: mandatory keywords to exclude from the descriptor
+  :param bool content: provides the str content of the descriptor rather than the class if True
+  
+  :returns: RouterStatusEntryMicroV3 for the requested descriptor content
+  """
+  
+  desc_content = _get_descriptor_content(attr, exclude, ROUTER_STATUS_ENTRY_MICRO_V3_HEADER)
+  
+  if content:
+    return desc_content
+  else:
+    return stem.descriptor.router_status_entry.RouterStatusEntryMicroV3(desc_content, validate = True)
+
 def get_directory_authority(attr = None, exclude = (), is_vote = False, content = False):
   """
   Provides the descriptor content for...
diff --git a/test/unit/descriptor/router_status_entry.py b/test/unit/descriptor/router_status_entry.py
index 6816656..d971906 100644
--- a/test/unit/descriptor/router_status_entry.py
+++ b/test/unit/descriptor/router_status_entry.py
@@ -9,7 +9,7 @@ from stem.descriptor import Flag
 from stem.descriptor.router_status_entry import RouterStatusEntryV3, _decode_fingerprint
 from stem.version import Version
 from stem.exit_policy import MicrodescriptorExitPolicy
-from test.mocking import get_router_status_entry_v3, ROUTER_STATUS_ENTRY_V3_HEADER
+from test.mocking import get_router_status_entry_v2, get_router_status_entry_v3, get_router_status_entry_micro_v3, ROUTER_STATUS_ENTRY_V3_HEADER
 
 class TestRouterStatusEntry(unittest.TestCase):
   def test_fingerprint_decoding(self):
@@ -35,9 +35,29 @@ class TestRouterStatusEntry(unittest.TestCase):
       self.assertRaises(ValueError, _decode_fingerprint, arg, True)
       self.assertEqual(None, _decode_fingerprint(arg, False))
   
-  def test_minimal(self):
+  def test_minimal_v2(self):
     """
-    Parses a minimal router status entry.
+    Parses a minimal v2 router status entry.
+    """
+    
+    entry = get_router_status_entry_v2()
+    
+    self.assertEqual(None, entry.document)
+    self.assertEqual("caerSidi", entry.nickname)
+    self.assertEqual("A7569A83B5706AB1B1A9CB52EFF7D2D32E4553EB", entry.fingerprint)
+    self.assertEqual("oQZFLYe9e4A7bOkWKR7TaNxb0JE", entry.digest)
+    self.assertEqual(datetime.datetime(2012, 8, 6, 11, 19, 31), entry.published)
+    self.assertEqual("71.35.150.29", entry.address)
+    self.assertEqual(9001, entry.or_port)
+    self.assertEqual(None, entry.dir_port)
+    self.assertEqual(None, entry.flags)
+    self.assertEqual(None, entry.version_line)
+    self.assertEqual(None, entry.version)
+    self.assertEqual([], entry.get_unrecognized_lines())
+  
+  def test_minimal_v3(self):
+    """
+    Parses a minimal v3 router status entry.
     """
     
     entry = get_router_status_entry_v3()
@@ -61,6 +81,27 @@ class TestRouterStatusEntry(unittest.TestCase):
     self.assertEqual(None, entry.microdescriptor_hashes)
     self.assertEqual([], entry.get_unrecognized_lines())
   
+  def test_minimal_micro_v3(self):
+    """
+    Parses a minimal microdescriptor v3 router status entry.
+    """
+    
+    entry = get_router_status_entry_micro_v3()
+    
+    expected_flags = set([Flag.FAST, Flag.GUARD, Flag.HSDIR, Flag.NAMED, Flag.RUNNING, Flag.STABLE, Flag.V2DIR, Flag.VALID])
+    self.assertEqual(None, entry.document)
+    self.assertEqual("Konata", entry.nickname)
+    self.assertEqual("011209176CDBAA2AC1F48C2C5B4990CE771C5B0C", entry.fingerprint)
+    self.assertEqual(datetime.datetime(2012, 9, 24, 13, 40, 40), entry.published)
+    self.assertEqual("69.64.48.168", entry.address)
+    self.assertEqual(9001, entry.or_port)
+    self.assertEqual(9030, entry.dir_port)
+    self.assertEqual(expected_flags, set(entry.flags))
+    self.assertEqual(None, entry.version_line)
+    self.assertEqual(None, entry.version)
+    self.assertEqual("aiUklwBrua82obG5AsTX+iEpkjQA2+AQHxZ7GwMfY70", entry.digest)
+    self.assertEqual([], entry.get_unrecognized_lines())
+  
   def test_missing_fields(self):
     """
     Parses a router status entry that's missing fields.





More information about the tor-commits mailing list