diff options
author | Maxim Devaev <[email protected]> | 2022-08-07 18:42:00 +0300 |
---|---|---|
committer | Maxim Devaev <[email protected]> | 2022-08-07 18:42:00 +0300 |
commit | aa630988cc09f31d412a62c5480d4bec1a7c626e (patch) | |
tree | 7e61031827ddcbfc56d049ffa336ac664d3c5c8b /testenv | |
parent | d995349b6311bf06b77ac0e8ccc4a424112feeb0 (diff) |
aiotools.shield_fg()
Diffstat (limited to 'testenv')
-rw-r--r-- | testenv/tests/test_aiotools.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/testenv/tests/test_aiotools.py b/testenv/tests/test_aiotools.py index 23bc99c0..9ccaee0a 100644 --- a/testenv/tests/test_aiotools.py +++ b/testenv/tests/test_aiotools.py @@ -22,9 +22,12 @@ import asyncio +from typing import List + import pytest from kvmd.aiotools import AioExclusiveRegion +from kvmd.aiotools import shield_fg # ===== @@ -115,3 +118,34 @@ async def test_fail__region__access_two() -> None: assert not region.is_busy() await region.exit() assert not region.is_busy() + + +# ===== +async def test_ok__shield_fg() -> None: + ops: List[str] = [] + + async def foo(op: str, delay: float) -> None: # pylint: disable=disallowed-name + await asyncio.sleep(delay) + ops.append(op) + + async def bar() -> None: # pylint: disable=disallowed-name + try: + try: + try: + raise RuntimeError() + finally: + await shield_fg(foo("foo1", 2.0)) + ops.append("foo1-noexc") + finally: + await shield_fg(foo("foo2", 1.0)) + ops.append("foo2-noexc") + finally: + ops.append("done") + + task = asyncio.create_task(bar()) + await asyncio.sleep(0.1) + task.cancel() + with pytest.raises(asyncio.CancelledError): + await task + assert ops == ["foo1", "foo2", "foo2-noexc", "done"] |