[tor-commits] [stem/master] Support for geoip6-db-digest extrainfo desc lines
atagar at torproject.org
atagar at torproject.org
Fri Dec 7 17:14:39 UTC 2012
commit bd6e5cea6525f76b95966b023a1c1fa88065adc3
Author: Damian Johnson <atagar at torproject.org>
Date: Fri Dec 7 08:48:12 2012 -0800
Support for geoip6-db-digest extrainfo desc lines
Adding parsing support for the newish 'geoip6-db-digest' lines in extra-info
descriptors. Lacking this support has been breaking our integ tests for a
while, so I was able to exercise this both with the unit test addition and an
actual consensus.
Bug: https://trac.torproject.org/7354
Spec addition: https://gitweb.torproject.org/torspec.git/commitdiff/9a518d9
Metrics-lib addition: https://gitweb.torproject.org/metrics-lib.git/commitdiff/43b9390
---
stem/descriptor/extrainfo_descriptor.py | 12 +++++++++++-
test/unit/descriptor/extrainfo_descriptor.py | 9 ++++++++-
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/stem/descriptor/extrainfo_descriptor.py b/stem/descriptor/extrainfo_descriptor.py
index 1ad5d46..582c409 100644
--- a/stem/descriptor/extrainfo_descriptor.py
+++ b/stem/descriptor/extrainfo_descriptor.py
@@ -101,6 +101,7 @@ SINGLE_FIELDS = (
"read-history",
"write-history",
"geoip-db-digest",
+ "geoip6-db-digest",
"bridge-stats-end",
"bridge-ips",
"dirreq-stats-end",
@@ -197,7 +198,8 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
:var str nickname: **\*** relay's nickname
:var str fingerprint: **\*** identity key fingerprint
:var datetime published: **\*** time in UTC when this descriptor was made
- :var str geoip_db_digest: sha1 of geoIP database file
+ :var str geoip_db_digest: sha1 of the geoIP database file for IPv4 addresses
+ :var str geoip6_db_digest: sha1 of the geoIP database file for IPv6 addresses
:var dict transport: **\*** mapping of transport methods to their (address,
port, args) tuple, these usually appear on bridges in which case all of
those are **None**
@@ -311,6 +313,7 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
self.fingerprint = None
self.published = None
self.geoip_db_digest = None
+ self.geoip6_db_digest = None
self.transport = {}
self.conn_bi_direct_end = None
@@ -445,6 +448,13 @@ class ExtraInfoDescriptor(stem.descriptor.Descriptor):
raise ValueError("Geoip digest line had an invalid sha1 digest: %s" % line)
self.geoip_db_digest = value
+ elif keyword == "geoip6-db-digest":
+ # "geoip6-db-digest" Digest
+
+ if validate and not stem.util.tor_tools.is_hex_digits(value, 40):
+ raise ValueError("Geoip v6 digest line had an invalid sha1 digest: %s" % line)
+
+ self.geoip6_db_digest = value
elif keyword == "transport":
# "transport" transportname address:port [arglist]
# Everything after the transportname is scrubbed in published bridge
diff --git a/test/unit/descriptor/extrainfo_descriptor.py b/test/unit/descriptor/extrainfo_descriptor.py
index 011a0e5..dc64032 100644
--- a/test/unit/descriptor/extrainfo_descriptor.py
+++ b/test/unit/descriptor/extrainfo_descriptor.py
@@ -66,13 +66,17 @@ class TestExtraInfoDescriptor(unittest.TestCase):
def test_geoip_db_digest(self):
"""
- Parses the geoip-db-digest line with valid and invalid data.
+ Parses the geoip-db-digest and geoip6-db-digest lines with valid and
+ invalid data.
"""
geoip_db_digest = "916A3CA8B7DF61473D5AE5B21711F35F301CE9E8"
desc = get_relay_extrainfo_descriptor({"geoip-db-digest": geoip_db_digest})
self.assertEquals(geoip_db_digest, desc.geoip_db_digest)
+ desc = get_relay_extrainfo_descriptor({"geoip6-db-digest": geoip_db_digest})
+ self.assertEquals(geoip_db_digest, desc.geoip6_db_digest)
+
test_entries = (
"",
"916A3CA8B7DF61473D5AE5B21711F35F301CE9E",
@@ -84,6 +88,9 @@ class TestExtraInfoDescriptor(unittest.TestCase):
for entry in test_entries:
desc_text = get_relay_extrainfo_descriptor({"geoip-db-digest": entry}, content = True)
self._expect_invalid_attr(desc_text, "geoip_db_digest", entry)
+
+ desc_text = get_relay_extrainfo_descriptor({"geoip6-db-digest": entry}, content = True)
+ self._expect_invalid_attr(desc_text, "geoip6_db_digest", entry)
def test_cell_circuits_per_decile(self):
"""
More information about the tor-commits
mailing list