commit 7b396bdcebe7165df6ea6aaa911707e74974fa38 Author: Damian Johnson atagar@torproject.org Date: Sun May 26 18:14:15 2013 -0700
Dropping validation on bandwidth-weights contents
Our validation of network status documents included checking for the bandwidth-weights specified in the spec. This is because, according to the spec, they were all mandatory and new weights could not be added. Tor has loosened this restriction...
https://gitweb.torproject.org/torspec.git/commitdiff/ec3eaca https://trac.torproject.org/6872 --- stem/descriptor/networkstatus.py | 17 ----------- test/unit/descriptor/networkstatus/document_v3.py | 34 +++++---------------- 2 files changed, 8 insertions(+), 43 deletions(-)
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py index 1081b10..f65c7dc 100644 --- a/stem/descriptor/networkstatus.py +++ b/stem/descriptor/networkstatus.py @@ -137,14 +137,6 @@ KEY_CERTIFICATE_PARAMS = ( ('dir-key-certification', True), )
-BANDWIDTH_WEIGHT_ENTRIES = ( - "Wbd", "Wbe", "Wbg", "Wbm", - "Wdb", - "Web", "Wed", "Wee", "Weg", "Wem", - "Wgb", "Wgd", "Wgg", "Wgm", - "Wmb", "Wmd", "Wme", "Wmg", "Wmm", -) -
def _parse_file(document_file, document_type = None, validate = True, is_microdescriptor = False, document_handler = stem.descriptor.DocumentHandler.ENTRIES): """ @@ -837,15 +829,6 @@ class _DocumentFooter(object): raise ValueError("A network status document's 'directory-footer' line shouldn't have any content, got '%s'" % line) elif keyword == "bandwidth-weights": self.bandwidth_weights = _parse_int_mappings(keyword, value, validate) - - if validate: - weight_keys = tuple(sorted(self.bandwidth_weights.keys())) - - if weight_keys != BANDWIDTH_WEIGHT_ENTRIES: - expected_label = ', '.join(BANDWIDTH_WEIGHT_ENTRIES) - actual_label = ', '.join(weight_keys) - - raise ValueError("A network status document's 'bandwidth-weights' entries should be '%s', got '%s'" % (expected_label, actual_label)) elif keyword == "directory-signature": for sig_value, block_contents in values: if not sig_value.count(" ") in (1, 2) or not block_contents: diff --git a/test/unit/descriptor/networkstatus/document_v3.py b/test/unit/descriptor/networkstatus/document_v3.py index 4984e67..366b516 100644 --- a/test/unit/descriptor/networkstatus/document_v3.py +++ b/test/unit/descriptor/networkstatus/document_v3.py @@ -14,7 +14,6 @@ from stem import Flag from stem.descriptor.networkstatus import HEADER_STATUS_DOCUMENT_FIELDS, \ FOOTER_STATUS_DOCUMENT_FIELDS, \ DEFAULT_PARAMS, \ - BANDWIDTH_WEIGHT_ENTRIES, \ DirectoryAuthority, \ NetworkStatusDocumentV3, \ _parse_file @@ -31,6 +30,14 @@ from test.mocking import get_router_status_entry_v3, \ DOC_SIG, \ NETWORK_STATUS_DOCUMENT_FOOTER
+BANDWIDTH_WEIGHT_ENTRIES = ( + "Wbd", "Wbe", "Wbg", "Wbm", + "Wdb", + "Web", "Wed", "Wee", "Weg", "Wem", + "Wgb", "Wgd", "Wgg", "Wgm", + "Wmb", "Wmd", "Wme", "Wmg", "Wmm", +) +
class TestNetworkStatusDocument(unittest.TestCase): def test_minimal_consensus(self): @@ -720,31 +727,6 @@ class TestNetworkStatusDocument(unittest.TestCase): document = NetworkStatusDocumentV3(content, False) self.assertEquals(expected, document.bandwidth_weights)
- def test_bandwidth_wights_omissions(self): - """ - Leaves entries out of the 'bandwidth-wights' line. - """ - - # try parsing an empty value - - content = get_network_status_document_v3({"bandwidth-weights": ""}, content = True) - self.assertRaises(ValueError, NetworkStatusDocumentV3, content) - - document = NetworkStatusDocumentV3(content, False) - self.assertEquals({}, document.bandwidth_weights) - - # drop individual values - - for missing_entry in BANDWIDTH_WEIGHT_ENTRIES: - weight_entries = ["%s=5" % e for e in BANDWIDTH_WEIGHT_ENTRIES if e != missing_entry] - expected = dict([(e, 5) for e in BANDWIDTH_WEIGHT_ENTRIES if e != missing_entry]) - - content = get_network_status_document_v3({"bandwidth-weights": " ".join(weight_entries)}, content = True) - self.assertRaises(ValueError, NetworkStatusDocumentV3, content) - - document = NetworkStatusDocumentV3(content, False) - self.assertEquals(expected, document.bandwidth_weights) - def test_microdescriptor_signature(self): """ The 'directory-signature' lines both with and without a defined method for
tor-commits@lists.torproject.org