[tor-commits] [stem/master] BridgeExtraInfoDescriptor creation

atagar at torproject.org atagar at torproject.org
Tue May 2 19:57:29 UTC 2017


commit ceeec7989007371508b024d779fc12fd62a68bd6
Author: Damian Johnson <atagar at torproject.org>
Date:   Mon May 1 11:11:18 2017 -0700

    BridgeExtraInfoDescriptor creation
---
 stem/descriptor/extrainfo_descriptor.py      | 13 +++++++++++
 test/mocking.py                              | 32 ----------------------------
 test/unit/descriptor/extrainfo_descriptor.py | 27 +++++++++++++----------
 3 files changed, 29 insertions(+), 43 deletions(-)

diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 7a2e7b1..848ba3e 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -166,6 +166,15 @@ RELAY_EXTRAINFO_FOOTER = (
   ('router-signature', '\n-----BEGIN SIGNATURE-----%s-----END SIGNATURE-----' % CRYPTO_BLOB),
 )
 
+BRIDGE_EXTRAINFO_HEADER = (
+  ('extra-info', 'ec2bridgereaac65a3 1EC248422B57D9C0BD751892FE787585407479A4'),
+  ('published', '2012-05-05 17:03:50'),
+)
+
+BRIDGE_EXTRAINFO_FOOTER = (
+  ('router-digest', '006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4'),
+)
+
 
 _timestamp_re = re.compile('^(.*) \(([0-9]+) s\)( .*)?$')
 _locale_re = re.compile('^[a-zA-Z0-9\?]{2}$')
@@ -961,6 +970,10 @@ class BridgeExtraInfoDescriptor(ExtraInfoDescriptor):
     'router-digest': _parse_router_digest_line,
   })
 
+  @classmethod
+  def content(cls, attr = None, exclude = ()):
+    return _descriptor_content(attr, exclude, BRIDGE_EXTRAINFO_HEADER, BRIDGE_EXTRAINFO_FOOTER)
+
   def digest(self):
     return self._digest
 
diff --git a/test/mocking.py b/test/mocking.py
index dc08a61..ce9a458 100644
--- a/test/mocking.py
+++ b/test/mocking.py
@@ -16,9 +16,6 @@ Helper functions for creating mock objects.
     stem.descriptor.microdescriptor
       get_microdescriptor - Microdescriptor
 
-    stem.descriptor.extrainfo_descriptor
-      get_bridge_extrainfo_descriptor - BridgeExtraInfoDescriptor
-
     stem.descriptor.networkstatus
       get_directory_authority        - DirectoryAuthority
       get_key_certificate            - KeyCertificate
@@ -75,15 +72,6 @@ DOC_SIG = stem.descriptor.networkstatus.DocumentSignature(
   'BF112F1C6D5543CFD0A32215ACABD4197B5279AD',
   '-----BEGIN SIGNATURE-----%s-----END SIGNATURE-----' % CRYPTO_BLOB)
 
-BRIDGE_EXTRAINFO_HEADER = (
-  ('extra-info', 'ec2bridgereaac65a3 1EC248422B57D9C0BD751892FE787585407479A4'),
-  ('published', '2012-05-05 17:03:50'),
-)
-
-BRIDGE_EXTRAINFO_FOOTER = (
-  ('router-digest', '006FD96BA35E7785A6A3B8B75FE2E2435A13BDB4'),
-)
-
 MICRODESCRIPTOR = (
   ('onion-key', '\n-----BEGIN RSA PUBLIC KEY-----%s-----END RSA PUBLIC KEY-----' % CRYPTO_BLOB),
 )
