X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Ffsck-tests.sh;h=14287bbeff88dee9e1c76baf7504fe9b5745400f;hb=905b3d18ae118931839b0a1ece17870073b51484;hp=285bcf65512594b55c1575c2cdbbe09c07441f91;hpb=6856b0a4cab6eae794f0fe012391fa76a8dd3b4e;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/tests/fsck-tests.sh b/tests/fsck-tests.sh old mode 100644 new mode 100755 index 285bcf6..14287bb --- a/tests/fsck-tests.sh +++ b/tests/fsck-tests.sh @@ -1,91 +1,91 @@ #!/bin/bash # # loop through all of our bad images and make sure fsck repairs them properly -# -# 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: $@" -} - -rm -f $RESULT - -# test rely on corrupting blocks tool -run_check make btrfs-corrupt-block - -# 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) -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 +LANG=C +SCRIPT_DIR=$(dirname $(readlink -f "$0")) +if [ -z "$TOP" ]; then + TOP=$(readlink -f "$SCRIPT_DIR/../") + if [ -f "$TOP/configure.ac" ]; then + # inside git + TEST_TOP="$TOP/tests/" + INTERNAL_BIN="$TOP" else - run_check tar xJf $i + # external, defaults to system binaries + TOP=$(dirname `which btrfs`) + TEST_TOP="$SCRIPT_DIR" + INTERNAL_BIN="$TEST_TOP" 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 -done - -if [ -z $TEST_DEV ] || [ -z $TEST_MNT ];then - echo " [NOTRUN] extent tree rebuild" - exit 0 +else + # assume external, TOP set from commandline + TEST_TOP="$SCRIPT_DIR" + INTERNAL_BIN="$TEST_TOP" +fi +if ! [ -x "$TOP/btrfs" ]; then + echo "ERROR: cannot execute btrfs from TOP=$TOP" + exit 1 fi +TEST_DEV=${TEST_DEV:-} +RESULTS="$TEST_TOP/fsck-tests-results.txt" +IMAGE="$TEST_TOP/test.img" -# test whether fsck can rebuild a corrupted extent tree -test_extent_tree_rebuild() -{ - echo " [TEST] extent tree rebuild" - $here/mkfs.btrfs -f $TEST_DEV >> /dev/null 2>&1 || _fail "fail to mkfs" +source "$TEST_TOP/common" - run_check mount $TEST_DEV $TEST_MNT - cp -aR /lib/modules/`uname -r`/ $TEST_MNT 2>&1 +export INTERNAL_BIN +export TEST_TOP +export TOP +export RESULTS +export LANG +export IMAGE +export TEST_DEV - for i in `seq 1 100`;do - $here/btrfs sub snapshot $TEST_MNT \ - $TEST_MNT/snapaaaaaaa_$i >& /dev/null - done - run_check umount $TEST_DEV +rm -f "$RESULTS" - # get extent root bytenr - extent_root_bytenr=`$here/btrfs-debug-tree -r $TEST_DEV | grep extent | awk '{print $7}'` - if [ -z $extent_root_bytenr ];then - _fail "fail to get extent root bytenr" +# test rely on corrupting blocks tool +check_prereq btrfs-corrupt-block +check_prereq btrfs-image +check_prereq btrfs +check_prereq btrfstune +check_kernel_support + +run_one_test() { + local testname + + testname="$1" + echo " [TEST/fsck] $(basename $testname)" + cd "$testname" + echo "=== Entering $testname" >> "$RESULTS" + if [ -x test.sh ]; then + # Type 2 + ./test.sh + if [ $? -ne 0 ]; then + if [[ $TEST_LOG =~ dump ]]; then + cat "$RESULTS" + fi + _fail "test failed for case $(basename $testname)" + fi + else + # Type 1 + check_all_images fi - - # corrupt extent root node block - run_check $here/btrfs-corrupt-block -l $extent_root_bytenr \ - -b 4096 $TEST_DEV - - $here/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 + cd "$TEST_TOP" } -test_extent_tree_rebuild +# 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 "$TEST_TOP/fsck-tests" -maxdepth 1 -mindepth 1 -type d \ + ${TEST:+-name "$TEST"} | sort) +do + run_one_test "$i" +done