Пример #1
0
    def test_del_stream_before_sock_closing(self):
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))
            sock = wr.get_extra_info('socket')
            self.assertNotEqual(sock.fileno(), -1)

            wr.write(b'GET / HTTP/1.0\r\n\r\n')
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')

            # drop refs to reader/writer
            del rd
            del wr
            gc.collect()
            # make a chance to close the socket
            test_utils.run_briefly(self.loop)

            self.assertEqual(1, len(messages))
            self.assertEqual(sock.fileno(), -1)

        self.assertEqual(1, len(messages))
        self.assertEqual(
            'An open stream object is being garbage '
            'collected; call "stream.close()" explicitly.',
            messages[0]['message'])
Пример #2
0
    def test_open_connection_no_loop_ssl(self):
        with test_utils.run_test_server(use_ssl=True) as httpd:
            conn_fut = asyncio.open_connection(
                *httpd.address,
                ssl=test_utils.dummy_ssl_context())

            self._basetest_open_connection_no_loop_ssl(conn_fut)
Пример #3
0
    def test_create_connection_sock(self):
        with test_utils.run_test_server() as httpd:
            sock = None
            infos = self.loop.run_until_complete(
                self.loop.getaddrinfo(
                    *httpd.address, type=socket.SOCK_STREAM))
            for family, type, proto, cname, address in infos:
                try:
                    sock = socket.socket(family=family, type=type, proto=proto)
                    sock.setblocking(False)
                    self.loop.run_until_complete(
                        self.loop.sock_connect(sock, address))
                except BaseException:
                    pass
                else:
                    break
            else:
                assert False, 'Can not create socket.'

            f = self.loop.create_connection(
                lambda: MyProto(loop=self.loop), sock=sock)
            tr, pr = self.loop.run_until_complete(f)
            self.assertIsInstance(tr, asyncio.Transport)
            self.assertIsInstance(pr, asyncio.Protocol)
            self.loop.run_until_complete(pr.done)
            self.assertGreater(pr.nbytes, 0)
            tr.close()
Пример #4
0
    def test_del_stream_before_sock_closing(self):
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))
            sock = wr.get_extra_info('socket')
            self.assertNotEqual(sock.fileno(), -1)

            wr.write(b'GET / HTTP/1.0\r\n\r\n')
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')

            # drop refs to reader/writer
            del rd
            del wr
            gc.collect()
            # make a chance to close the socket
            test_utils.run_briefly(self.loop)

            self.assertEqual(1, len(messages))
            self.assertEqual(sock.fileno(), -1)

        self.assertEqual(1, len(messages))
        self.assertEqual('An open stream object is being garbage '
                         'collected; call "stream.close()" explicitly.',
                         messages[0]['message'])
Пример #5
0
    def test_create_connection_sock(self):
        with test_utils.run_test_server() as httpd:
            sock = None
            infos = self.loop.run_until_complete(
                self.loop.getaddrinfo(*httpd.address, type=socket.SOCK_STREAM))
            for family, type, proto, cname, address in infos:
                try:
                    sock = socket.socket(family=family, type=type, proto=proto)
                    sock.setblocking(False)
                    self.loop.run_until_complete(
                        self.loop.sock_connect(sock, address))
                except BaseException:
                    pass
                else:
                    break
            else:
                self.fail('Can not create socket.')

            f = self.loop.create_connection(lambda: MyProto(loop=self.loop),
                                            sock=sock)
            tr, pr = self.loop.run_until_complete(f)
            self.assertIsInstance(tr, asyncio.Transport)
            self.assertIsInstance(pr, asyncio.Protocol)
            self.loop.run_until_complete(pr.done)
            self.assertGreater(pr.nbytes, 0)
            tr.close()
Пример #6
0
    def test_open_connection_no_loop_ssl(self):
        with test_utils.run_test_server(use_ssl=True) as httpd:
            conn_fut = asyncio.open_connection(
                *httpd.address,
                ssl=test_utils.dummy_ssl_context(),
                loop=self.loop)

            self._basetest_open_connection_no_loop_ssl(conn_fut)
Пример #7
0
    def test_wait_closed_on_close_with_unread_data(self):
        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))

            wr.write(b'GET / HTTP/1.0\r\n\r\n')
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            wr.close()
            self.loop.run_until_complete(wr.wait_closed())
Пример #8
0
    def test_wait_closed_on_close_with_unread_data(self):
        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))

            wr.write(b'GET / HTTP/1.0\r\n\r\n')
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            wr.close()
            self.loop.run_until_complete(wr.wait_closed())
Пример #9
0
 def test_sock_client_racing(self):
     with test_utils.run_test_server() as httpd:
         sock = socket.socket()
         with sock:
             self.loop.run_until_complete(asyncio.wait_for(
                 self._basetest_sock_recv_racing(httpd, sock), 10))
         sock = socket.socket()
         with sock:
             self.loop.run_until_complete(asyncio.wait_for(
                 self._basetest_sock_recv_into_racing(httpd, sock), 10))
     listener = socket.socket()
     sock = socket.socket()
     with listener, sock:
         self.loop.run_until_complete(asyncio.wait_for(
             self._basetest_sock_send_racing(listener, sock), 10))
Пример #10
0
    def test_wait_closed_on_close(self):
        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))

            wr.write(b'GET / HTTP/1.0\r\n\r\n')
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            f = rd.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
            self.assertFalse(wr.is_closing())
            wr.close()
            self.assertTrue(wr.is_closing())
            self.loop.run_until_complete(wr.wait_closed())
