async def test_ok__region__access_one() -> None: region = AioExclusiveRegion(RegionIsBusyError) async def func() -> None: assert not region.is_busy() async with region: assert region.is_busy() assert not region.is_busy() await func() assert not region.is_busy() await region.exit() assert not region.is_busy()
async def test_fail__region__access_one() -> None: region = AioExclusiveRegion(RegionIsBusyError) async def func() -> None: assert not region.is_busy() async with region: assert region.is_busy() await region.enter() assert not region.is_busy() with pytest.raises(RegionIsBusyError): await func() assert not region.is_busy() await region.exit() assert not region.is_busy()
async def test_ok__region__access_two() -> None: region = AioExclusiveRegion(RegionIsBusyError) async def func1() -> None: async with region: await asyncio.sleep(1) print("done func1()") async def func2() -> None: await asyncio.sleep(2) print("waiking up func2()") async with region: await asyncio.sleep(1) print("done func2()") await asyncio.gather(func1(), func2()) assert not region.is_busy() await region.exit() assert not region.is_busy()
async def test_fail__region__access_two() -> None: region = AioExclusiveRegion(RegionIsBusyError) async def func1() -> None: async with region: await asyncio.sleep(2) print("done func1()") async def func2() -> None: await asyncio.sleep(1) async with region: await asyncio.sleep(1) print("done func2()") results = await asyncio.gather(func1(), func2(), return_exceptions=True) assert results[0] is None assert type(results[1]) == RegionIsBusyError # pylint: disable=unidiomatic-typecheck assert not region.is_busy() await region.exit() assert not region.is_busy()