commit 707897bea765b3d403dea9eaf4a3a0788a455bd0 Author: Damian Johnson atagar@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.
tor-commits@lists.torproject.org