diff options
author | Guido van Rossum <guido@python.org> | 2024-03-12 00:31:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-12 00:31:49 (GMT) |
commit | ba13215eb1ec20b6af10e3fcee7a725bd7a7f83e (patch) | |
tree | 19615f6a1d8d22a9fe494bcfbf2cfe5bb50bf1e9 /Lib/test/test_asyncio/test_server.py | |
parent | 2b67fc57f6e97c8389fe970ed232c1ad484113e1 (diff) | |
download | cpython-ba13215eb1ec20b6af10e3fcee7a725bd7a7f83e.zip cpython-ba13215eb1ec20b6af10e3fcee7a725bd7a7f83e.tar.gz cpython-ba13215eb1ec20b6af10e3fcee7a725bd7a7f83e.tar.bz2 |
gh-113538: Revert "gh-113538: Add asycio.Server.{close,abort}_clients (#114432)" (#116632)
Revert "gh-113538: Add asycio.Server.{close,abort}_clients (#114432)"
Reason: The new test doesn't always pass:
https://github.com/python/cpython/pull/116423#issuecomment-1989425489
This reverts commit 1d0d49a7e86257ff95b4de0685e6997d7533993c.
Diffstat (limited to 'Lib/test/test_asyncio/test_server.py')
-rw-r--r-- | Lib/test/test_asyncio/test_server.py | 96 |
1 files changed, 8 insertions, 88 deletions
diff --git a/Lib/test/test_asyncio/test_server.py b/Lib/test/test_asyncio/test_server.py index 0c55661..918faac 100644 --- a/Lib/test/test_asyncio/test_server.py +++ b/Lib/test/test_asyncio/test_server.py @@ -125,12 +125,8 @@ class SelectorStartServerTests(BaseStartServer, unittest.TestCase): class TestServer2(unittest.IsolatedAsyncioTestCase): async def test_wait_closed_basic(self): - async def serve(rd, wr): - try: - await rd.read() - finally: - wr.close() - await wr.wait_closed() + async def serve(*args): + pass srv = await asyncio.start_server(serve, socket_helper.HOSTv4, 0) self.addCleanup(srv.close) @@ -141,8 +137,7 @@ class TestServer2(unittest.IsolatedAsyncioTestCase): self.assertFalse(task1.done()) # active count != 0, not closed: should block - addr = srv.sockets[0].getsockname() - (rd, wr) = await asyncio.open_connection(addr[0], addr[1]) + srv._attach() task2 = asyncio.create_task(srv.wait_closed()) await asyncio.sleep(0) self.assertFalse(task1.done()) @@ -157,8 +152,7 @@ class TestServer2(unittest.IsolatedAsyncioTestCase): self.assertFalse(task2.done()) self.assertFalse(task3.done()) - wr.close() - await wr.wait_closed() + srv._detach() # active count == 0, closed: should unblock await task1 await task2 @@ -167,12 +161,8 @@ class TestServer2(unittest.IsolatedAsyncioTestCase): async def test_wait_closed_race(self): # Test a regression in 3.12.0, should be fixed in 3.12.1 - async def serve(rd, wr): - try: - await rd.read() - finally: - wr.close() - await wr.wait_closed() + async def serve(*args): + pass srv = await asyncio.start_server(serve, socket_helper.HOSTv4, 0) self.addCleanup(srv.close) @@ -180,83 +170,13 @@ class TestServer2(unittest.IsolatedAsyncioTestCase): task = asyncio.create_task(srv.wait_closed()) await asyncio.sleep(0) self.assertFalse(task.done()) - addr = srv.sockets[0].getsockname() - (rd, wr) = await asyncio.open_connection(addr[0], addr[1]) + srv._attach() loop = asyncio.get_running_loop() loop.call_soon(srv.close) - loop.call_soon(wr.close) + loop.call_soon(srv._detach) await srv.wait_closed() - async def test_close_clients(self): - async def serve(rd, wr): - try: - await rd.read() - finally: - wr.close() - await wr.wait_closed() - - srv = await asyncio.start_server(serve, socket_helper.HOSTv4, 0) - self.addCleanup(srv.close) - - addr = srv.sockets[0].getsockname() - (rd, wr) = await asyncio.open_connection(addr[0], addr[1]) - self.addCleanup(wr.close) - - task = asyncio.create_task(srv.wait_closed()) - await asyncio.sleep(0) - self.assertFalse(task.done()) - - srv.close() - srv.close_clients() - await asyncio.sleep(0) - await asyncio.sleep(0) - self.assertTrue(task.done()) - - async def test_abort_clients(self): - async def serve(rd, wr): - nonlocal s_rd, s_wr - s_rd = rd - s_wr = wr - await wr.wait_closed() - - s_rd = s_wr = None - srv = await asyncio.start_server(serve, socket_helper.HOSTv4, 0) - self.addCleanup(srv.close) - - addr = srv.sockets[0].getsockname() - (c_rd, c_wr) = await asyncio.open_connection(addr[0], addr[1], limit=4096) - self.addCleanup(c_wr.close) - - # Limit the socket buffers so we can reliably overfill them - s_sock = s_wr.get_extra_info('socket') - s_sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536) - c_sock = c_wr.get_extra_info('socket') - c_sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 65536) - - # Get the reader in to a paused state by sending more than twice - # the configured limit - s_wr.write(b'a' * 4096) - s_wr.write(b'a' * 4096) - s_wr.write(b'a' * 4096) - while c_wr.transport.is_reading(): - await asyncio.sleep(0) - - # Get the writer in a waiting state by sending data until the - # socket buffers are full on both server and client sockets and - # the kernel stops accepting more data - s_wr.write(b'a' * c_sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)) - s_wr.write(b'a' * s_sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)) - self.assertNotEqual(s_wr.transport.get_write_buffer_size(), 0) - - task = asyncio.create_task(srv.wait_closed()) - await asyncio.sleep(0) - self.assertFalse(task.done()) - srv.close() - srv.abort_clients() - await asyncio.sleep(0) - await asyncio.sleep(0) - self.assertTrue(task.done()) # Test the various corner cases of Unix server socket removal |