"""AnalysisScheduler: shared budget + bounded pool sanity checks."""
from app.services.analysis_scheduler import analysis_scheduler
def test_pool_runs_job():
fut = analysis_scheduler.run(lambda: 42)
assert fut.result(timeout=5) == 42
def test_token_bucket_drains():
# Burning without a pause should empty the global budget and it must be
# exhausted for a moment rather than never returning False.
for _ in range(1000):
analysis_scheduler.try_acquire()
assert analysis_scheduler.try_acquire() is False
def test_available_is_bounded():
cap = analysis_scheduler._capacity
assert 0.0 <= analysis_scheduler.available() <= cap + 0.01