@@ -10,7 +10,7 @@
import stem.descriptor.server_descriptor
from stem.descriptor.server_descriptor import RelayDescriptor, BridgeDescriptor
import test.runner
from test.mocking import get_relay_server_descriptor, get_bridge_server_descriptor, CRYPTO_BLOB
from test.mocking import get_relay_server_descriptor, get_bridge_server_descriptor, CRYPTO_BLOB, sign_descriptor_content

class TestServerDescriptor(unittest.TestCase):
def test_minimal_relay_descriptor(self):
@@ -25,8 +25,6 @@ def test_minimal_relay_descriptor(self):
self.assertEquals("71.35.133.197", desc.address)
self.assertEquals(None, desc.fingerprint)
self.assertTrue(CRYPTO_BLOB in desc.onion_key)
self.assertTrue(CRYPTO_BLOB in desc.signing_key)
self.assertTrue(CRYPTO_BLOB in desc.signature)

def test_with_opt(self):
"""
@@ -148,6 +146,7 @@ def test_published_leap_year(self):
self._expect_invalid_attr(desc_text, "published")

desc_text = get_relay_server_descriptor({"published": "2012-02-29 04:03:19"}, content = True)
desc_text = sign_descriptor_content(desc_text)
expected_published = datetime.datetime(2012, 2, 29, 4, 3, 19)
self.assertEquals(expected_published, RelayDescriptor(desc_text).published)

@@ -200,6 +199,7 @@ def test_annotations(self):

desc_text = "@pepperjack very tasty\n@mushrooms not so much\n"
desc_text += get_relay_server_descriptor(content = True)
desc_text = sign_descriptor_content(desc_text)
desc_text += "\ntrailing text that should be ignored, ho hum"

# running parse_file should provide an iterator with a single descriptor
@@ -243,29 +243,12 @@ def test_missing_required_attr(self):
self.assertEquals(None, desc.socks_port)
self.assertEquals(None, desc.dir_port)

def test_fingerprint_valid(self):
"""
Checks that a fingerprint matching the hash of our signing key will validate.
"""

if not stem.prereq.is_rsa_available():
test.runner.skip(self, "(rsa module unavailable)")
return

fingerprint = "4F0C 867D F0EF 6816 0568 C826 838F 482C EA7C FE44"
desc = get_relay_server_descriptor({"opt fingerprint": fingerprint})
self.assertEquals(fingerprint.replace(" ", ""), desc.fingerprint)

def test_fingerprint_invalid(self):
"""
Checks that, with a correctly formed fingerprint, we'll fail validation if
it doesn't match the hash of our signing key.
"""

if not stem.prereq.is_rsa_available():
test.runner.skip(self, "(rsa module unavailable)")
return

fingerprint = "4F0C 867D F0EF 6816 0568 C826 838F 482C EA7C FE45"
desc_text = get_relay_server_descriptor({"opt fingerprint": fingerprint}, content = True)
self._expect_invalid_attr(desc_text, "fingerprint", fingerprint.replace(" ", ""))
@@ -39,9 +39,11 @@ def test_mirror_mirror_on_the_wall(self):
from stem.descriptor.reader import DescriptorReader
from stem.util import str_tools

exit_descriptor = RelayDescriptor(mocking.get_relay_server_descriptor({
'router': 'speedyexit 149.255.97.109 9001 0 0'
}, content = True).replace('reject *:*', 'accept *:*'))
exit_descriptor = mocking.get_relay_server_descriptor({
'router': 'speedyexit 149.255.97.109 9001 0 0'
}, content = True).replace('reject *:*', 'accept *:*')
exit_descriptor = mocking.sign_descriptor_content(exit_descriptor)
exit_descriptor = RelayDescriptor(exit_descriptor)

reader_wrapper = mocking.get_object(DescriptorReader, {
'__enter__': lambda x: x,