Пример #11
0
    def test_wait_closed_on_close(self):
        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))

            wr.write(b'GET / HTTP/1.0\r\n\r\n')
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            f = rd.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
            self.assertFalse(wr.is_closing())
            wr.close()
            self.assertTrue(wr.is_closing())
            self.loop.run_until_complete(wr.wait_closed())
Пример #12
0
    def test_eof_feed_when_closing_writer(self):
        # See http://bugs.python.org/issue35065
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))

            f = wr.aclose()
            self.loop.run_until_complete(f)
            assert rd.at_eof()
            f = rd.read()
            data = self.loop.run_until_complete(f)
            assert data == b''

        self.assertEqual(messages, [])
Пример #13
0
    def test_async_writer_api(self):
        async def inner(httpd):
            rd, wr = await asyncio.open_connection(*httpd.address)

            await wr.write(b'GET / HTTP/1.0\r\n\r\n')
            data = await rd.readline()
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            data = await rd.read()
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
            await wr.close()

        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            self.loop.run_until_complete(inner(httpd))

        self.assertEqual(messages, [])
Пример #14
0
    def test_del_stream_before_connection_made(self):
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd = asyncio.StreamReader(loop=self.loop)
            pr = asyncio.StreamReaderProtocol(rd, loop=self.loop)
            del rd
            gc.collect()
            tr, _ = self.loop.run_until_complete(
                self.loop.create_connection(lambda: pr, *httpd.address))

            sock = tr.get_extra_info('socket')
            self.assertEqual(sock.fileno(), -1)

        self.assertEqual(1, len(messages))
        self.assertEqual(
            'An open stream was garbage collected prior to '
            'establishing network connection; '
            'call "stream.close()" explicitly.', messages[0]['message'])
Пример #15
0
    def test_drain_on_closed_writer_ssl(self):
        async def inner(httpd):
            reader, writer = await asyncio.open_connection(
                *httpd.address, ssl=test_utils.dummy_ssl_context())

            messages = []
            self.loop.set_exception_handler(
                lambda loop, ctx: messages.append(ctx))
            writer.write(b'GET / HTTP/1.0\r\n\r\n')
            data = await reader.read()
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))

            writer.close()
            with self.assertRaises(ConnectionResetError):
                await writer.drain()

            self.assertEqual(messages, [])

        with test_utils.run_test_server(use_ssl=True) as httpd:
            self.loop.run_until_complete(inner(httpd))
Пример #16
0
    def test_async_writer_api(self):
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address, loop=self.loop))

            f = wr.awrite(b'GET / HTTP/1.0\r\n\r\n')
            self.loop.run_until_complete(f)
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            f = rd.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
            f = wr.aclose()
            self.loop.run_until_complete(f)

        self.assertEqual(messages, [])
Пример #17
0
    def test_async_writer_api(self):
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd, wr = self.loop.run_until_complete(
                asyncio.open_connection(*httpd.address,
                                        loop=self.loop))

            f = wr.awrite(b'GET / HTTP/1.0\r\n\r\n')
            self.loop.run_until_complete(f)
            f = rd.readline()
            data = self.loop.run_until_complete(f)
            self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
            f = rd.read()
            data = self.loop.run_until_complete(f)
            self.assertTrue(data.endswith(b'\r\n\r\nTest message'))
            f = wr.aclose()
            self.loop.run_until_complete(f)

        self.assertEqual(messages, [])
Пример #18
0
    def test_del_stream_before_connection_made(self):
        messages = []
        self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))

        with test_utils.run_test_server() as httpd:
            rd = asyncio.StreamReader(loop=self.loop)
            pr = asyncio.StreamReaderProtocol(rd, loop=self.loop)
            del rd
            gc.collect()
            tr, _ = self.loop.run_until_complete(
                self.loop.create_connection(
                    lambda: pr, *httpd.address))

            sock = tr.get_extra_info('socket')
            self.assertEqual(sock.fileno(), -1)

        self.assertEqual(1, len(messages))
        self.assertEqual('An open stream was garbage collected prior to '
                         'establishing network connection; '
                         'call "stream.close()" explicitly.',
                         messages[0]['message'])
Пример #19
0
 def test_huge_content_recvinto(self):
     with test_utils.run_test_server() as httpd:
         self.loop.run_until_complete(
             self._basetest_huge_content_recvinto(httpd.address))
Пример #20
0
 def test_open_connection(self):
     with test_utils.run_test_server() as httpd:
         conn_fut = asyncio.open_connection(*httpd.address,
                                            loop=self.loop)
         self._basetest_open_connection(conn_fut)
Пример #21
0
 def test_open_connection(self):
     with test_utils.run_test_server() as httpd:
         conn_fut = asyncio.open_connection(*httpd.address, loop=self.loop)
         self._basetest_open_connection(conn_fut)
Пример #22
0
 def test_sock_client_ops(self):
     with test_utils.run_test_server() as httpd:
         sock = socket.socket()
         self._basetest_sock_client_ops(httpd, sock)
         sock = socket.socket()
         self._basetest_sock_recv_into(httpd, sock)
Пример #23
0
 def test_sock_client_ops(self):
     with test_utils.run_test_server() as httpd:
         sock = socket.socket()
         self._basetest_sock_client_ops(httpd, sock)
         sock = socket.socket()
         self._basetest_sock_recv_into(httpd, sock)
Пример #24
0
 def test_huge_content_recvinto(self):
     with test_utils.run_test_server() as httpd:
         self.loop.run_until_complete(
             self._basetest_huge_content_recvinto(httpd.address))