commit 347d4c03a63b8a3f81bee83ee990e5ea4ada9125 Author: Damian Johnson atagar@torproject.org Date: Fri Oct 5 08:53:17 2012 -0700
Boilerplate descriptor tests for DirectoryAuthority
Copying a few general tests from the other descriptors. I should move these into a descriptor test superclass so I don't need to keep copying them. That said, there are some minor tweaking that might prevent that... --- stem/descriptor/networkstatus.py | 2 +- .../networkstatus/directory_authority.py | 61 +++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/stem/descriptor/networkstatus.py b/stem/descriptor/networkstatus.py index fa02e44..039c90c 100644 --- a/stem/descriptor/networkstatus.py +++ b/stem/descriptor/networkstatus.py @@ -684,7 +684,7 @@ class DirectoryAuthority(stem.descriptor.Descriptor): ***** mandatory attribute """
- def __init__(self, raw_content, validate, is_vote = True): + def __init__(self, raw_content, validate = True, is_vote = False): """ Parse a directory authority entry in a v3 network status document.
diff --git a/test/unit/descriptor/networkstatus/directory_authority.py b/test/unit/descriptor/networkstatus/directory_authority.py index dd4c5fa..cf16506 100644 --- a/test/unit/descriptor/networkstatus/directory_authority.py +++ b/test/unit/descriptor/networkstatus/directory_authority.py @@ -4,7 +4,8 @@ Unit tests for the DirectoryAuthority of stem.descriptor.networkstatus.
import unittest
-from test.mocking import get_directory_authority, get_key_certificate +from stem.descriptor.networkstatus import DirectoryAuthority +from test.mocking import get_directory_authority, get_key_certificate, AUTHORITY_HEADER
class TestDirectoryAuthority(unittest.TestCase): def test_minimal_consensus_authority(self): @@ -44,4 +45,62 @@ class TestDirectoryAuthority(unittest.TestCase): self.assertEqual(None, authority.legacy_dir_key) self.assertEqual(get_key_certificate(), authority.key_certificate) self.assertEqual([], authority.get_unrecognized_lines()) + + def test_unrecognized_line(self): + """ + Includes unrecognized content in the descriptor. + """ + + authority = get_directory_authority({"pepperjack": "is oh so tasty!"}) + self.assertEquals(["pepperjack is oh so tasty!"], authority.get_unrecognized_lines()) + + def test_first_line(self): + """ + Includes a non-mandatory field before the 'dir-source' line. + """ + + content = "ho-hum 567\n" + get_directory_authority(content = True) + self.assertRaises(ValueError, DirectoryAuthority, content) + + authority = DirectoryAuthority(content, False) + self.assertEqual("turtles", authority.nickname) + self.assertEqual(["ho-hum 567"], authority.get_unrecognized_lines()) + + def test_missing_fields(self): + """ + Parse an authority where a mandatory field is missing. + """ + + for excluded_field in ("dir-source", "contact"): + content = get_directory_authority(exclude = (excluded_field,), content = True) + self.assertRaises(ValueError, DirectoryAuthority, content) + + authority = DirectoryAuthority(content, False) + + if excluded_field == "dir-source": + self.assertEqual("Mike Perry <email>", authority.contact) + else: + self.assertEqual("turtles", authority.nickname) + + def test_blank_lines(self): + """ + Includes blank lines, which should be ignored. + """ + + authority = get_directory_authority({"dir-source": AUTHORITY_HEADER[0][1] + "\n\n\n"}) + self.assertEqual("Mike Perry <email>", authority.contact) + + def test_duplicate_lines(self): + """ + Duplicates linesin the entry. + """ + + lines = get_directory_authority(content = True).split("\n") + + for i in xrange(len(lines)): + content = "\n".join(lines[:i] + [lines[i]] + lines[i:]) + self.assertRaises(ValueError, DirectoryAuthority, content) + + authority = DirectoryAuthority(content, False) + self.assertEqual("turtles", authority.nickname)
tor-commits@lists.torproject.org