fix(airflow): исправлен запуск пульта на свежем стенде
- Зачем: - свежий стенд должен доходить до generator_control без скрытых ручных шагов и зависаний. - Что: - quick start явно готовит DDL и откладывает Superset init до готового DM. - generator_control проверяет паузу etl_pipeline до мутирующих шагов. - make up пересобирает Airflow и поднимает базовый набор сервисов. - Проверка: - make generator-test; docker compose config --quiet; make clean; make up; make ddl.
This commit is contained in:
@@ -42,12 +42,83 @@ def test_dag_branches_and_waits_for_etl_completion():
|
||||
|
||||
assert "BranchPythonOperator" in text
|
||||
assert "TriggerDagRunOperator" in text
|
||||
assert 'trigger_dag_id="etl_pipeline"' in text
|
||||
assert "trigger_dag_id=ETL_DAG_ID" in text
|
||||
assert "wait_for_completion=True" in text
|
||||
assert 'allowed_states=["success"]' in text
|
||||
assert 'failed_states=["failed"]' in text
|
||||
|
||||
|
||||
def test_generator_control_prechecks_etl_dag_not_paused_before_waiting():
|
||||
"""Пульт проверяет паузу etl_pipeline до долгого ожидания."""
|
||||
text = DAG_PATH.read_text(encoding="utf-8")
|
||||
|
||||
assert "assert_target_dag_not_paused" in text
|
||||
assert 'ETL_DAG_ID = "etl_pipeline"' in text
|
||||
assert 'op_kwargs={"dag_id": ETL_DAG_ID}' in text
|
||||
assert "session.query(DagModel)" in text
|
||||
assert "DagModel.dag_id == dag_id" in text
|
||||
assert "Airflow 2.10.5" in text
|
||||
assert "fail_when_dag_is_paused" in text
|
||||
assert "снимите паузу" in text
|
||||
assert 'return "check_etl_not_paused_before_backfill"' in text
|
||||
assert 'return "check_etl_not_paused_before_import"' in text
|
||||
assert "check_etl_not_paused_before_backfill >> precheck_backfill_task" in text
|
||||
assert "check_etl_not_paused_before_import >> precheck_import_task" in text
|
||||
assert text.index("check_etl_not_paused_before_backfill >> precheck_backfill_task") < text.index(
|
||||
"precheck_backfill_task >> backfill_task"
|
||||
)
|
||||
assert text.index("check_etl_not_paused_before_import >> precheck_import_task") < text.index(
|
||||
"precheck_import_task >> import_task"
|
||||
)
|
||||
|
||||
|
||||
def test_make_up_rebuilds_airflow_images_after_repo_update():
|
||||
"""make up пересобирает Airflow, но не запускает Superset до DM."""
|
||||
text = (REPO_ROOT / "Makefile").read_text(encoding="utf-8")
|
||||
|
||||
up_block = text.split("\nup:\n", maxsplit=1)[1].split(
|
||||
"\n\n# Остановить",
|
||||
maxsplit=1,
|
||||
)[0]
|
||||
assert "$(COMPOSE) up -d --build" in up_block
|
||||
assert "airflow-webserver" in up_block
|
||||
assert "airflow-scheduler" in up_block
|
||||
assert "superset" not in up_block
|
||||
assert "superset-init" not in up_block
|
||||
|
||||
|
||||
def test_readme_quick_start_lists_prerequisites_and_runs_ddl_before_generator_control():
|
||||
"""Быстрый старт называет инструменты и DDL до generator_control."""
|
||||
text = (REPO_ROOT / "README.md").read_text(encoding="utf-8")
|
||||
|
||||
assert "uv" in text
|
||||
assert "Docker" in text
|
||||
assert "docker compose" in text
|
||||
assert "make up\nmake ddl" in text
|
||||
assert text.index("make ddl") < text.index("generator_control")
|
||||
|
||||
|
||||
def test_course_readme_lists_uv_before_first_command():
|
||||
"""Курс называет uv до первой команды."""
|
||||
text = (REPO_ROOT / "docs" / "course" / "README.md").read_text(encoding="utf-8")
|
||||
|
||||
assert "uv" in text
|
||||
assert text.index("uv") < text.index("make generated-history-analytics")
|
||||
|
||||
|
||||
def test_startup_history_runbook_warns_about_daily_wave_idle_gap():
|
||||
"""Runbook предупреждает о дыре модельного времени при простое daily-wave."""
|
||||
text = (REPO_ROOT / "docs" / "runbooks" / "startup-history.md").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
|
||||
assert "daily-wave" in text
|
||||
assert "прост" in text
|
||||
assert "дыр" in text
|
||||
assert "make generator-reset" in text
|
||||
assert "startup-history-import" in text
|
||||
|
||||
|
||||
def test_no_docker_or_continue_operation_in_dag():
|
||||
"""Пульт не управляет Docker и не содержит операцию continue."""
|
||||
text = DAG_PATH.read_text(encoding="utf-8")
|
||||
|
||||
Reference in New Issue
Block a user