Exemple #1
0
  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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
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()))
Exemple #5
0
  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))
Exemple #6
0
    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))
Exemple #7
0
    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())
Exemple #8
0
    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))