@@ -1507,48 +1507,64 @@ async def test():
15071507
15081508 def test_stream_server_abort(self):
15091509 server_stream_aborted = False
1510- fut = self.loop.create_future()
1510+ fut1 = self.loop.create_future()
1511+ fut2 = self.loop.create_future()
15111512
15121513 async def handle_client(stream):
1513- await fut
1514+ data = await stream.readexactly(4)
1515+ self.assertEqual(b'data', data)
1516+ fut1.set_result(None)
1517+ await fut2
15141518 self.assertEqual(b'', await stream.readline())
15151519 nonlocal server_stream_aborted
15161520 server_stream_aborted = True
15171521
15181522 async def client(srv):
15191523 addr = srv.sockets[0].getsockname()
15201524 stream = await asyncio.connect(*addr)
1521- fut.set_result(None)
1525+ await stream.write(b'data')
1526+ await fut2
15221527 self.assertEqual(b'', await stream.readline())
15231528 await stream.close()
15241529
15251530 async def test():
15261531 async with asyncio.StreamServer(handle_client, '127.0.0.1', 0) as server:
15271532 await server.start_serving()
15281533 task = asyncio.create_task(client(server))
1529- await fut
1534+ await fut1
1535+ fut2.set_result(None)
15301536 await server.abort()
15311537 await task
15321538
15331539 messages = []
15341540 self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
15351541 self.loop.run_until_complete(test())
15361542 self.assertEqual(messages, [])
1537- self.assertTrue(fut.done())
1543+ self.assertTrue(fut1.done())
1544+ self.assertTrue(fut2.done())
15381545 self.assertTrue(server_stream_aborted)
15391546
15401547 def test_stream_shutdown_hung_task(self):
15411548 fut1 = self.loop.create_future()
15421549 fut2 = self.loop.create_future()
1550+ cancelled = self.loop.create_future()
15431551
15441552 async def handle_client(stream):
1545- while True:
1546- await asyncio.sleep(0.01)
1553+ data = await stream.readexactly(4)
1554+ self.assertEqual(b'data', data)
1555+ fut1.set_result(None)
1556+ await fut2
1557+ try:
1558+ while True:
1559+ await asyncio.sleep(0.01)
1560+ except asyncio.CancelledError:
1561+ cancelled.set_result(None)
1562+ raise
15471563
15481564 async def client(srv):
15491565 addr = srv.sockets[0].getsockname()
15501566 stream = await asyncio.connect(*addr)
1551- fut1.set_result(None )
1567+ await stream.write(b'data' )
15521568 await fut2
15531569 self.assertEqual(b'', await stream.readline())
15541570 await stream.close()
@@ -1561,31 +1577,39 @@ async def test():
15611577 await server.start_serving()
15621578 task = asyncio.create_task(client(server))
15631579 await fut1
1564- await server.close()
15651580 fut2.set_result(None)
1581+ await server.close()
15661582 await task
1583+ await cancelled
15671584
15681585 messages = []
15691586 self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
15701587 self.loop.run_until_complete(test())
15711588 self.assertEqual(messages, [])
15721589 self.assertTrue(fut1.done())
15731590 self.assertTrue(fut2.done())
1591+ self.assertTrue(cancelled.done())
15741592
15751593 def test_stream_shutdown_hung_task_prevents_cancellation(self):
15761594 fut1 = self.loop.create_future()
15771595 fut2 = self.loop.create_future()
1596+ cancelled = self.loop.create_future()
15781597 do_handle_client = True
15791598
15801599 async def handle_client(stream):
1600+ data = await stream.readexactly(4)
1601+ self.assertEqual(b'data', data)
1602+ fut1.set_result(None)
1603+ await fut2
15811604 while do_handle_client:
15821605 with contextlib.suppress(asyncio.CancelledError):
15831606 await asyncio.sleep(0.01)
1607+ cancelled.set_result(None)
15841608
15851609 async def client(srv):
15861610 addr = srv.sockets[0].getsockname()
15871611 stream = await asyncio.connect(*addr)
1588- fut1.set_result(None )
1612+ await stream.write(b'data' )
15891613 await fut2
15901614 self.assertEqual(b'', await stream.readline())
15911615 await stream.close()
@@ -1598,11 +1622,12 @@ async def test():
15981622 await server.start_serving()
15991623 task = asyncio.create_task(client(server))
16001624 await fut1
1625+ fut2.set_result(None)
16011626 await server.close()
16021627 nonlocal do_handle_client
16031628 do_handle_client = False
1604- fut2.set_result(None)
16051629 await task
1630+ await cancelled
16061631
16071632 messages = []
16081633 self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
@@ -1612,6 +1637,7 @@ async def test():
16121637 "<Task pending .+ ignored cancellation request")
16131638 self.assertTrue(fut1.done())
16141639 self.assertTrue(fut2.done())
1640+ self.assertTrue(cancelled.done())
16151641
16161642 def test_sendfile(self):
16171643 messages = []
0 commit comments