mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2024-11-25 05:04:14 +08:00
e44f595dd7
Make the TOP variable more configurable, allow to set it to any path where to find binaries when the testsuite is exported, or fallback to system binaries. There's now more code duplication, the logic is now more complex so it's left open coded for clarity. Further cleanups are possible. Signed-off-by: David Sterba <dsterba@suse.com>
92 lines
2.1 KiB
Bash
Executable File
92 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# loop through all of our bad images and make sure fsck repairs them properly
|
|
|
|
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
|
|
# external, defaults to system binaries
|
|
TOP=$(dirname `which btrfs`)
|
|
TEST_TOP="$SCRIPT_DIR"
|
|
INTERNAL_BIN="$TEST_TOP"
|
|
fi
|
|
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"
|
|
|
|
source "$TEST_TOP/common"
|
|
|
|
export INTERNAL_BIN
|
|
export TEST_TOP
|
|
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 "$TEST_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 "$TEST_TOP/fsck-tests" -maxdepth 1 -mindepth 1 -type d \
|
|
${TEST:+-name "$TEST"} | sort)
|
|
do
|
|
run_one_test "$i"
|
|
done
|