summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_asyncio/test_server.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2024-03-12 00:31:49 (GMT)
committerGitHub <noreply@github.com>2024-03-12 00:31:49 (GMT)
commitba13215eb1ec20b6af10e3fcee7a725bd7a7f83e (patch)
tree19615f6a1d8d22a9fe494bcfbf2cfe5bb50bf1e9 /Lib/test/test_asyncio/test_server.py
parent2b67fc57f6e97c8389fe970ed232c1ad484113e1 (diff)
downloadcpython-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.py96
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