decomposer: generate files for Maintain only the latest check result for each monitored target in concurrency-safe memory and expose it through the specified FastAPI current-status endpoint.
This commit is contained in:
56
tests/test_concurrency.py
Normal file
56
tests/test_concurrency.py
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
|
from current_status import CurrentStatusCoordinator
|
||||||
|
|
||||||
|
|
||||||
|
async def test_older_overlapping_check_cannot_replace_newer_check() -> None:
|
||||||
|
coordinator = CurrentStatusCoordinator()
|
||||||
|
await coordinator.register_target("t")
|
||||||
|
release_old = asyncio.Event()
|
||||||
|
|
||||||
|
async def old(_target):
|
||||||
|
await release_old.wait()
|
||||||
|
return {"value": "old"}
|
||||||
|
|
||||||
|
async def new(_target):
|
||||||
|
return {"value": "new"}
|
||||||
|
|
||||||
|
old_task = asyncio.create_task(coordinator.run_check("t", {}, old))
|
||||||
|
await asyncio.sleep(0)
|
||||||
|
assert await coordinator.run_check("t", {}, new) is True
|
||||||
|
release_old.set()
|
||||||
|
assert await old_task is False
|
||||||
|
exists, status = await coordinator.read("t")
|
||||||
|
assert exists and status is not None
|
||||||
|
assert status["payload"] == {"value": "new"}
|
||||||
|
assert await coordinator.retained_status_count() == 1
|
||||||
|
|
||||||
|
|
||||||
|
async def test_delete_cleans_status_and_stale_check_cannot_resurrect_recreate() -> None:
|
||||||
|
coordinator = CurrentStatusCoordinator()
|
||||||
|
await coordinator.register_target("same-id")
|
||||||
|
|
||||||
|
async def initial(_target):
|
||||||
|
return {"value": "initial"}
|
||||||
|
|
||||||
|
assert await coordinator.run_check("same-id", {}, initial)
|
||||||
|
assert await coordinator.retained_status_count() == 1
|
||||||
|
|
||||||
|
release = asyncio.Event()
|
||||||
|
|
||||||
|
async def stale(_target):
|
||||||
|
await release.wait()
|
||||||
|
return {"value": "stale"}
|
||||||
|
|
||||||
|
stale_task = asyncio.create_task(coordinator.run_check("same-id", {}, stale))
|
||||||
|
await asyncio.sleep(0)
|
||||||
|
assert await coordinator.delete_target("same-id")
|
||||||
|
assert await coordinator.retained_status_count() == 0
|
||||||
|
await coordinator.register_target("same-id")
|
||||||
|
release.set()
|
||||||
|
|
||||||
|
assert await stale_task is False
|
||||||
|
exists, status = await coordinator.read("same-id")
|
||||||
|
assert exists is True
|
||||||
|
assert status is None
|
||||||
|
assert await coordinator.retained_status_count() == 0
|
||||||
Reference in New Issue
Block a user