from __future__ import annotations import os import subprocess import time from pathlib import Path import pytest ROOT = Path(__file__).resolve().parents[3] SCRIPT = ROOT / "scripts" / "backup" / "sync-offsite-backups.sh" @pytest.mark.parametrize("name", ["backup-host188-products.sh", "backup-all.sh"]) def test_active_backup_guard_detects_direct_and_aggregate_runs( tmp_path: Path, name: str ) -> None: process = subprocess.Popen( ["bash", "-c", f"exec -a /backup/scripts/{name} sleep 30"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, ) try: time.sleep(0.1) env = os.environ.copy() env["BACKUP_BASE"] = str(tmp_path / "backup") result = subprocess.run( ["bash", "-c", f'source "{SCRIPT}"; active_backup_processes'], env=env, text=True, capture_output=True, check=True, ) assert f"/backup/scripts/{name}" in result.stdout finally: process.terminate() process.wait(timeout=5)