@@ -331,26 +319,6 @@ def _get_descriptor_content(attr = None, exclude = (), header_template = (), foo
   return stem.util.str_tools._to_bytes('\n'.join(header_content + remainder + footer_content))
 
 
-def get_bridge_extrainfo_descriptor(attr = None, exclude = (), content = False):
-  """
-  Provides the descriptor content for...
-  stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor
-
-  :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: BridgeExtraInfoDescriptor for the requested descriptor content
-  """
-
-  desc_content = _get_descriptor_content(attr, exclude, BRIDGE_EXTRAINFO_HEADER, BRIDGE_EXTRAINFO_FOOTER)
-
-  if content:
-    return desc_content
-  else:
-    return stem.descriptor.extrainfo_descriptor.BridgeExtraInfoDescriptor(desc_content, validate = True)
-
-
 def get_microdescriptor(attr = None, exclude = (), content = False):
   """
   Provides the descriptor content for...
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index 61f5ee7..2269000 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -8,9 +8,14 @@ import unittest
 
 import stem.descriptor
 
-from stem.descriptor.extrainfo_descriptor import RelayExtraInfoDescriptor, DirResponse, DirStat
+from stem.descriptor.extrainfo_descriptor import (
+  RelayExtraInfoDescriptor,
+  BridgeExtraInfoDescriptor,
+  DirResponse,
+  DirStat,
+)
 
-from test.mocking import get_bridge_extrainfo_descriptor, CRYPTO_BLOB
+from test.mocking import CRYPTO_BLOB
 
 from test.unit.descriptor import get_resource
 
@@ -677,7 +682,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
     Basic sanity check that we can parse a descriptor with minimal attributes.
     """
 
-    desc = get_bridge_extrainfo_descriptor()
+    desc = BridgeExtraInfoDescriptor.create()
 
     self.assertEqual('ec2bridgereaac65a3', desc.nickname)
     self.assertEqual('1EC248422B57D9C0BD751892FE787585407479A4', desc.fingerprint)
@@ -692,13 +697,13 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
     Parses the 'bridge-ip-versions' line, which only appears in bridges.
     """
 
-    desc = get_bridge_extrainfo_descriptor({'bridge-ip-versions': 'v4=16,v6=40'})
+    desc = BridgeExtraInfoDescriptor.create({'bridge-ip-versions': 'v4=16,v6=40'})
     self.assertEqual({'v4': 16, 'v6': 40}, desc.ip_versions)
 
-    desc = get_bridge_extrainfo_descriptor({'bridge-ip-versions': ''})
+    desc = BridgeExtraInfoDescriptor.create({'bridge-ip-versions': ''})
     self.assertEqual({}, desc.ip_versions)
 
-    desc_text = get_bridge_extrainfo_descriptor({'bridge-ip-versions': 'v4=24.5'}, content = True)
+    desc_text = BridgeExtraInfoDescriptor.content({'bridge-ip-versions': 'v4=24.5'})
     self.assertRaises(ValueError, RelayExtraInfoDescriptor, desc_text, True)
 
   def test_bridge_ip_transports_line(self):
@@ -706,13 +711,13 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
     Parses the 'bridge-ip-transports' line, which only appears in bridges.
     """
 
-    desc = get_bridge_extrainfo_descriptor({'bridge-ip-transports': '<OR>=16,<??>=40'})
+    desc = BridgeExtraInfoDescriptor.create({'bridge-ip-transports': '<OR>=16,<??>=40'})
     self.assertEqual({'<OR>': 16, '<??>': 40}, desc.ip_transports)
 
-    desc = get_bridge_extrainfo_descriptor({'bridge-ip-transports': ''})
+    desc = BridgeExtraInfoDescriptor.create({'bridge-ip-transports': ''})
     self.assertEqual({}, desc.ip_transports)
 
-    desc_text = get_bridge_extrainfo_descriptor({'bridge-ip-transports': '<OR>=24.5'}, content = True)
+    desc_text = BridgeExtraInfoDescriptor.content({'bridge-ip-transports': '<OR>=24.5'})
     self.assertRaises(ValueError, RelayExtraInfoDescriptor, desc_text, True)
 
   def test_transport_line(self):
@@ -720,7 +725,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
     Basic exercise for both a bridge and relay's transport entry.
     """
 
-    desc = get_bridge_extrainfo_descriptor({'transport': 'obfs3'})
+    desc = BridgeExtraInfoDescriptor.create({'transport': 'obfs3'})
     self.assertEqual({'obfs3': (None, None, None)}, desc.transport)
     self.assertEqual([], desc.get_unrecognized_lines())
 
@@ -729,7 +734,7 @@ k0d2aofcVbHr4fPQOSST0LXDrhFl5Fqo5um296zpJGvRUeO6S44U/EfJAGShtqWw
     self.assertEqual([], desc.get_unrecognized_lines())
 
     # multiple transport lines
-    desc = get_bridge_extrainfo_descriptor({'transport': 'obfs3\ntransport obfs4'})
+    desc = BridgeExtraInfoDescriptor.create({'transport': 'obfs3\ntransport obfs4'})
     self.assertEqual({'obfs3': (None, None, None), 'obfs4': (None, None, None)}, desc.transport)
     self.assertEqual([], desc.get_unrecognized_lines())
 





More information about the tor-commits mailing list