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