[Python-checkins] bpo-37142: Make asyncio stream tests more robust again (GH-13804)

Victor Stinner webhook-mailer at python.org
Tue Jun 4 09:44:58 EDT 2019


https://github.com/python/cpython/commit/8d561092d510670ce9c038701c90c913453eac90
commit: 8d561092d510670ce9c038701c90c913453eac90
branch: master
author: Andrew Svetlov <andrew.svetlov at gmail.com>
committer: Victor Stinner <vstinner at redhat.com>
date: 2019-06-04T15:44:44+02:00
summary:

bpo-37142: Make asyncio stream tests more robust again (GH-13804)

Make test_stream_server_close() implementation following test_stream_server_abort().
 Add explicit timeout for tests that can hang.

files:
M Lib/test/test_asyncio/test_streams.py

diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py
index e484746432af..74e385524dd5 100644
--- a/Lib/test/test_asyncio/test_streams.py
+++ b/Lib/test/test_asyncio/test_streams.py
@@ -1475,10 +1475,14 @@ def test_stream_server_start_serving(self):
 
     def test_stream_server_close(self):
         server_stream_aborted = False
-        fut = self.loop.create_future()
+        fut1 = self.loop.create_future()
+        fut2 = self.loop.create_future()
 
         async def handle_client(stream):
-            await fut
+            data = await stream.readexactly(4)
+            self.assertEqual(b'data', data)
+            fut1.set_result(None)
+            await fut2
             self.assertEqual(b'', await stream.readline())
             nonlocal server_stream_aborted
             server_stream_aborted = True
@@ -1486,7 +1490,8 @@ def test_stream_server_close(self):
         async def client(srv):
             addr = srv.sockets[0].getsockname()
             stream = await asyncio.connect(*addr)
-            fut.set_result(None)
+            await stream.write(b'data')
+            await fut2
             self.assertEqual(b'', await stream.readline())
             await stream.close()
 
@@ -1494,15 +1499,17 @@ def test_stream_server_close(self):
             async with asyncio.StreamServer(handle_client, '127.0.0.1', 0) as server:
                 await server.start_serving()
                 task = asyncio.create_task(client(server))
-                await fut
+                await fut1
+                fut2.set_result(None)
                 await server.close()
                 await task
 
         messages = []
         self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
-        self.loop.run_until_complete(test())
+        self.loop.run_until_complete(asyncio.wait_for(test(), 60.0))
         self.assertEqual(messages, [])
-        self.assertTrue(fut.done())
+        self.assertTrue(fut1.done())
+        self.assertTrue(fut2.done())
         self.assertTrue(server_stream_aborted)
 
     def test_stream_server_abort(self):
@@ -1538,7 +1545,7 @@ def test_stream_server_abort(self):
 
         messages = []
         self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
-        self.loop.run_until_complete(test())
+        self.loop.run_until_complete(asyncio.wait_for(test(), 60.0))
         self.assertEqual(messages, [])
         self.assertTrue(fut1.done())
         self.assertTrue(fut2.done())
@@ -1584,7 +1591,7 @@ def test_stream_shutdown_hung_task(self):
 
         messages = []
         self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
-        self.loop.run_until_complete(test())
+        self.loop.run_until_complete(asyncio.wait_for(test(), 60.0))
         self.assertEqual(messages, [])
         self.assertTrue(fut1.done())
         self.assertTrue(fut2.done())
@@ -1631,7 +1638,7 @@ def test_stream_shutdown_hung_task_prevents_cancellation(self):
 
         messages = []
         self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
-        self.loop.run_until_complete(test())
+        self.loop.run_until_complete(asyncio.wait_for(test(), 60.0))
         self.assertEqual(1, len(messages))
         self.assertRegex(messages[0]['message'],
                          "<Task pending .+ ignored cancellation request")



More information about the Python-checkins mailing list