첫 커밋: 로컬 프로젝트 업로드
This commit is contained in:
76
baron-sso/test/backup_make_targets_test.sh
Normal file
76
baron-sso/test/backup_make_targets_test.sh
Normal file
@@ -0,0 +1,76 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
|
||||
fail() {
|
||||
echo "ERROR: $*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
assert_dry_run_contains() {
|
||||
local output="$1"
|
||||
local expected="$2"
|
||||
grep -Fq -- "$expected" <<<"$output" || fail "dry-run output must contain: $expected"
|
||||
}
|
||||
|
||||
grep -Fq "FROM debian:trixie-slim" "$repo_root/docker/backup-tools/Dockerfile" \
|
||||
|| fail "backup-tools image must be based on debian:trixie-slim."
|
||||
grep -Fq "zstd" "$repo_root/docker/backup-tools/Dockerfile" \
|
||||
|| fail "backup-tools image must include zstd so restore does not depend on the host."
|
||||
grep -Fq "docker-cli" "$repo_root/docker/backup-tools/Dockerfile" \
|
||||
|| fail "backup-tools image must include docker CLI for containerized dump/restore orchestration."
|
||||
grep -Fq "perl" "$repo_root/docker/backup-tools/Dockerfile" \
|
||||
|| fail "backup-tools image must include perl for legacy ClickHouse schema dump decoding."
|
||||
|
||||
dump_dry_run="$(
|
||||
make --dry-run --always-make -C "$repo_root" dump DUMP_SERVICES="postgres,config" DUMP_MODE="maintenance" 2>&1
|
||||
)"
|
||||
|
||||
assert_dry_run_contains "$dump_dry_run" "docker build"
|
||||
assert_dry_run_contains "$dump_dry_run" "docker run"
|
||||
assert_dry_run_contains "$dump_dry_run" "baron-sso-backup-tools:local"
|
||||
assert_dry_run_contains "$dump_dry_run" "--env-file .env"
|
||||
assert_dry_run_contains "$dump_dry_run" "/var/run/docker.sock:/var/run/docker.sock"
|
||||
assert_dry_run_contains "$dump_dry_run" "/tmp:/tmp"
|
||||
assert_dry_run_contains "$dump_dry_run" "scripts/backup/dump.sh"
|
||||
assert_dry_run_contains "$dump_dry_run" "DUMP_SERVICES=\"postgres,config\""
|
||||
assert_dry_run_contains "$dump_dry_run" "DUMP_MODE=\"maintenance\""
|
||||
|
||||
restore_dry_run="$(
|
||||
make --dry-run --always-make -C "$repo_root" restore BACKUP="backups/example" DUMP_FILE="backups/example.tar.zst" RESTORE_SERVICES="postgres,config" CONFIRM_RESTORE="baron-sso" RESTORE_REPORT="reports/restore-report.json" 2>&1
|
||||
)"
|
||||
|
||||
assert_dry_run_contains "$restore_dry_run" "scripts/backup/restore.sh"
|
||||
assert_dry_run_contains "$restore_dry_run" "docker run"
|
||||
assert_dry_run_contains "$restore_dry_run" "BACKUP=\"backups/example\""
|
||||
assert_dry_run_contains "$restore_dry_run" "DUMP_FILE=\"backups/example.tar.zst\""
|
||||
assert_dry_run_contains "$restore_dry_run" "RESTORE_SERVICES=\"postgres,config\""
|
||||
assert_dry_run_contains "$restore_dry_run" "CONFIRM_RESTORE=\"baron-sso\""
|
||||
assert_dry_run_contains "$restore_dry_run" "RESTORE_REPORT=\"reports/restore-report.json\""
|
||||
|
||||
for target in dump-verify restore-verify dump-list restore-plan; do
|
||||
target_dry_run="$(
|
||||
make --dry-run --always-make -C "$repo_root" "$target" BACKUP="backups/example" 2>&1
|
||||
)"
|
||||
assert_dry_run_contains "$target_dry_run" "scripts/backup/"
|
||||
done
|
||||
|
||||
upload_dry_run="$(
|
||||
make --dry-run --always-make -C "$repo_root" upload-cloud BACKUP="backups/example" WORKS_DRIVE_DRY_RUN=true 2>&1
|
||||
)"
|
||||
|
||||
assert_dry_run_contains "$upload_dry_run" "docker run"
|
||||
assert_dry_run_contains "$upload_dry_run" "scripts/backup/upload_cloud.sh"
|
||||
assert_dry_run_contains "$upload_dry_run" "BACKUP=\"backups/example\""
|
||||
assert_dry_run_contains "$upload_dry_run" "WORKS_DRIVE_DRY_RUN=\"true\""
|
||||
|
||||
if make -C "$repo_root" BACKUP_USE_DOCKER=false restore >/tmp/baron-sso-restore-missing.out 2>&1; then
|
||||
fail "make restore must fail when BACKUP and CONFIRM_RESTORE are not provided."
|
||||
fi
|
||||
|
||||
if ! grep -Fq "CONFIRM_RESTORE=baron-sso" /tmp/baron-sso-restore-missing.out; then
|
||||
fail "make restore failure must mention the required confirmation value."
|
||||
fi
|
||||
|
||||
echo "OK: backup Makefile targets expose the expected guarded interface"
|
||||
Reference in New Issue
Block a user