]> granicus.if.org Git - python/commitdiff
Issue #21163, asyncio: Fix some "Task was destroyed but it is pending!" logs in tests
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 25 Jun 2014 21:11:21 +0000 (23:11 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 25 Jun 2014 21:11:21 +0000 (23:11 +0200)
Lib/test/test_asyncio/test_locks.py
Lib/test/test_asyncio/test_queues.py
Lib/test/test_asyncio/test_tasks.py

index 9d50a71f4e18526410ab9479444d63c44ccd9c80..8ad148634a21e263f6ac5146ede0444701848c41 100644 (file)
@@ -783,6 +783,7 @@ class SemaphoreTests(test_utils.TestCase):
 
         # cleanup locked semaphore
         sem.release()
+        self.loop.run_until_complete(t4)
 
     def test_acquire_cancel(self):
         sem = asyncio.Semaphore(loop=self.loop)
index 32c90f4737e87867cc98c4743a0a688af870f527..3d4ac51df4e794baca88afdbe079e92fa608b266 100644 (file)
@@ -362,16 +362,21 @@ class QueuePutTests(_QueueTestBase):
     def test_put_cancelled_race(self):
         q = asyncio.Queue(loop=self.loop, maxsize=1)
 
-        asyncio.Task(q.put('a'), loop=self.loop)
-        asyncio.Task(q.put('c'), loop=self.loop)
-        t = asyncio.Task(q.put('b'), loop=self.loop)
+        put_a = asyncio.Task(q.put('a'), loop=self.loop)
+        put_b = asyncio.Task(q.put('b'), loop=self.loop)
+        put_c = asyncio.Task(q.put('X'), loop=self.loop)
 
         test_utils.run_briefly(self.loop)
-        t.cancel()
+        self.assertTrue(put_a.done())
+        self.assertFalse(put_b.done())
+
+        put_c.cancel()
         test_utils.run_briefly(self.loop)
-        self.assertTrue(t.done())
+        self.assertTrue(put_c.done())
         self.assertEqual(q.get_nowait(), 'a')
-        self.assertEqual(q.get_nowait(), 'c')
+        self.assertEqual(q.get_nowait(), 'b')
+
+        self.loop.run_until_complete(put_b)
 
     def test_put_with_waiting_getters(self):
         q = asyncio.Queue(loop=self.loop)
@@ -431,18 +436,20 @@ class JoinableQueueTests(_QueueTestBase):
 
         @asyncio.coroutine
         def test():
-            for _ in range(2):
-                asyncio.Task(worker(), loop=self.loop)
+            tasks = [asyncio.Task(worker(), loop=self.loop)
+                     for index in range(2)]
 
             yield from q.join()
+            return tasks
 
-        self.loop.run_until_complete(test())
+        tasks = self.loop.run_until_complete(test())
         self.assertEqual(sum(range(100)), accumulator)
 
         # close running generators
         running = False
-        for i in range(2):
+        for i in range(len(tasks)):
             q.put_nowait(0)
+        self.loop.run_until_complete(asyncio.wait(tasks, loop=self.loop))
 
     def test_join_empty_queue(self):
         q = asyncio.JoinableQueue(loop=self.loop)
index 78517450d17de6ad095779714008b577f07541a4..3a23d72136378e267ed639442d788ceb374862c7 100644 (file)
@@ -1763,16 +1763,14 @@ class CoroutineGatherTests(GatherTestsBase, test_utils.TestCase):
         gen2 = coro()
         fut = asyncio.gather(gen1, gen2)
         self.assertIs(fut._loop, self.one_loop)
-        gen1.close()
-        gen2.close()
+        self.one_loop.run_until_complete(fut)
 
         self.set_event_loop(self.other_loop, cleanup=False)
         gen3 = coro()
         gen4 = coro()
-        fut = asyncio.gather(gen3, gen4, loop=self.other_loop)
-        self.assertIs(fut._loop, self.other_loop)
-        gen3.close()
-        gen4.close()
+        fut2 = asyncio.gather(gen3, gen4, loop=self.other_loop)
+        self.assertIs(fut2._loop, self.other_loop)
+        self.other_loop.run_until_complete(fut2)
 
     def test_duplicate_coroutines(self):
         @asyncio.coroutine