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

commit 153a98eca741d3185e7d20c5e3566763a54384bd Author: Damian Johnson <atagar@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): """
participants (1)
-
atagar@torproject.org