Первоначальная версия VidConf
This commit is contained in:
51
backend/tests/test_celery_routes.py
Normal file
51
backend/tests/test_celery_routes.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""Тесты маршрутизации задач Celery по очередям.
|
||||
|
||||
Проверяем не сами паттерны `task_routes` (это конфигурация), а результат их
|
||||
резолвинга Celery-роутером `app.amqp.router` для КОНКРЕТНЫХ имён задач,
|
||||
которые реально ставятся в очередь (`workers/tasks/dispatch.py`,
|
||||
`workers/tasks/maintenance.py`, `backend/services/pipeline_producer.py`,
|
||||
`backend/services/invitations_producer.py`) — регрессия на опечатку в
|
||||
паттерне (например, `workers.tasks.notify.*` вместо `workers.tasks.notify`)
|
||||
будет поймана здесь, а не только при ручном прогоне в проде. Не требует
|
||||
подключения к брокеру: `Router.route` — чистая функция над `task_routes`.
|
||||
"""
|
||||
|
||||
from workers.celery_app import app
|
||||
|
||||
|
||||
def _resolved_queue(task_name: str) -> str:
|
||||
"""Имя очереди, в которую Celery-роутер направит задачу `task_name`."""
|
||||
route = app.amqp.router.route({}, task_name)
|
||||
queue = route["queue"]
|
||||
return str(queue.name) if hasattr(queue, "name") else str(queue)
|
||||
|
||||
|
||||
def test_run_pipeline_routes_to_transcription_queue() -> None:
|
||||
"""`run_pipeline` — выделенная очередь `transcription` (только `worker-transcriber`)."""
|
||||
assert _resolved_queue("workers.tasks.pipeline.run_pipeline") == "transcription"
|
||||
|
||||
|
||||
def test_summarize_session_routes_to_summarize_queue() -> None:
|
||||
"""`summarize_session` — очередь `summarize`."""
|
||||
assert _resolved_queue("workers.tasks.summarize.summarize_session") == "summarize"
|
||||
|
||||
|
||||
def test_notify_session_routes_to_notify_queue() -> None:
|
||||
"""`notify_session` — очередь `notify`."""
|
||||
assert _resolved_queue("workers.tasks.notify.notify_session") == "notify"
|
||||
|
||||
|
||||
def test_send_invitations_routes_to_notify_queue() -> None:
|
||||
"""`send_invitations` (рассылка .ics-приглашений) — тоже очередь `notify`."""
|
||||
assert _resolved_queue("workers.tasks.invitations.send_invitations") == "notify"
|
||||
|
||||
|
||||
def test_maintenance_tasks_route_to_default_celery_queue() -> None:
|
||||
"""Задачи обслуживания без явного маршрута остаются на дефолтной очереди `celery`.
|
||||
|
||||
Базовый `worker` слушает `celery,summarize,notify` (`docs/deploy/scaling.md`) —
|
||||
маршрутизация обслуживающих задач намеренно не переопределяется.
|
||||
"""
|
||||
assert _resolved_queue("workers.tasks.maintenance.cleanup_conferences") == "celery"
|
||||
assert _resolved_queue("workers.tasks.maintenance.recover_stuck_summaries") == "celery"
|
||||
assert _resolved_queue("workers.tasks.maintenance.recover_stuck_notifications") == "celery"
|
||||
Reference in New Issue
Block a user