Ejemplo n.º 1
0
    def test_mock_request_certificate_error(self):
        connection = Connection(
            ('127.0.0.1', self.get_http_port()), 'localhost')

        @trollius.coroutine
        def mock_func():
            raise ssl.SSLError(1, 'I has a Certificate Error!')

        with self.assertRaises(SSLVerificationError):
            yield From(connection.run_network_operation(mock_func()))
Ejemplo n.º 2
0
    def test_mock_connect_ssl_error(self):
        connection = Connection(
            ('127.0.0.1', self.get_http_port()), 'localhost')

        @trollius.coroutine
        def mock_func():
            raise ssl.SSLError(123, 'Mock error')

        with self.assertRaises(NetworkError):
            yield From(connection.run_network_operation(mock_func()))
Ejemplo n.º 3
0
    def test_connection(self):
        connection = Connection(
            ('127.0.0.1', self.get_http_port()), 'localhost')
        yield From(connection.connect())
        yield From(connection.write(b'GET / HTTP/1.0\r\n\r\n'))
        data = yield From(connection.read())

        self.assertEqual(b'hello world!', data[-12:])

        self.assertTrue(connection.closed())
Ejemplo n.º 4
0
    def test_mock_request_certificate_error(self):
        connection = Connection(('127.0.0.1', self.get_http_port()),
                                'localhost')

        @trollius.coroutine
        def mock_func():
            raise ssl.SSLError(1, 'I has a Certificate Error!')

        with self.assertRaises(SSLVerificationError):
            yield From(connection.run_network_operation(mock_func()))
Ejemplo n.º 5
0
    def test_mock_connect_ssl_error(self):
        connection = Connection(('127.0.0.1', self.get_http_port()),
                                'localhost')

        @trollius.coroutine
        def mock_func():
            raise ssl.SSLError(123, 'Mock error')

        with self.assertRaises(NetworkError):
            yield From(connection.run_network_operation(mock_func()))
Ejemplo n.º 6
0
    def test_start_tls(self):
        connection = Connection(('127.0.0.1', self.get_http_port()), timeout=1)

        yield From(connection.connect())

        ssl_connection = yield From(connection.start_tls())

        yield From(ssl_connection.write(b'GET / HTTP/1.1\r\n\r\n'))

        data = yield From(ssl_connection.readline())
        self.assertEqual(b'HTTP', data[:4])
Ejemplo n.º 7
0
    def test_start_tls(self):
        connection = Connection(('127.0.0.1', self.get_http_port()), timeout=1)

        yield From(connection.connect())

        ssl_connection = yield From(connection.start_tls())

        yield From(ssl_connection.write(b'GET / HTTP/1.1\r\n\r\n'))

        data = yield From(ssl_connection.readline())
        self.assertEqual(b'HTTP', data[:4])
Ejemplo n.º 8
0
    def test_mock_request_ssl_error(self):
        connection = Connection(
            ('127.0.0.1', self.get_http_port()), 'localhost')

        @trollius.coroutine
        def mock_func():
            if sys.version_info < (3, 3):
                raise socket.error(123, 'Mock error')
            else:
                raise ConnectionError(123, 'Mock error')

        with self.assertRaises(NetworkError):
            yield From(connection.run_network_operation(mock_func()))
Ejemplo n.º 9
0
    def test_mock_request_ssl_error(self):
        connection = Connection(('127.0.0.1', self.get_http_port()),
                                'localhost')

        @trollius.coroutine
        def mock_func():
            if sys.version_info < (3, 3):
                raise socket.error(123, 'Mock error')
            else:
                raise ConnectionError(123, 'Mock error')

        with self.assertRaises(NetworkError):
            yield From(connection.run_network_operation(mock_func()))
Ejemplo n.º 10
0
    def test_read_timeout(self):
        connection = Connection(('127.0.0.1', self.get_http_port()),
                                timeout=0.5)
        yield From(connection.connect())
        yield From(
            connection.write(b'GET /sleep_long HTTP/1.1\r\n', drain=False))
        yield From(connection.write(b'\r\n', drain=False))

        data = yield From(connection.readline())
        self.assertEqual(b'HTTP', data[:4])

        while True:
            data = yield From(connection.readline())

            if not data.strip():
                break

        with self.assertRaises(NetworkTimedOut):
            bytes_left = 2
            while bytes_left > 0:
                data = yield From(connection.read(bytes_left))

                if not data:
                    break

                bytes_left -= len(data)
Ejemplo n.º 11
0
    def new_stream(self, host=None, port=None, ssl=None,
                   connection_kwargs=None, **kwargs):
        if connection_kwargs is None:
            connection_kwargs = {}

        if ssl is None:
            ssl = self.get_ssl_default()

        if ssl:
            connection = SSLConnection(
                (host or '127.0.0.1', port or self._port), **connection_kwargs)
        else:
            connection = Connection(
                (host or '127.0.0.1', port or self._port), **connection_kwargs)

        stream = Stream(connection, **kwargs)

        non_local_dict = {'count': 0}

        def debug_handler(data_type, data):
            if non_local_dict['count'] < 50:
                _logger.debug('%s %s', data_type, data[:100])

                non_local_dict['count'] += 1

                if non_local_dict['count'] == 50:
                    _logger.debug('Discarding for performance.')

        stream.data_observer.add(debug_handler)

        return stream
