def test_orport_response_code_headers(self): """ When successful Tor provides a '200 OK' status, but we should accept other 2xx response codes, reason text, and recognize HTTP errors. """ response_code_headers = ( b'HTTP/1.0 200 OK\r\n', b'HTTP/1.0 205 OK\r\n', b'HTTP/1.0 200 This is also alright\r\n', ) for header in response_code_headers: with patch('stem.client.Relay.connect', _orport_mock(TEST_DESCRIPTOR, response_code_header = header)): stem.descriptor.remote.their_server_descriptor( endpoints = [stem.ORPort('12.34.56.78', 1100)], validate = True, ).run() with patch('stem.client.Relay.connect', _orport_mock(TEST_DESCRIPTOR, response_code_header = b'HTTP/1.0 500 Kaboom\r\n')): request = stem.descriptor.remote.their_server_descriptor( endpoints = [stem.ORPort('12.34.56.78', 1100)], validate = True, ) self.assertRaisesWith(stem.ProtocolError, "Response should begin with HTTP success, but was 'HTTP/1.0 500 Kaboom'", request.run)
def test_response_header_code(self): """ When successful Tor provides a '200 OK' status, but we should accept other 2xx response codes, reason text, and recognize HTTP errors. """ response_code_headers = ( b'HTTP/1.0 200 OK\r\n', b'HTTP/1.0 205 OK\r\n', b'HTTP/1.0 200 This is also alright\r\n', ) for header in response_code_headers: with mock_download(TEST_DESCRIPTOR, response_code_header=header): stem.descriptor.remote.their_server_descriptor( endpoints=[stem.ORPort('12.34.56.78', 1100)], validate=True, skip_crypto_validation=not test.require. CRYPTOGRAPHY_AVAILABLE, ).run() with mock_download(TEST_DESCRIPTOR, response_code_header=b'HTTP/1.0 500 Kaboom\r\n'): request = stem.descriptor.remote.their_server_descriptor( endpoints=[stem.ORPort('12.34.56.78', 1100)], validate=True, skip_crypto_validation=not test.require.CRYPTOGRAPHY_AVAILABLE, ) self.assertRaisesRegexp( stem.ProtocolError, "^Response should begin with HTTP success, but was 'HTTP/1.0 500 Kaboom'", request.run)
def test_constructor(self): endpoint = stem.ORPort('12.34.56.78', 80) self.assertEqual('12.34.56.78', endpoint.address) self.assertEqual(80, endpoint.port) self.assertEqual(None, endpoint.link_protocols) endpoint = stem.ORPort('12.34.56.78', 80, [3]) self.assertEqual('12.34.56.78', endpoint.address) self.assertEqual(80, endpoint.port) self.assertEqual([3], endpoint.link_protocols) endpoint = stem.DirPort('12.34.56.78', 80) self.assertEqual('12.34.56.78', endpoint.address) self.assertEqual(80, endpoint.port)
def main(): try: desc = stem.descriptor.remote.their_server_descriptor( endpoints = [stem.ORPort(RELAY_ADDRESS, RELAY_OR_PORT)], ).run()[0] if desc.nickname != RELAY_NAME: raise ValueError('Unexpected descriptor:\n\n%s' % desc) except stem.SocketError: email('Unable to reach %s' % RELAY_NAME, "Unable to reach %s (%s):\n\n%s" % (RELAY_NAME, RELAY_LINK, traceback.format_exc()))
def test_using_orport(self): """ Download a descriptor through the ORPort. """ reply = stem.descriptor.remote.their_server_descriptor( endpoints = [stem.ORPort('12.34.56.78', 1100)], validate = True, ) self.assertEqual(1, len(list(reply))) self.assertEqual('moria1', list(reply)[0].nickname) self.assertEqual(5, len(reply.reply_headers))
def test_downloading_via_orport(self): moria1 = stem.directory.Authority.from_cache()['moria1'] desc = list( stem.descriptor.remote.their_server_descriptor( endpoints=[stem.ORPort(moria1.address, moria1.or_port)], fall_back_to_authority=False, ).run())[0] self.assertEqual('moria1', desc.nickname) self.assertTrue( isinstance(desc, stem.descriptor.server_descriptor.ServerDescriptor))
def test_download(self): """ Simply download and parse a descriptor. """ reply = stem.descriptor.remote.their_server_descriptor( endpoints=[stem.ORPort('12.34.56.78', 1100)], validate=True, skip_crypto_validation=not test.require.CRYPTOGRAPHY_AVAILABLE, ) self.assertEqual(1, len(list(reply))) self.assertEqual(5, len(reply.reply_headers)) desc = list(reply)[0] self.assertEqual('moria1', desc.nickname) self.assertEqual('128.31.0.34', desc.address) self.assertEqual('9695DFC35FFEB861329B9F1AB04C46397020CE31', desc.fingerprint) self.assertEqual(TEST_DESCRIPTOR.rstrip(), desc.get_bytes())
def test_equality(self): self.assertTrue( stem.ORPort('12.34.56.78', 80) == stem.ORPort('12.34.56.78', 80)) self.assertTrue( stem.ORPort('12.34.56.78', 80, [1, 2, 3]) == stem.ORPort( '12.34.56.78', 80, [1, 2, 3])) self.assertFalse( stem.ORPort('12.34.56.78', 80) == stem.ORPort('12.34.56.88', 80)) self.assertFalse( stem.ORPort('12.34.56.78', 80) == stem.ORPort('12.34.56.78', 443)) self.assertFalse( stem.ORPort('12.34.56.78', 80, [2, 3]) == stem.ORPort( '12.34.56.78', 80, [1, 2, 3])) self.assertTrue( stem.DirPort('12.34.56.78', 80) == stem.DirPort('12.34.56.78', 80)) self.assertFalse( stem.DirPort('12.34.56.78', 80) == stem.DirPort('12.34.56.88', 80)) self.assertFalse( stem.DirPort('12.34.56.78', 80) == stem.DirPort( '12.34.56.78', 443)) self.assertFalse( stem.ORPort('12.34.56.78', 80) == stem.DirPort('12.34.56.78', 80)) self.assertFalse( stem.DirPort('12.34.56.78', 80) == stem.ORPort('12.34.56.78', 80))