[tor-commits] [stem/master] Handling empty read/write-history value listings

atagar at torproject.org atagar at torproject.org
Sun Apr 15 02:50:21 UTC 2012


commit 707897bea765b3d403dea9eaf4a3a0788a455bd0
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Apr 14 17:23:03 2012 -0700

    Handling empty read/write-history value listings
    
    Bug where relay server descriptors with read/write-history lines but no values
    on them would fail validation. Added a unit test for this and fixed the bug.
---
 stem/descriptor/server_descriptor.py      |   17 +++++++++--------
 test/unit/descriptor/server_descriptor.py |   13 +++++++++++++
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/stem/descriptor/server_descriptor.py b/stem/descriptor/server_descriptor.py
index 6892381..780e7b5 100644
--- a/stem/descriptor/server_descriptor.py
+++ b/stem/descriptor/server_descriptor.py
@@ -522,14 +522,15 @@ class ServerDescriptorV3(stem.descriptor.Descriptor):
         elif validate:
           raise ValueError("%s line's interval wasn't a number: %s" % (keyword, line))
         
-        for sampling in history_values.split(","):
-          if sampling.isdigit():
-            if is_read: self.read_history_values.append(int(sampling))
-            else: self.write_history_values.append(int(sampling))
-          else:
-            if validate:
-              raise ValueError("%s line has non-numeric values: %s" % (keyword, line))
-            else: break
+        if history_values != '':
+          for sampling in history_values.split(","):
+            if sampling.isdigit():
+              if is_read: self.read_history_values.append(int(sampling))
+              else: self.write_history_values.append(int(sampling))
+            else:
+              if validate:
+                raise ValueError("%s line has non-numeric values: %s" % (keyword, line))
+              else: break
       else:
         self._unrecognized_lines.append(line)
   
diff --git a/test/unit/descriptor/server_descriptor.py b/test/unit/descriptor/server_descriptor.py
index 5c4cfce..d170e96 100644
--- a/test/unit/descriptor/server_descriptor.py
+++ b/test/unit/descriptor/server_descriptor.py
@@ -249,6 +249,19 @@ class TestServerDescriptor(unittest.TestCase):
       self.assertEquals(900, attr[2])
       self.assertEquals(expected_values, attr[3])
   
+  def test_read_history_empty(self):
+    """
+    Parses a read-history with an empty value.
+    """
+    
+    value = "2005-12-17 01:23:11 (900 s) "
+    desc_text = _make_descriptor({"opt read-history": value})
+    desc = RelayDescriptorV3(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)
+    self.assertEquals([], desc.read_history_values)
+  
   def test_annotations(self):
     """
     Checks that content before a descriptor are parsed as annotations.





More information about the tor-commits mailing list