Ejemplo n.º 12
0
    def test_control_stream(self):
        def log_cb(data_type, data):
            _logger.debug(__('{0}={1}', data_type, data))

        connection = Connection(('127.0.0.1', self.server_port()))
        yield From(connection.connect())

        control_stream = ControlStream(connection)
        control_stream.data_observer.add(log_cb)

        reply = yield From(control_stream.read_reply())
        self.assertEqual(220, reply.code)

        yield From(control_stream.write_command(Command('USER', 'smaug')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(331, reply.code)

        yield From(control_stream.write_command(Command('PASS', 'gold1')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(230, reply.code)

        yield From(control_stream.write_command(Command('PASV')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(227, reply.code)
        address = parse_address(reply.text)

        data_connection = Connection(address)
        yield From(data_connection.connect())

        data_stream = DataStream(data_connection)

        yield From(control_stream.write_command(Command('RETR', 'example (copy).txt')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(150, reply.code)

        my_file = io.BytesIO()

        yield From(data_stream.read_file(my_file))

        reply = yield From(control_stream.read_reply())
        self.assertEqual(226, reply.code)

        self.assertEqual(
            'The real treasure is in Smaug’s heart 💗.\n',
            my_file.getvalue().decode('utf-8')
            )
Ejemplo n.º 13
0
    def test_read_timeout(self):
        connection = Connection(('127.0.0.1', self.get_http_port()),
                                timeout=0.5)
        yield From(connection.connect())
        yield From(connection.write(b'GET /sleep_long HTTP/1.1\r\n',
                                    drain=False))
        yield From(connection.write(b'\r\n', drain=False))

        data = yield From(connection.readline())
        self.assertEqual(b'HTTP', data[:4])

        while True:
            data = yield From(connection.readline())

            if not data.strip():
                break

        with self.assertRaises(NetworkTimedOut):
            bytes_left = 2
            while bytes_left > 0:
                data = yield From(connection.read(bytes_left))

                if not data:
                    break

                bytes_left -= len(data)
Ejemplo n.º 14
0
    def test_sock_reuse(self):
        connection1 = Connection(('127.0.0.1', self.get_http_port()))
        yield From(connection1.connect())

        connection2 = Connection(
            ('127.0.0.1', self.get_http_port()),
            sock=connection1.writer.get_extra_info('socket'))

        yield From(connection2.connect())
        yield From(connection2.write(b'GET / HTTP/1.1\r\n\r\n'))

        data = yield From(connection2.readline())
        self.assertEqual(b'HTTP', data[:4])
Ejemplo n.º 15
0
    def test_connection(self):
        connection = Connection(('127.0.0.1', self.get_http_port()),
                                'localhost')
        yield From(connection.connect())
        yield From(connection.write(b'GET / HTTP/1.0\r\n\r\n'))
        data = yield From(connection.read())

        self.assertEqual(b'hello world!', data[-12:])

        self.assertTrue(connection.closed())
Ejemplo n.º 16
0
    def test_sock_reuse(self):
        connection1 = Connection(('127.0.0.1', self.get_http_port()))
        yield From(connection1.connect())

        connection2 = Connection(
            ('127.0.0.1', self.get_http_port()),
            sock=connection1.writer.get_extra_info('socket')
        )

        yield From(connection2.connect())
        yield From(connection2.write(b'GET / HTTP/1.1\r\n\r\n'))

        data = yield From(connection2.readline())
        self.assertEqual(b'HTTP', data[:4])
Ejemplo n.º 17
0
    def test_control_stream(self):
        def log_cb(data_type, data):
            _logger.debug(__('{0}={1}', data_type, data))

        connection = Connection(('127.0.0.1', self.server_port()))
        yield From(connection.connect())

        control_stream = ControlStream(connection)
        control_stream.data_observer.add(log_cb)

        reply = yield From(control_stream.read_reply())
        self.assertEqual(220, reply.code)

        yield From(control_stream.write_command(Command('USER', 'smaug')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(331, reply.code)

        yield From(control_stream.write_command(Command('PASS', 'gold1')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(230, reply.code)

        yield From(control_stream.write_command(Command('PASV')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(227, reply.code)
        address = parse_address(reply.text)

        data_connection = Connection(address)
        yield From(data_connection.connect())

        data_stream = DataStream(data_connection)

        yield From(
            control_stream.write_command(Command('RETR',
                                                 'example (copy).txt')))
        reply = yield From(control_stream.read_reply())
        self.assertEqual(150, reply.code)

        my_file = io.BytesIO()

        yield From(data_stream.read_file(my_file))

        reply = yield From(control_stream.read_reply())
        self.assertEqual(226, reply.code)

        self.assertEqual('The real treasure is in Smaug’s heart 💗.\n',
                         my_file.getvalue().decode('utf-8'))
Ejemplo n.º 18
0
    def test_connect_timeout(self):
        connection = Connection(('10.0.0.0', 1), connect_timeout=2)

        with self.assertRaises(NetworkTimedOut):
            yield From(connection.connect())
Ejemplo n.º 19
0
    def test_connect_timeout(self):
        connection = Connection(('10.0.0.0', 1), connect_timeout=2)

        with self.assertRaises(NetworkTimedOut):
            yield From(connection.connect())