• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env bash
2
3TESTCASE_DIR=$1
4IMAGE_FILE=exfat.img
5FSCK_PROG=../build/sbin/fsck.exfat
6FSCK_OPTS=-y
7PASS_COUNT=0
8
9cleanup() {
10	echo ""
11	echo "Passed ${PASS_COUNT} of ${TEST_COUNT}"
12	exit
13}
14
15if [ $# -eq 0 ]; then
16	TESTCASE_DIRS=$(find . -mindepth 1 -maxdepth 1 -type d)
17	TEST_COUNT=$(find . -mindepth 1 -maxdepth 1 -type d | wc -l)
18else
19	TESTCASE_DIRS=$@
20	TEST_COUNT=$#
21fi
22
23for TESTCASE_DIR in $TESTCASE_DIRS; do
24	if [ ! -e "${TESTCASE_DIR}/${IMAGE_FILE}.tar.xz" ]; then
25		TEST_COUNT=$((TEST_COUNT - 1))
26		continue
27	fi
28
29	echo "Running ${TESTCASE_DIR}"
30	echo "-----------------------------------"
31
32	# Set up image file as loop device
33	tar -C . -xf "${TESTCASE_DIR}/${IMAGE_FILE}.tar.xz"
34	DEV_FILE=$(losetup -f "${IMAGE_FILE}" --show)
35
36	# Run fsck for repair
37	$FSCK_PROG $FSCK_OPTS "$DEV_FILE"
38	if [ $? -ne 1 ]; then
39		echo ""
40		echo "Failed to repair ${TESTCASE_DIR}"
41		losetup -d "${DEV_FILE}"
42		cleanup
43	fi
44
45	echo ""
46	# Run fsck again
47	$FSCK_PROG -n "$DEV_FILE"
48	if [ $? -ne 0 ]; then
49		echo ""
50		echo "Failed, corrupted ${TESTCASE_DIR}"
51		losetup -d "${DEV_FILE}"
52		cleanup
53	fi
54
55	if [ -e "${TESTCASE_DIR}/exfat.img.expected.xz" ]; then
56		EXPECTED_FILE=${IMAGE_FILE}.expected
57		unxz -cfk "${TESTCASE_DIR}/${EXPECTED_FILE}.xz" > "${EXPECTED_FILE}"
58		diff <(xxd "${IMAGE_FILE}") <(xxd "${EXPECTED_FILE}")
59		if [ $? -ne 0 ]; then
60			echo ""
61			echo "Failed ${TESTCASE_DIR}"
62			losetup -d "${DEV_FILE}"
63			cleanup
64		fi
65	fi
66
67	echo ""
68	echo "Passed ${TESTCASE_DIR}"
69	PASS_COUNT=$((PASS_COUNT + 1))
70
71	losetup -d "${DEV_FILE}"
72done
73cleanup
74