diff options
Diffstat (limited to 'tests/fsck-tests.sh')
-rwxr-xr-x[-rw-r--r--] | tests/fsck-tests.sh | 99 |
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 |