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