Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7d01747

Browse filesBrowse files
committed
Update tests
1 parent 05700d5 commit 7d01747
Copy full SHA for 7d01747

File tree

Expand file treeCollapse file tree

1 file changed

+93
-76
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+93
-76
lines changed

‎Lib/test/test_asyncio/test_queues.py

Copy file name to clipboardExpand all lines: Lib/test/test_asyncio/test_queues.py
+93-76Lines changed: 93 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -525,35 +525,29 @@ class PriorityQueueJoinTests(_QueueJoinTestMixin, unittest.IsolatedAsyncioTestCa
525525
class _QueueShutdownTestMixin:
526526
q_class = None
527527

528-
async def _get(self, q, go, results):
529-
await go.wait()
530-
try:
531-
msg = await q.get()
532-
results.append(True)
533-
return msg
534-
except asyncio.QueueShutDown:
535-
results.append(False)
536-
return False
528+
async def asyncSetUp(self):
529+
await super().asyncSetUp()
530+
self.delay = 0.001
537531

538-
async def _get_shutdown(self, q, go, results):
532+
async def _get(self, q, go, results, shutdown=False):
539533
await go.wait()
540534
try:
541535
msg = await q.get()
542-
results.append(False)
536+
results.append(not shutdown)
543537
return msg
544538
except asyncio.QueueShutDown:
545-
results.append(True)
546-
return False
539+
results.append(shutdown)
540+
return shutdown
547541

548-
async def _get_nowait(self, q, go, results):
542+
async def _get_nowait(self, q, go, results, shutdown=False):
549543
await go.wait()
550544
try:
551545
msg = q.get_nowait()
552-
results.append(True)
546+
results.append(not shutdown)
553547
return msg
554548
except asyncio.QueueShutDown:
555-
results.append(False)
556-
return False
549+
results.append(shutdown)
550+
return shutdown
557551

558552
async def _get_task_done(self, q, go, results):
559553
await go.wait()
@@ -566,64 +560,45 @@ async def _get_task_done(self, q, go, results):
566560
results.append(False)
567561
return False
568562

569-
async def _get_nowait_shutdown(self, q, go, results):
570-
await go.wait()
571-
try:
572-
msg = q.get_nowait()
573-
results.append(False)
574-
except asyncio.QueueShutDown:
575-
results.append(True)
576-
return True
577-
578-
async def _put_shutdown(self, q, go, msg, results):
563+
async def _put(self, q, go, msg, results, shutdown=False):
579564
await go.wait()
580565
try:
581566
await q.put(msg)
582-
results.append(False)
567+
results.append(not shutdown)
568+
return not shutdown
583569
except asyncio.QueueShutDown:
584-
results.append(True)
585-
return msg
570+
results.append(shutdown)
571+
return shutdown
586572

587-
async def _put_nowait_shutdown(self, q, go, msg, results):
573+
async def _put_nowait(self, q, go, msg, results, shutdown=False):
588574
await go.wait()
589575
try:
590576
q.put_nowait(msg)
591577
results.append(False)
578+
return not shutdown
592579
except asyncio.QueueShutDown:
593580
results.append(True)
594-
return msg
581+
return shutdown
595582

596583
async def _shutdown(self, q, go, immediate):
597-
await asyncio.sleep(0.001)
598584
q.shutdown(immediate)
599-
await asyncio.sleep(0.001)
585+
await asyncio.sleep(self.delay)
600586
go.set()
601-
await asyncio.sleep(0.001)
587+
await asyncio.sleep(self.delay)
602588

603-
async def _join(self, q, go, results):
604-
await go.wait()
589+
async def _join(self, q, results, shutdown=False):
605590
try:
606591
await q.join()
607-
results.append(True)
592+
results.append(not shutdown)
608593
return True
609594
except asyncio.QueueShutDown:
610-
results.append(False)
611-
return False
612-
613-
async def _join_shutdown(self, q, go, results):
614-
await go.wait()
615-
try:
616-
await q.join()
617-
results.append(False)
595+
results.append(shutdown)
618596
return False
619-
except asyncio.QueueShutDown:
620-
results.append(True)
621-
return True
622597
except asyncio.CancelledError:
623-
results.append(True)
598+
results.append(shutdown)
624599
raise
625600

626-
async def test_empty(self):
601+
async def test_shutdown_empty(self):
627602
q = self.q_class()
628603
q.shutdown()
629604
with self.assertRaises(
@@ -635,7 +610,7 @@ async def test_empty(self):
635610
):
636611
await q.get()
637612

638-
async def test_nonempty(self):
613+
async def test_shutdown_nonempty(self):
639614
q = self.q_class()
640615
q.put_nowait("data")
641616
q.shutdown()
@@ -645,7 +620,7 @@ async def test_nonempty(self):
645620
):
646621
await q.get()
647622

