mirror of
https://github.com/lobaro/restic-backup-docker.git
synced 2026-11-14 16:02:43 +00:00
test: prove restic check actually fails on a corrupted repository
compat.sh only grepped the check output for "Check Successful". check.sh
prints that string whenever restic exits 0, so a `restic check` that had
been turned into a no-op kept the suite green - the integrity check, half
the purpose of this image, was untested.
Adds a section that backs up, overwrites the first pack file under
/mnt/restic/data with garbage and then requires the failure path:
"Check Failed with Status", no "Check Successful", and
/var/log/check-error-last.log written. It uses its own throwaway container
so the later tests do not inherit the broken repository.
Verification on Git-Bash:
bash test/compat.sh -> 36 passed, 0 failed
sabotage (check.sh: restic check -> true), rebuilt image
IMAGE=rbd-sab-check bash test/compat.sh -> 33 passed, 3 failed, exit 1
- restic check detects a corrupted repository
- a corrupted repository is not reported as successful
- failing check writes check-error-last.log
check.sh was restored with git checkout and the sabotage image removed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Agent-Id: agent-4966d0e6-7f4d-4b37-be3d-0648ed56cb8a
This commit is contained in:
1 parent
6cb2f72cf9
commit
0aced54891
1 file changed
+27
@@ -92,6 +92,33 @@ assert_contains "$hook_log" "POST-HOOK-RAN with rc=0" \
|
|||||||
|
|
||||||
stop_container
|
stop_container
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "=== compat: a corrupted repository is reported as failed ==="
|
||||||
|
# The success path above is not enough: check.sh prints "Check Successful"
|
||||||
|
# whenever restic exits 0, so a `restic check` that does nothing at all would
|
||||||
|
# keep this suite green. Damage the repository and require the failure path.
|
||||||
|
# Runs in its own throwaway container, the repository stays broken afterwards.
|
||||||
|
|
||||||
|
start_container corrupt
|
||||||
|
wait_for_start || { fail "container starts for the corruption test"; summary "compat"; exit 1; }
|
||||||
|
write_file /data/hello.txt "backup me"
|
||||||
|
in_container /bin/backup >/dev/null 2>&1
|
||||||
|
assert_eq "1" "$(snapshot_count)" \
|
||||||
|
"the repository to be corrupted has a snapshot"
|
||||||
|
|
||||||
|
in_container sh -c 'f=$(find /mnt/restic/data -type f | head -n1); chmod u+w "$f"; printf garbage > "$f"'
|
||||||
|
broken_check_log="$(in_container /bin/check 2>&1)"
|
||||||
|
assert_contains "$broken_check_log" "Check Failed with Status" \
|
||||||
|
"restic check detects a corrupted repository"
|
||||||
|
assert_not_contains "$broken_check_log" "Check Successful" \
|
||||||
|
"a corrupted repository is not reported as successful"
|
||||||
|
if in_container test -f /var/log/check-error-last.log; then
|
||||||
|
pass "failing check writes check-error-last.log"
|
||||||
|
else
|
||||||
|
fail "failing check writes check-error-last.log" "file is missing"
|
||||||
|
fi
|
||||||
|
stop_container
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== compat: RESTIC_FORGET_ARGS ==="
|
echo "=== compat: RESTIC_FORGET_ARGS ==="
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user