aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Sucan <jan@jansucan.com>2022-03-05 12:35:04 +0100
committerJan Sucan <jan@jansucan.com>2022-03-05 12:37:19 +0100
commitd545a693143431313f6a534c6aa095e1a7cd6700 (patch)
tree6c84fcada468f61253a3e2d2cb0df1c769601a5e
parentea1997bf2dbad25a306cdc9445b50d0ce64299f2 (diff)
tests: Add a test for restore errors
-rw-r--r--tests/300-incorrect-reference-file.sh37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/300-incorrect-reference-file.sh b/tests/300-incorrect-reference-file.sh
new file mode 100644
index 0000000..b3de8c0
--- /dev/null
+++ b/tests/300-incorrect-reference-file.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+source ./assert.sh
+
+PROGRAM_EXEC="$1"
+
+rm -f ref out
+touch ref out
+assert_error "reference file is empty" $PROGRAM_EXEC ref out
+
+dd if=/dev/zero of=ref bs=513 count=1 1>/dev/null 2>&1
+assert_error "reference file has size that cannot contain valid diff data" \
+ $PROGRAM_EXEC -s 512 ref out
+
+rm -f ref out
+dd if=/dev/zero of=out bs=512 count=2 1>/dev/null 2>&1
+# Create a two-sector backup file
+dd if=/dev/zero of=ref bs=$(( 512 + 8 )) count=2 1>/dev/null 2>&1
+# The first offset will be 2
+printf '\x02' | dd of=ref bs=1 count=1 seek=0 conv=notrunc 1>/dev/null 2>&1
+# The second offset will be 1
+printf '\x01' | dd of=ref bs=1 count=1 seek=520 conv=notrunc 1>/dev/null 2>&1
+assert_error "a sector offset points behind the previous offset" \
+ $PROGRAM_EXEC -s 512 ref out
+
+rm -f ref out
+dd if=/dev/zero of=out bs=512 count=1 1>/dev/null 2>&1
+# Create a one-sector backup file
+dd if=/dev/zero of=ref bs=$(( 512 + 8 )) count=2 1>/dev/null 2>&1
+# The first offset will be 1
+printf '\x01' | dd of=ref bs=1 count=1 seek=0 conv=notrunc 1>/dev/null 2>&1
+assert_error "a sector offset points past the end of the output file" \
+ $PROGRAM_EXEC -s 512 ref out
+
+rm -f ref out
+
+exit 0