648-
async def test_immediate(self):
623+
async def test_shutdown_immediate(self):
649624
q = self.q_class()
650625
q.put_nowait("data")
651626
q.shutdown(immediate=True)
@@ -679,8 +654,46 @@ async def test_shutdown_allowed_transitions(self):
679654
q.shutdown(immediate=False)
680655
self.assertNotEqual("shutdown", q._shutdown_state.value)
681656

657+
async def _shutdown_all_methods(self, immediate):
658+
q = asyncio.Queue()
659+
await q.put("L")
660+
q.put_nowait("O")
661+
q.shutdown(immediate)
662+
with self.assertRaises(asyncio.QueueShutDown):
663+
await q.put("E")
664+
with self.assertRaises(asyncio.QueueShutDown):
665+
q.put_nowait("W")
666+
667+
if immediate:
668+
with self.assertRaises(asyncio.QueueShutDown):
669+
await q.get()
670+
with self.assertRaises(asyncio.QueueShutDown):
671+
q.get_nowait()
672+
with self.assertRaises(asyncio.QueueShutDown):
673+
q.task_done()
674+
with self.assertRaises(asyncio.QueueShutDown):
675+
await q.join()
676+
else:
677+
self.assertIn(await q.get(), "LO")
678+
q.task_done()
679+
self.assertIn(q.get_nowait(), "LO")
680+
q.task_done()
681+
await q.join()
682+
# on shutdown(immediate=False)
683+
# when queue is empty, should raise ShutDown Exception
684+
with self.assertRaises(asyncio.QueueShutDown):
685+
await q.get()
686+
with self.assertRaises(asyncio.QueueShutDown):
687+
q.get_nowait()
688+
689+
async def test_shutdown_all_methods(self):
690+
return await self._shutdown_all_methods(False)
691+
692+
async def test_shutdown_immediate_get(self):
693+
return await self._shutdown_all_methods(True)
694+
682695
async def _shutdown_putters(self, immediate):
683-
delay = 0.001
696+
delay = self.delay
684697
q = self.q_class(2)
685698
results = []
686699
await q.put("E")
@@ -702,11 +715,13 @@ async def test_shutdown_immediate_putters_deque(self):
702715
return await self._shutdown_putters(True)
703716

704717
async def _shutdown_getters(self, immediate):
705-
delay = 0.001
718+
delay = self.delay
706719
q = self.q_class(1)
707720
results = []
708721
await q.put("Y")
722+
nb = q.qsize()
709723
# queue full
724+
710725
asyncio.create_task(q.get())
711726
await asyncio.sleep(delay)
712727
t = asyncio.create_task(q.get())
@@ -723,14 +738,16 @@ async def _shutdown_getters(self, immediate):
723738
q.shutdown(immediate)
724739
await asyncio.sleep(delay)
725740
self.assertTrue(q._getters)
741+
self.assertEqual(q._unfinished_tasks, nb)
742+
726743

727744
async def test_shutdown_getters_deque(self):
728745
return await self._shutdown_getters(False)
729746

730747
async def test_shutdown_immediate_getters_deque(self):
731748
return await self._shutdown_getters(True)
732749

