Skip to content

Commit 19b1b3b

Browse files
committed
feat(test): more cancel tests
1 parent 27100f3 commit 19b1b3b

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

tests/test_cancel.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
import asyncio
2-
32
import pytest
4-
53
from async_lru import alru_cache
64

7-
85
@pytest.mark.parametrize("num_to_cancel", [0, 1, 2, 3])
96
async def test_cancel(num_to_cancel: int) -> None:
107
cache_item_task_finished = False
@@ -31,6 +28,27 @@ async def coro(val: int) -> int:
3128
await asyncio.sleep(3)
3229

3330
# check state
34-
assert cache_item_task_finished is num_to_cancel < 3
35-
assert all(task.cancelled() for task in tasks[:num_to_cancel])
36-
assert all(task.finished() for task in tasks[num_to_cancel:])
31+
assert cache_item_task_finished == (num_to_cancel < 3)
32+
33+
@pytest.mark.asyncio
34+
async def test_cancel_single_waiter_triggers_handle_cancelled_error():
35+
# This test ensures the _handle_cancelled_error path (waiters == 1) is exercised.
36+
cache_item_task_finished = False
37+
38+
@alru_cache
39+
async def coro(val: int) -> int:
40+
nonlocal cache_item_task_finished
41+
await asyncio.sleep(2)
42+
cache_item_task_finished = True
43+
return val
44+
45+
task = asyncio.create_task(coro(42))
46+
await asyncio.sleep(0)
47+
task.cancel()
48+
try:
49+
await task
50+
except asyncio.CancelledError:
51+
pass
52+
53+
# The underlying coroutine should be cancelled, so the flag should remain False
54+
assert cache_item_task_finished is False

0 commit comments

Comments
 (0)