diff options
author | Yury Selivanov <yselivanov@sprymix.com> | 2015-08-06 13:59:28 -0400 |
---|---|---|
committer | Yury Selivanov <yselivanov@sprymix.com> | 2015-08-06 14:00:39 -0400 |
commit | f4111812967fded634637936225205f29035a449 (patch) | |
tree | d3b75387f118f1339fcfc21c19333366f05286af /tests | |
parent | f57cfc623ad37f35876c4336e051406f871976ed (diff) | |
download | trollius-git-f4111812967fded634637936225205f29035a449.tar.gz |
queues: Fix getter-cancellation with many pending getters code path
This commit fixes a typo in a method call and adds a unittest
to make sure that that code path is tested.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_queues.py | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/tests/test_queues.py b/tests/test_queues.py index 7c7d0ea..8e38175 100644 --- a/tests/test_queues.py +++ b/tests/test_queues.py @@ -322,7 +322,7 @@ class QueuePutTests(_QueueTestBase): q.put_nowait(1) self.assertEqual(1, q.get_nowait()) - def test_get_cancel_drop(self): + def test_get_cancel_drop_one_pending_reader(self): def gen(): yield 0.01 yield 0.1 @@ -350,6 +350,41 @@ class QueuePutTests(_QueueTestBase): # if we get 2, it means 1 got dropped! self.assertEqual(1, result) + def test_get_cancel_drop_many_pending_readers(self): + def gen(): + yield 0.01 + yield 0.1 + + loop = self.new_test_loop(gen) + loop.set_debug(True) + + q = asyncio.Queue(loop=loop) + + reader1 = loop.create_task(q.get()) + reader2 = loop.create_task(q.get()) + reader3 = loop.create_task(q.get()) + + loop.run_until_complete(asyncio.sleep(0.01, loop=loop)) + + q.put_nowait(1) + q.put_nowait(2) + reader1.cancel() + + try: + loop.run_until_complete(reader1) + except asyncio.CancelledError: + pass + + loop.run_until_complete(reader3) + + # reader2 will receive `2`, because it was added to the + # queue of pending readers *before* put_nowaits were called. + self.assertEqual(reader2.result(), 2) + # reader3 will receive `1`, because reader1 was cancelled + # before is had a chance to execute, and `2` was already + # pushed to reader2 by second `put_nowait`. + self.assertEqual(reader3.result(), 1) + def test_put_cancel_drop(self): def gen(): |