[tor-commits] [stem/master] Boilerplate KeyCertificate unit tests

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


commit 92b691c5e9ace6803a5ed24d42e7ec41665595c8
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Sep 29 10:19:16 2012 -0700

    Boilerplate KeyCertificate unit tests
    
    General unit tests that I've been including with most descriptor types. I
    should probably include these in a more systematic fasion...
---
 stem/descriptor/networkstatus.py                   |    4 +-
 .../descriptor/networkstatus/key_certificate.py    |   52 +++++++++++++++++++-
 2 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py
index 01fb2f3..ad74442 100644
--- a/stem/descriptor/networkstatus.py
+++ b/stem/descriptor/networkstatus.py
@@ -877,9 +877,11 @@ class KeyCertificate(stem.descriptor.Descriptor):
             raise ValueError("Key certificate's address isn't a valid IPv4 address: %s" % line)
           elif not stem.util.connection.is_valid_port(dirport):
             raise ValueError("Key certificate's dirport is invalid: %s" % line)
+        elif not dirport.isdigit():
+          continue
         
         self.address = address
-        self.dir_port = dirport
+        self.dir_port = int(dirport)
       elif keyword == 'fingerprint':
         # "fingerprint" fingerprint
         
diff --git a/test/unit/descriptor/networkstatus/key_certificate.py b/test/unit/descriptor/networkstatus/key_certificate.py
index 703b61d..e3f62e0 100644
--- a/test/unit/descriptor/networkstatus/key_certificate.py
+++ b/test/unit/descriptor/networkstatus/key_certificate.py
@@ -6,7 +6,7 @@ import datetime
 import unittest
 
 from stem.descriptor.networkstatus import KeyCertificate
-from test.mocking import get_key_certificate, CRYPTO_BLOB
+from test.mocking import get_key_certificate, CRYPTO_BLOB, KEY_CERTIFICATE_HEADER, KEY_CERTIFICATE_FOOTER
 
 class TestKeyCertificate(unittest.TestCase):
   def test_minimal(self):
@@ -27,4 +27,54 @@ class TestKeyCertificate(unittest.TestCase):
     self.assertEqual(None, certificate.crosscert)
     self.assertTrue(CRYPTO_BLOB in certificate.certification)
     self.assertEqual([], certificate.get_unrecognized_lines())
+  
+  def test_unrecognized_line(self):
+    """
+    Includes unrecognized content in the descriptor.
+    """
+    
+    certificate = get_key_certificate({"pepperjack": "is oh so tasty!"})
+    self.assertEquals(["pepperjack is oh so tasty!"], certificate.get_unrecognized_lines())
+  
+  def test_first_and_last_lines(self):
+    """
+    Includes a non-mandatory field before the 'dir-key-certificate-version'
+    line or after the 'dir-key-certification' line.
+    """
+    
+    content = get_key_certificate(content = True)
+    
+    for cert_text in ("dir-address 127.0.0.1:80\n" + content,
+                      content + "\ndir-address 127.0.0.1:80"):
+      self.assertRaises(ValueError, KeyCertificate, cert_text)
+      
+      certificate = KeyCertificate(cert_text, False)
+      self.assertEqual("127.0.0.1", certificate.address)
+      self.assertEqual(80, certificate.dir_port)
+  
+  def test_missing_fields(self):
+    """
+    Parse a key certificate where a mandatory field is missing.
+    """
+    
+    mandatory_fields = [entry[0] for entry in KEY_CERTIFICATE_HEADER + KEY_CERTIFICATE_FOOTER]
+    
+    for excluded_field in mandatory_fields:
+      content = get_key_certificate(exclude = (excluded_field,), content = True)
+      self.assertRaises(ValueError, KeyCertificate, content)
+      
+      certificate = KeyCertificate(content, False)
+      
+      if excluded_field == "fingerprint":
+        self.assertEqual(3, certificate.version)
+      else:
+        self.assertEqual("27B6B5996C426270A5C95488AA5BCEB6BCC86956", certificate.fingerprint)
+  
+  def test_blank_lines(self):
+    """
+    Includes blank lines, which should be ignored.
+    """
+    
+    certificate = get_key_certificate({"dir-key-published": "2011-11-28 21:51:04\n\n\n"})
+    self.assertEqual(datetime.datetime(2011, 11, 28, 21, 51, 4), certificate.published)
 





More information about the tor-commits mailing list