summaryrefslogtreecommitdiff
path: root/tests/fsck-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fsck-tests.sh')
-rwxr-xr-x[-rw-r--r--]tests/fsck-tests.sh99
1 files changed, 50 insertions, 49 deletions
diff --git a/tests/fsck-tests.sh b/tests/fsck-tests.sh
index 24fb1090..a992b45b 100644..100755
--- a/tests/fsck-tests.sh
+++ b/tests/fsck-tests.sh
@@ -5,60 +5,60 @@
# It's GPL, same as everything else in this tree.
#
-here=`pwd`
-TEST_DEV=
-TEST_MNT=
-RESULT="fsck-tests-results.txt"
-
-_fail()
-{
- echo "$*" | tee -a $RESULT
- exit 1
-}
-
-run_check()
-{
- echo "############### $@" >> $RESULT 2>&1
- "$@" >> $RESULT 2>&1 || _fail "failed: $@"
-}
-
-check_prereq()
-{
- if ! [ -f $here/$1 ]; then
- _fail "Failed prerequisities: $1";
- fi
-}
+unset top
+unset LANG
+LANG=C
+script_dir=$(dirname $(realpath $0))
+top=$(realpath $script_dir/../)
+TEST_DEV=${TEST_DEV:-}
+TEST_MNT=${TEST_MNT:-$top/tests/mnt}
+RESULT="$top/tests/fsck-tests-results.txt"
+
+source $top/tests/common
+
+# Allow child test to use $top and $RESULT
+export top
+export RESULT
+# For custom script needs to verfiy recovery
+export TEST_MNT
+export LANG
rm -f $RESULT
+mkdir -p $TEST_MNT || _fail "unable to create mount point on $TEST_MNT"
# test rely on corrupting blocks tool
check_prereq btrfs-corrupt-block
check_prereq btrfs-image
check_prereq btrfs
-# Some broken filesystem images are kept as .img files, created by the tool
-# btrfs-image, and others are kept as .tar.xz files that contain raw filesystem
-# image (the backing file of a loop device, as a sparse file). The reason for
-# keeping some as tarballs of raw images is that for these cases btrfs-image
-# isn't able to preserve all the (bad) filesystem structure for some reason.
-for i in $(find $here/tests/fsck-tests -name '*.img' -o -name '*.tar.xz' | sort)
+# Each dir contains one type of error for btrfsck test.
+# Each dir must be one of the following 2 types:
+# 1) Only btrfs-image dump
+# Only contains one or several btrfs-image dumps (.img)
+# Each image will be tested by generic test routine
+# (btrfsck --repair and btrfsck).
+# This is for case that btree-healthy images.
+# 2) Custom test script
+# This dir contains test.sh which will do custom image
+# generation/check/verification.
+# This is for case btrfs-image can't dump or case needs extra
+# check/verify
+
+for i in $(find $top/tests/fsck-tests -maxdepth 1 -mindepth 1 -type d | sort)
do
echo " [TEST] $(basename $i)"
- echo "testing image $i" >> $RESULT
-
- extension=${i#*.}
-
- if [ $extension == "img" ]; then
- run_check $here/btrfs-image -r $i test.img
+ cd $i
+ if [ -x test.sh ]; then
+ # Type 2
+ ./test.sh
+ if [ $? -ne 0 ]; then
+ _fail "test failed for case $(basename $i)"
+ fi
else
- run_check tar xJf $i
+ # Type 1
+ check_all_images `pwd`
fi
-
- $here/btrfs check test.img >> $RESULT 2>&1
- [ $? -eq 0 ] && _fail "btrfs check should have detected corruption"
-
- run_check $here/btrfs check --repair test.img
- run_check $here/btrfs check test.img
+ cd $top
done
if [ -z $TEST_DEV ] || [ -z $TEST_MNT ];then
@@ -70,31 +70,32 @@ fi
test_extent_tree_rebuild()
{
echo " [TEST] extent tree rebuild"
- $here/mkfs.btrfs -f $TEST_DEV >> /dev/null 2>&1 || _fail "fail to mkfs"
+ $top/mkfs.btrfs -f $TEST_DEV >> /dev/null 2>&1 || _fail "fail to mkfs"
run_check mount $TEST_DEV $TEST_MNT
cp -aR /lib/modules/`uname -r`/ $TEST_MNT 2>&1
for i in `seq 1 100`;do
- $here/btrfs sub snapshot $TEST_MNT \
+ $top/btrfs sub snapshot $TEST_MNT \
$TEST_MNT/snapaaaaaaa_$i >& /dev/null
done
run_check umount $TEST_DEV
# get extent root bytenr
- extent_root_bytenr=`$here/btrfs-debug-tree -r $TEST_DEV | grep extent | awk '{print $7}'`
+ extent_root_bytenr=`$top/btrfs-debug-tree -r $TEST_DEV | \
+ grep extent | awk '{print $7}'`
if [ -z $extent_root_bytenr ];then
_fail "fail to get extent root bytenr"
fi
# corrupt extent root node block
- run_check $here/btrfs-corrupt-block -l $extent_root_bytenr \
+ run_check $top/btrfs-corrupt-block -l $extent_root_bytenr \
-b 4096 $TEST_DEV
- $here/btrfs check $TEST_DEV >& /dev/null && \
+ $top/btrfs check $TEST_DEV >& /dev/null && \
_fail "btrfs check should detect failure"
- run_check $here/btrfs check --init-extent-tree $TEST_DEV
- run_check $here/btrfs check $TEST_DEV
+ run_check $top/btrfs check --init-extent-tree $TEST_DEV
+ run_check $top/btrfs check $TEST_DEV
}
test_extent_tree_rebuild