import os import subprocess import pytest from core.backup import ( DatabaseSnapshot, DatabaseTarget, _read_snapshot, run_synthetic_restore_verification, ) def test_backup_configuration_is_allow_gated(settings): assert settings.BACKUP_ROOT == "/app/backups" if not os.environ.get("BACKUP_SOURCE_HOST"): assert settings.BACKUP_VERIFY_ALLOWED is False def test_application_image_installs_matching_postgresql_client(): result = subprocess.run( ["pg_dump", "--version"], check=True, capture_output=True, text=True ) assert result.stdout.startswith("pg_dump (PostgreSQL) 17.") @pytest.mark.skipif( not all( os.environ.get(name) for name in ( "BACKUP_SOURCE_HOST", "BACKUP_SOURCE_NAME", "BACKUP_SOURCE_USER", "BACKUP_SOURCE_PASSWORD", ) ), reason="requires the backup profile's disposable databases", ) def test_synthetic_restore_is_repeatable_and_leaves_both_databases_empty( settings, django_db_blocker ): with django_db_blocker.unblock(): first = run_synthetic_restore_verification() second = run_synthetic_restore_verification() source = DatabaseTarget( host=os.environ["BACKUP_SOURCE_HOST"], port=os.environ.get("BACKUP_SOURCE_PORT", "5432"), name=os.environ["BACKUP_SOURCE_NAME"], user=os.environ["BACKUP_SOURCE_USER"], password=os.environ["BACKUP_SOURCE_PASSWORD"], ) target = DatabaseTarget.from_default(settings.DATABASES["default"]) empty = DatabaseSnapshot(migrations=(), row_counts={}) assert first.row_counts == second.row_counts assert _read_snapshot(source) == empty assert _read_snapshot(target) == empty