From 6491fdd53876ece560d7631ac57656ad07773fd5 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 4 Oct 2026 03:29:28 +0400 Subject: [PATCH] =?UTF-8?q?test:=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=D0=BE=D1=80=D0=BA=D0=B5=D1=80=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=81=D0=BD=D1=8F=D1=82=D1=8B=D0=BC=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B0=D0=BC=20=D0=B8=20=D1=83=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B9=D1=87=D0=B8=D0=B2=D1=8B=D0=B9=20teardown=20uploads?= =?UTF-8?q?=20(T10.1,=20T10.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- api/tests/integration/test_roundtrip.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/api/tests/integration/test_roundtrip.py b/api/tests/integration/test_roundtrip.py index 5ab7241..b85bc4a 100644 --- a/api/tests/integration/test_roundtrip.py +++ b/api/tests/integration/test_roundtrip.py @@ -15,6 +15,7 @@ Spec tabular-recognition-service: «Ack раньше результата», « """ import asyncio +import contextlib import copy import importlib import io @@ -166,9 +167,13 @@ async def uploads() -> AsyncIterator[Uploads]: try: yield store finally: - for bucket, key in store.keys: - await client.remove_object(bucket, key) - await client.close_session() + try: + for bucket, key in store.keys: + # сбой удаления одного объекта не должен оставлять в MinIO остальные + with contextlib.suppress(Exception): + await client.remove_object(bucket, key) + finally: + await client.close_session() @pytest.fixture @@ -176,13 +181,17 @@ async def service(monkeypatch: pytest.MonkeyPatch) -> AsyncIterator[None]: """Приложение в процессе теста: lifespan с `NATS_ENABLED=True` (в `.env.test` — false); выход — остановка.""" monkeypatch.setattr(app_module.settings, "NATS_ENABLED", True) application = app_module.app + tasks: list[asyncio.Task[None]] = [] async with application.router.lifespan_context(application): if not await application.state.nats.wait_ready(READY_TIMEOUT): pytest.fail( f"NATS недоступен ({app_module.settings.OPENBAO.NATS.NATS_URL}, .env.test; make up)", pytrace=False ) + tasks = list(application.state.worker._tasks) yield - assert application.state.worker._tasks == [], "рабочие корутины воркера не остановлены" + # `_tasks` обнуляется в `stop()` безусловно — проверяем сами задачи, снятые до выхода из lifespan + assert tasks, "воркер не запустил рабочие корутины" + assert all(t.done() for t in tasks), "рабочие корутины воркера не остановлены" @pytest.fixture