#!/bin/sh
#
# Test script for e2fsck
#

LC_ALL=C
export LC_ALL

case "$1" in 
    --valgrind)
    	export USE_VALGRIND="valgrind -q --sim-hints=lax-ioctls"
	shift;
	;;
    --valgrind-leakcheck)
    	export USE_VALGRIND="valgrind --sim-hints=lax-ioctls --leak-check=full --show-reachable=yes --log-file=/tmp/valgrind-%p.log"
	shift;
	;;
esac

if test "$1"x = x ; then
  TESTS=`ls -d $SRCDIR/[a-zA-Z]_* | $EGREP -v "\.failed|\.new"`
else
  TESTS=
  for i 
  do
    case $i in
	*.failed|*.new)	continue ;;
	[a-zA-Z])	TESTS="$TESTS $SRCDIR/${i}_*" ;;
	*)		TESTS="$TESTS $SRCDIR/$i" ;;
    esac
  done
fi

cmd_dir=$SRCDIR

if test "$TEST_CONFIG"x = x; then
	TEST_CONFIG=$SRCDIR/test_config
fi

. $TEST_CONFIG

for test_dir in $TESTS
do
	test_name=`echo $test_dir | sed -e 's;.*/;;'`
	if [ -f $test_dir ] ; then
	    continue;
	fi
	if [ ! -d $test_dir ] ; then
		echo "The test '$test_name' does not exist."
		continue;
	fi
	if [ -z "`ls $test_dir`" ]; then
		continue
	fi
	if [ -f $test_dir/name ]; then
		test_description=`cat $test_dir/name`
		printf "%s: %s: " "$test_name" "$test_description"
	else
		printf "%s: " "$test_name"
	fi
	if [ -f $test_dir/script ]; then
		. $test_dir/script
	else
		test_base=`echo $test_name | sed -e 's/_.*//'`
		default_script=$SRCDIR/defaults/${test_base}_script
		if [ -f $default_script ]; then
			. $SRCDIR/defaults/${test_base}_script
		else
			echo "Missing test script!"
		fi
	fi
done

num_ok=`ls *.ok 2>/dev/null | wc -l`
num_failed=`ls *.failed 2>/dev/null | wc -l`

echo "$num_ok tests succeeded	$num_failed tests failed"

test "$num_failed" -eq 0 || exit 1
