[tor-commits] [stem/master] Parsing 'cell-circuits-per-decile' extrainfo lines

atagar at torproject.org atagar at torproject.org
Mon May 14 00:14:27 UTC 2012


commit 153a98eca741d3185e7d20c5e3566763a54384bd
Author: Damian Johnson <atagar at torproject.org>
Date:   Sun May 13 15:06:29 2012 -0700

    Parsing 'cell-circuits-per-decile' extrainfo lines
    
    Handling the last of the 'cell-*' attributes.
---
 stem/descriptor/extrainfo_descriptor.py      |   17 +++++++++++++++
 test/unit/descriptor/extrainfo_descriptor.py |   28 +++++++++++++++++++++++++-
 2 files changed, 44 insertions(+), 1 deletions(-)

diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 7fa008e..a08d389 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -195,6 +195,7 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
       cell_processed_cells (list) - measurement of processed cells per circuit
       cell_queued_cells (list) - measurement of queued cells per circuit
       cell_time_in_queue (list) - mean enqueued time in milliseconds for cells
+      cell_circuits_per_decile (int) - mean number of circuits in a deciles
     
     Directory Mirror Attributes:
       dir_stats_end (datetime) - end of the period when stats were gathered
@@ -286,6 +287,7 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
     self.cell_processed_cells = None
     self.cell_queued_cells = None
     self.cell_time_in_queue = None
+    self.cell_circuits_per_decile = None
     
     self.dir_stats_end = None
     self.dir_stats_interval = None
@@ -393,6 +395,21 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
           raise ValueError("Geoip digest line had an invalid sha1 digest: %s" % line)
         
         self.geoip_db_digest = value
+      elif keyword == "cell-circuits-per-decile":
+        # "cell-circuits-per-decile" num
+        
+        if not value.isdigit():
+          if validate:
+            raise ValueError("Non-numeric cell-circuits-per-decile value: %s" % line)
+          else:
+            continue
+        
+        stat = int(value)
+        
+        if validate and stat < 0:
+          raise ValueError("Negative cell-circuits-per-decile value: %s" % line)
+        
+        self.cell_circuits_per_decile = stat
       elif keyword in ("dirreq-v2-resp", "dirreq-v3-resp", "dirreq-v2-direct-dl", "dirreq-v3-direct-dl", "dirreq-v2-tunneled-dl", "dirreq-v3-tunneled-dl"):
         recognized_counts = {}
         unrecognized_counts = {}
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index 00013c0..f856341 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -129,7 +129,33 @@ class TestExtraInfoDescriptor(unittest.TestCase):
     
     for entry in test_entries:
       desc_text = _make_descriptor({"geoip-db-digest": entry})
-      desc = self._expect_invalid_attr(desc_text, "geoip_db_digest", entry)
+      self._expect_invalid_attr(desc_text, "geoip_db_digest", entry)
+  
+  def test_cell_circuits_per_decile(self):
+    """
+    Parses the cell-circuits-per-decile line with valid and invalid data.
+    """
+    
+    test_entries = (
+      ("0", 0),
+      ("11", 11),
+    )
+    
+    for entry in ("0", "11", "25"):
+      desc_text = _make_descriptor({"cell-circuits-per-decile": entry})
+      desc = ExtraInfoDescriptor(desc_text)
+      self.assertEquals(int(entry), desc.cell_circuits_per_decile)
+    
+    test_entries = (
+      "",
+      " ",
+      "-5",
+      "blarg",
+    )
+    
+    for entry in test_entries:
+      desc_text = _make_descriptor({"cell-circuits-per-decile": entry})
+      self._expect_invalid_attr(desc_text, "cell_circuits_per_decile")
   
   def test_dir_response_lines(self):
     """





More information about the tor-commits mailing list