Files
NotesAgentic/server sync/tests/test_readiness.py
T
admin d703ab64e3
CI / docs-check (push) Canceled after 0s
CI / backend-test (push) Canceled after 0s
CI / service-test (push) Canceled after 0s
CI / frontend-test (push) Canceled after 0s
CI / rust-core (push) Canceled after 0s
CI / docs-check (pull_request) Canceled after 0s
CI / backend-test (pull_request) Canceled after 0s
CI / service-test (pull_request) Canceled after 0s
CI / frontend-test (pull_request) Canceled after 0s
CI / rust-core (pull_request) Canceled after 0s
docs: 将仓库代码注释统一为中文
2026-09-10 00:40:56 +08:00

57 lines
1.9 KiB
Python

"""有限制的工作线程使用、请求取消、缓存故障和恢复。"""
import asyncio
from threading import Event
from sync_server.readiness import Readiness
def test_timeout_and_cancel_never_spawn_overlapping_dependency_probes():
entered, release = Event(), Event()
calls = []
def slow():
calls.append(1)
entered.set()
if not release.wait(10):
raise TimeoutError("fixture was not released")
raise OSError("late dependency exception must be consumed")
async def run():
ready = Readiness(slow, timeout=.01, cache_seconds=0)
request = asyncio.create_task(ready.check())
try:
while not entered.is_set():
await asyncio.sleep(.001)
request.cancel()
await asyncio.gather(request, return_exceptions=True)
assert ready.running is not None and not ready.running.done()
assert await asyncio.gather(*(ready.check() for _ in range(20))) == [False] * 20
assert len(calls) == 1
finally:
release.set()
await asyncio.gather(ready.running, return_exceptions=True)
# 已完成的失败探测不会阻止新的健康尝试。
ready.probe = lambda: None
assert await ready.check() is True
asyncio.run(run())
def test_success_and_failure_cache_then_refresh():
calls = []
def probe():
calls.append(1)
if len(calls) == 1:
raise OSError("controlled dependency outage")
async def run():
ready = Readiness(probe, cache_seconds=.02)
assert await ready.check() is False
assert await asyncio.gather(*(ready.check() for _ in range(20))) == [False] * 20
assert len(calls) == 1
await asyncio.sleep(.03)
assert await ready.check() is True
assert await ready.check() is True
assert len(calls) == 2
asyncio.run(run())