fix(tests): clear diagnostic_mode _bg_tasks between cases
test_fallback_task_retained_until_fire asserts len(_bg_tasks) == 1, but the set carries pending tasks from earlier tests' fallback schedules, so the assertion saw the accumulated count instead. Drop the references (no .cancel() — the tasks belong to closed loops, cross-loop cancel raises RuntimeError on the next test's setup).
This commit is contained in:
@@ -23,11 +23,23 @@ from fastapi.testclient import TestClient
|
|||||||
|
|
||||||
|
|
||||||
def _reset_state() -> None:
|
def _reset_state() -> None:
|
||||||
"""Clear the module-level ``_active`` dict between tests so prior
|
"""Clear the module-level ``_active`` dict and any pending fallback
|
||||||
activations don't bleed across cases."""
|
tasks between tests so prior activations don't bleed across cases.
|
||||||
|
|
||||||
|
The ``_bg_tasks`` set retains tasks created via the asyncio-fallback
|
||||||
|
schedule path; without this, a test that schedules a 30-minute revert
|
||||||
|
leaves a pending task that inflates the ``len(_bg_tasks)`` invariant
|
||||||
|
checked by ``test_fallback_task_retained_until_fire``.
|
||||||
|
"""
|
||||||
from notify_bridge_server.services import diagnostic_mode as svc
|
from notify_bridge_server.services import diagnostic_mode as svc
|
||||||
|
|
||||||
svc._active.clear()
|
svc._active.clear()
|
||||||
|
# ``_bg_tasks`` from a previous test belong to that test's now-closed
|
||||||
|
# event loop — calling ``.cancel()`` here crosses loops and raises
|
||||||
|
# ``RuntimeError: Event loop is closed``. Dropping the references is
|
||||||
|
# enough: the tasks can't fire on a dead loop, and CPython will GC
|
||||||
|
# them once the prior loop releases them.
|
||||||
|
svc._bg_tasks.clear()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user