Skip to content

Commit 619abba

Browse files
committed
ongoing
1 parent 9b08d01 commit 619abba

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

packages/service-library/tests/redis/test_semaphore.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def with_short_default_semaphore_ttl(
3737
) -> datetime.timedelta:
3838
short_ttl = datetime.timedelta(seconds=0.5)
3939
mocker.patch(
40-
"servicelib.redis._semaphore._DEFAULT_SEMAPHORE_TTL",
40+
"servicelib.redis._semaphore.DEFAULT_SEMAPHORE_TTL",
4141
short_ttl,
4242
)
4343
return short_ttl
@@ -99,6 +99,7 @@ async def test_semaphore_acquire_release_single(
9999
redis_client_sdk: RedisClientSDK,
100100
semaphore_name: str,
101101
semaphore_capacity: int,
102+
with_short_default_semaphore_ttl: datetime.timedelta,
102103
):
103104
semaphore = DistributedSemaphore(
104105
redis_client=redis_client_sdk,
@@ -143,6 +144,24 @@ async def test_semaphore_acquire_release_single(
143144
):
144145
await semaphore.reacquire()
145146

147+
# now check what happens once TTL is expired
148+
await semaphore.acquire()
149+
assert await semaphore.get_current_count() == 1
150+
assert await semaphore.get_available_count() == semaphore_capacity - 1
151+
await asyncio.sleep(with_short_default_semaphore_ttl.total_seconds() + 0.1)
152+
# TTL expired, reacquire should fail
153+
with pytest.raises(
154+
SemaphoreLostError,
155+
match=f"Semaphore '{semaphore_name}' was lost by this instance",
156+
):
157+
await semaphore.reacquire()
158+
# and release should also fail
159+
with pytest.raises(
160+
SemaphoreNotAcquiredError,
161+
match=f"Semaphore '{semaphore_name}' was not acquired by this instance",
162+
):
163+
await semaphore.release()
164+
146165

147166
async def test_semaphore_context_manager(
148167
redis_client_sdk: RedisClientSDK,

0 commit comments

Comments
 (0)