btrfs-progs/tests/fsck-tests.sh
David Sterba 2726a83952 btrfs-progs: tests: scan test results
Some errors may be reported in the logs only, scan the file each time
there are fresh results. The scanning script will return error that is
supposed to be caught by the testsuite environment.

Signed-off-by: David Sterba <dsterba@suse.com>
2023-09-12 23:18:35 +02:00

117 lines
2.7 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
test_found=0
run_one_test() {
local testdir
local testname
testdir="$1"
testname=$(basename "$testdir")
if ! [ -z "$TEST_FROM" ]; then
if [ "$test_found" == 0 ]; then
case "$testname" in
$TEST_FROM) test_found=1;;
esac
fi
if [ "$test_found" == 0 ]; then
printf " [TEST/fsck] %-32s (SKIPPED)\n" "$testname"
return
fi
fi
echo " [TEST/fsck] $(basename $testname)"
cd "$testdir"
echo "=== START TEST $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 $testname"
fi
# These tests have overridden check_image() and their images may
# have intentional unaligned metadata to trigger subpage
# warnings (like fsck/018), skip the check for their subpage
# warnings.
#
# We care about subpage related warnings for write operations
# (mkfs/convert/repair), not those read-only checks on crafted
# images.
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
"$TEST_TOP/scan-results.sh" "$RESULTS"