733-
async def _shutdown_get_nowait(self, immediate):
750+
async def _shutdown_get(self, immediate):
734751
q = self.q_class(2)
735752
results = []
736753
go = asyncio.Event()
@@ -741,11 +758,13 @@ async def _shutdown_get_nowait(self, immediate):
741758

742759
if immediate:
743760
coros = (
744-
(self._get_nowait_shutdown(q, go, results)),
745-
(self._get_nowait_shutdown(q, go, results)),
761+
(self._get(q, go, results, shutdown=True)),
762+
(self._get_nowait(q, go, results, shutdown=True)),
746763
)
747764
else:
748765
coros = (
766+
# one of these tasks shoud raise Shutdown
767+
(self._get(q, go, results)),
749768
(self._get_nowait(q, go, results)),
750769
(self._get_nowait(q, go, results)),
751770
)
@@ -754,20 +773,18 @@ async def _shutdown_get_nowait(self, immediate):
754773
t.append(asyncio.create_task(coro))
755774
t.append(asyncio.create_task(self._shutdown(q, go, immediate)))
756775
res = await asyncio.gather(*t)
757-
758-
self.assertEqual(results, [True]*len(coros))
759-
self.assertEqual(len(q._putters), 0)
760776
if immediate:
761-
self.assertEqual(len(q._getters), 0)
762-
self.assertEqual(q._unfinished_tasks, nb)
777+
self.assertEqual(results, [True]*len(coros))
778+
else:
779+
self.assertListEqual(sorted(results), [False] + [True]*(len(coros)-1))
763780

764-
async def test_shutdown_get_nowait(self):
765-
return await self._shutdown_get_nowait(False)
781+
async def test_shutdown_get(self):
782+
return await self._shutdown_get(False)
766783

767-
async def test_shutdown_immediate_get_nowait(self):
768-
return await self._shutdown_get_nowait(True)
784+
async def test_shutdown_immediate_get(self):
785+
return await self._shutdown_get(True)
769786

770-
async def test_shutdown_get_task_done_join(self, immediate=False):
787+
async def test_shutdown_get_task_done_join(self):
771788
q = self.q_class(2)
772789
results = []
773790
go = asyncio.Event()
@@ -780,8 +797,8 @@ async def test_shutdown_get_task_done_join(self, immediate=False):
780797
coros = (
781798
(self._get_task_done(q, go, results)),
782799
(self._get_task_done(q, go, results)),
783-
(self._join(q, go, results)),
784-
(self._join(q, go, results)),
800+
(self._join(q, results)),
801+
(self._join(q, results)),
785802
)
786803
t = []
787804
for coro in coros:
@@ -802,8 +819,8 @@ async def _shutdown_put(self, immediate):
802819
# queue not empty
803820

804821
coros = (
805-
(self._put_shutdown(q, go, "Y", results)),
806-
(self._put_nowait_shutdown(q, go, "D", results)),
822+
(self._put(q, go, "Y", results, shutdown=True)),
823+
(self._put_nowait(q, go, "D", results, shutdown=True)),
807824
)
808825
t = []
809826
for coro in coros:
@@ -835,9 +852,9 @@ async def _cancel_join_task(q, delay, t):
835852
q._finished.set()
836853

837854
coros = (
838-
(self._put_shutdown(q, go, "E", results)),
839-
(self._put_nowait_shutdown(q, go, "W", results)),
840-
(self._join_shutdown(q, go, results)),
855+
(self._put(q, go, "E", results, shutdown=True)),
856+
(self._put_nowait(q, go, "W", results, shutdown=True)),
857+
(self._join(q, results, shutdown=True)),
841858
)
842859
t = []
843860
for coro in coros:
@@ -855,7 +872,7 @@ async def _cancel_join_task(q, delay, t):
855872
self.assertEqual(results, [True]*len(coros))
856873
self.assertTrue(q._finished.is_set())
857874

858-
async def test_shutdown_put_and_join(self):
875+
async def test_shutdown_put_join(self):
859876
return await self._shutdown_put_join(False)
860877

861878
async def test_shutdown_immediate_put_and_join(self):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.