#!/bin/bash # # loop through all of our bad images and make sure fsck repairs them properly LANG=C SCRIPT_DIR=$(dirname $(readlink -f "$0")) TOP=$(readlink -f "$SCRIPT_DIR/../") TEST_DEV=${TEST_DEV:-} RESULTS="$TOP/tests/fsck-tests-results.txt" IMAGE="$TOP/tests/test.img" source "$TOP/tests/common" export TOP export RESULTS export LANG export IMAGE export TEST_DEV rm -f "$RESULTS" # 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 cd "$TOP" } # 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 \ ${TEST:+-name "$TEST"} | sort) do run_one_test "$i" done