xref: /aosp_15_r20/external/exfatprogs/tests/test_fsck.sh (revision 508ec739de867a7549a0b8584942a00612dc5f1c)
1*508ec739SDaniel Rosenberg#!/usr/bin/env bash
2*508ec739SDaniel Rosenberg
3*508ec739SDaniel RosenbergTESTCASE_DIR=$1
4*508ec739SDaniel RosenbergNEED_LOOPDEV=$2
5*508ec739SDaniel RosenbergIMAGE_FILE=exfat.img
6*508ec739SDaniel RosenbergFSCK_PROG=fsck.exfat
7*508ec739SDaniel RosenbergFSCK_PROG_2=fsck.exfat
8*508ec739SDaniel RosenbergFSCK_OPTS="-y -s"
9*508ec739SDaniel RosenbergPASS_COUNT=0
10*508ec739SDaniel Rosenberg
11*508ec739SDaniel Rosenbergcleanup() {
12*508ec739SDaniel Rosenberg	echo ""
13*508ec739SDaniel Rosenberg	echo "Passed ${PASS_COUNT} of ${TEST_COUNT}"
14*508ec739SDaniel Rosenberg	if [ ${PASS_COUNT} -ne ${TEST_COUNT} ]; then
15*508ec739SDaniel Rosenberg		exit 1
16*508ec739SDaniel Rosenberg	else
17*508ec739SDaniel Rosenberg		exit 0
18*508ec739SDaniel Rosenberg	fi
19*508ec739SDaniel Rosenberg}
20*508ec739SDaniel Rosenberg
21*508ec739SDaniel Rosenbergif [ $# -eq 0 ]; then
22*508ec739SDaniel Rosenberg	TESTCASE_DIRS=$(find . -mindepth 1 -maxdepth 1 -type d)
23*508ec739SDaniel Rosenberg	TEST_COUNT=$(find . -mindepth 1 -maxdepth 1 -type d | wc -l)
24*508ec739SDaniel Rosenbergelse
25*508ec739SDaniel Rosenberg	TESTCASE_DIRS=$@
26*508ec739SDaniel Rosenberg	TEST_COUNT=$#
27*508ec739SDaniel Rosenbergfi
28*508ec739SDaniel Rosenberg
29*508ec739SDaniel Rosenbergfor TESTCASE_DIR in $TESTCASE_DIRS; do
30*508ec739SDaniel Rosenberg	if [ ! -e "${TESTCASE_DIR}/${IMAGE_FILE}.tar.xz" ]; then
31*508ec739SDaniel Rosenberg		TEST_COUNT=$((TEST_COUNT - 1))
32*508ec739SDaniel Rosenberg		continue
33*508ec739SDaniel Rosenberg	fi
34*508ec739SDaniel Rosenberg
35*508ec739SDaniel Rosenberg	echo "Running ${TESTCASE_DIR}"
36*508ec739SDaniel Rosenberg	echo "-----------------------------------"
37*508ec739SDaniel Rosenberg
38*508ec739SDaniel Rosenberg	# Set up image file as loop device
39*508ec739SDaniel Rosenberg	tar -C . -xf "${TESTCASE_DIR}/${IMAGE_FILE}.tar.xz"
40*508ec739SDaniel Rosenberg	if [ $NEED_LOOPDEV ]; then
41*508ec739SDaniel Rosenberg		DEV_FILE=$(losetup -f "${IMAGE_FILE}" --show)
42*508ec739SDaniel Rosenberg	else
43*508ec739SDaniel Rosenberg		DEV_FILE=$IMAGE_FILE
44*508ec739SDaniel Rosenberg	fi
45*508ec739SDaniel Rosenberg
46*508ec739SDaniel Rosenberg	# Run fsck for repair
47*508ec739SDaniel Rosenberg	$FSCK_PROG $FSCK_OPTS "$DEV_FILE"
48*508ec739SDaniel Rosenberg	if [ $? -ne 1 ] && [ $? -ne 0 ]; then
49*508ec739SDaniel Rosenberg		echo ""
50*508ec739SDaniel Rosenberg		echo "Failed to repair ${TESTCASE_DIR}"
51*508ec739SDaniel Rosenberg		if [ $NEED_LOOPDEV ]; then
52*508ec739SDaniel Rosenberg			losetup -d "${DEV_FILE}"
53*508ec739SDaniel Rosenberg		fi
54*508ec739SDaniel Rosenberg		cleanup
55*508ec739SDaniel Rosenberg	fi
56*508ec739SDaniel Rosenberg
57*508ec739SDaniel Rosenberg	echo ""
58*508ec739SDaniel Rosenberg	# Run fsck again
59*508ec739SDaniel Rosenberg	$FSCK_PROG_2 "$DEV_FILE"
60*508ec739SDaniel Rosenberg	if [ $? -ne 0 ]; then
61*508ec739SDaniel Rosenberg		echo ""
62*508ec739SDaniel Rosenberg		echo "Failed, corrupted ${TESTCASE_DIR}"
63*508ec739SDaniel Rosenberg		if [ $NEED_LOOPDEV ]; then
64*508ec739SDaniel Rosenberg			losetup -d "${DEV_FILE}"
65*508ec739SDaniel Rosenberg		fi
66*508ec739SDaniel Rosenberg		cleanup
67*508ec739SDaniel Rosenberg	fi
68*508ec739SDaniel Rosenberg
69*508ec739SDaniel Rosenberg	echo ""
70*508ec739SDaniel Rosenberg	echo "Passed ${TESTCASE_DIR}"
71*508ec739SDaniel Rosenberg	PASS_COUNT=$((PASS_COUNT + 1))
72*508ec739SDaniel Rosenberg
73*508ec739SDaniel Rosenberg	if [ $NEED_LOOPDEV ]; then
74*508ec739SDaniel Rosenberg		losetup -d "${DEV_FILE}"
75*508ec739SDaniel Rosenberg	fi
76*508ec739SDaniel Rosenbergdone
77*508ec739SDaniel Rosenbergcleanup
78