def test_malformed_fingerprint(self):
        """
    Includes a malformed fingerprint on the 'dir-source' line.
    """

        test_values = (
            "",
            "zzzzz",
            "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",
        )

        for value in test_values:
            dir_source = AUTHORITY_HEADER[0][1].replace(
                '27B6B5996C426270A5C95488AA5BCEB6BCC86956', value)
            content = get_directory_authority({"dir-source": dir_source},
                                              content=True)
            self.assertRaises(ValueError, DirectoryAuthority, content)

            authority = DirectoryAuthority(content, False)
            self.assertEqual(value, authority.fingerprint)
    def test_missing_dir_source_field(self):
        """
    Excludes fields from the 'dir-source' line.
    """

        for missing_value in AUTHORITY_HEADER[0][1].split(' '):
            dir_source = AUTHORITY_HEADER[0][1].replace(missing_value,
                                                        '').replace('  ', ' ')
            content = get_directory_authority({"dir-source": dir_source},
                                              content=True)
            self.assertRaises(ValueError, DirectoryAuthority, content)

            authority = DirectoryAuthority(content, False)

            self.assertEqual(None, authority.nickname)
            self.assertEqual(None, authority.fingerprint)
            self.assertEqual(None, authority.hostname)
            self.assertEqual(None, authority.address)
            self.assertEqual(None, authority.dir_port)
            self.assertEqual(None, authority.or_port)
Beispiel #3
0
  def test_legacy_authority(self):
    """
    Parses an authority using the '-legacy' format.
    """

    content = 'dir-source gabelmoo-legacy 81349FC1F2DBA2C2C11B45CB9706637D480AB913 131.188.40.189 131.188.40.189 80 443'
    authority = DirectoryAuthority(content, is_vote = False)

    self.assertEqual('gabelmoo-legacy', authority.nickname)
    self.assertEqual('81349FC1F2DBA2C2C11B45CB9706637D480AB913', authority.v3ident)
    self.assertEqual('131.188.40.189', authority.hostname)
    self.assertEqual('131.188.40.189', authority.address)
    self.assertEqual(80, authority.dir_port)
    self.assertEqual(443, authority.or_port)
    self.assertEqual(True, authority.is_legacy)
    self.assertEqual(None, authority.contact)
    self.assertEqual(None, authority.vote_digest)
    self.assertEqual(None, authority.legacy_dir_key)
    self.assertEqual(None, authority.key_certificate)
    self.assertEqual([], authority.get_unrecognized_lines())
Beispiel #4
0
    def test_authority_validation_flag_propagation(self):
        """
    Includes invalid certificate content in an authority entry. This is testing
    that the 'validate' flag propagages from the document to authority, and
    authority to certificate classes.
    """

        # make the dir-key-published field of the certiciate be malformed
        authority_content = get_directory_authority(is_vote=True, content=True)
        authority_content = authority_content.replace(
            b"dir-key-published 2011", b"dir-key-published 2011a")
        authority = DirectoryAuthority(authority_content, False, True)

        content = get_network_status_document_v3({"vote-status": "vote"},
                                                 authorities=(authority, ),
                                                 content=True)
        self.assertRaises(ValueError, NetworkStatusDocumentV3, content)

        document = NetworkStatusDocumentV3(content, validate=False)
        self.assertEquals((authority, ), document.directory_authorities)
Beispiel #5
0
  def test_malformed_address(self):
    """
    Includes a malformed ip address on the 'dir-source' line.
    """

    test_values = (
      '',
      '71.35.150.',
      '71.35..29',
      '71.35.150',
      '71.35.150.256',
      '[fd9f:2e19:3bcf::02:9970]',
    )

    for value in test_values:
      dir_source = DIR_SOURCE_LINE.replace('76.73.17.194', value)
      content = DirectoryAuthority.content({'dir-source': dir_source})
      self.assertRaises(ValueError, DirectoryAuthority, content, True)

      authority = DirectoryAuthority(content, False)
      self.assertEqual(None, authority.address)
    def test_legacy_authority(self):
        """
    Parses an authority using the '-legacy' format.
    """

        content = "dir-source gabelmoo-legacy 81349FC1F2DBA2C2C11B45CB9706637D480AB913 212.112.245.170 212.112.245.170 80 443"
        authority = DirectoryAuthority(content, is_vote=False)

        self.assertEqual("gabelmoo-legacy", authority.nickname)
        self.assertEqual("81349FC1F2DBA2C2C11B45CB9706637D480AB913",
                         authority.fingerprint)
        self.assertEqual("212.112.245.170", authority.hostname)
        self.assertEqual("212.112.245.170", authority.address)
        self.assertEqual(80, authority.dir_port)
        self.assertEqual(443, authority.or_port)
        self.assertEqual(True, authority.is_legacy)
        self.assertEqual(None, authority.contact)
        self.assertEqual(None, authority.vote_digest)
        self.assertEqual(None, authority.legacy_dir_key)
        self.assertEqual(None, authority.key_certificate)
        self.assertEqual([], authority.get_unrecognized_lines())
Beispiel #7
0
    def test_with_legacy_directory_authorities(self):
        """
    Includes both normal authorities and those following the '-legacy' format.
    """

        legacy_content = "dir-source gabelmoo-legacy 81349FC1F2DBA2C2C11B45CB9706637D480AB913 212.112.245.170 212.112.245.170 80 443"

        authority1 = get_directory_authority({'contact': 'doctor jekyll'},
                                             is_vote=False)
        authority2 = DirectoryAuthority(legacy_content,
                                        validate=True,
                                        is_vote=False)
        authority3 = get_directory_authority({'contact': 'mister hyde'},
                                             is_vote=False)

        document = get_network_status_document_v3({"vote-status": "consensus"},
                                                  authorities=(authority1,
                                                               authority2,
                                                               authority3))

        self.assertEquals((authority1, authority2, authority3),
                          document.directory_authorities)
    def test_malformed_address(self):
        """
    Includes a malformed ip address on the 'dir-source' line.
    """

        test_values = (
            "",
            "71.35.150.",
            "71.35..29",
            "71.35.150",
            "71.35.150.256",
            "[fd9f:2e19:3bcf::02:9970]",
        )

        for value in test_values:
            dir_source = AUTHORITY_HEADER[0][1].replace('76.73.17.194', value)
            content = get_directory_authority({"dir-source": dir_source},
                                              content=True)
            self.assertRaises(ValueError, DirectoryAuthority, content)

            authority = DirectoryAuthority(content, False)
            self.assertEqual(value, authority.address)