#! /bin/bash

do_help()
{
	echo You need to fill out the testrc with your machine\'s details before
	echo using this script.
	exit;
}

do_test()
{
	test_prog=$1
	test_name=`echo -n $test_prog | sed "s/test_//" | sed "s/_/ /" \
		   | tr '[:lower:]' '[:upper:]'`

	echo "-----------------------------------------------------------------"
	echo "TESTING $test_name..."
	echo "-----------------------------------------------------------------"

	echo "-----------------------------------------------------------------"\
		>> test_log
	echo "TESTING $test_name..." >> test_log
	echo "-----------------------------------------------------------------"\
		>> test_log

	if [ -e core* ]; then
		rm core*
	fi
	./$test_prog
	if [ -e test_out ]; then
		echo > test_out
	fi
}

do_tests()
{
	for walk in $TEST_LIST; do
		if [ -x $walk ]; then
			do_test $walk
		fi
	done
}

################################################
# GLOBAL HELPER FUNCTIONS
################################################

ped_testing()
{
	echo -n "testing $1... "
	echo -n "testing $1... " >> test_log
}

ped_testing_expect_fail()
{
	echo -n "testing for failure on $1... "
	echo -n "testing for failure on $1... " >> test_log
}

ped_test_ok()
{
	echo "ok"
	echo "ok" >> test_log

	if [ "x$VERBOSE_LOGS" = "x1" ]; then
		cat test_out >> test_log
		echo >> test_log
	fi

	export OK_COUNT=$[ $OK_COUNT + 1 ]
}

ped_test_failed()
{
	echo "failed"
	echo "failed" >> test_log

	cat test_out >> test_log
	echo >> test_log

	export FAILED_COUNT=$[ $FAILED_COUNT + 1 ]

	if [ -e core ]; then
		echo core dumped, saving to core-$CORE_COUNTER\
			>> test_log
		echo >> test_log
		mv core core-$CORE_COUNTER
		export CORE_COUNTER=$[ $CORE_COUNTER + 1 ]
	fi
}

check_leaks()
{
	if test "x$MALLOC_TRACE" != "x"; then
		./build_leak_list > leaks
		if test -s leaks; then
			printf \
'Found memory leaks: (add this list to dodgey_malloc_list in\n'\
'libparted/libparted.c to debug them)\n' \
				>> test_out
			cat leaks >> test_out
			return 0
		fi
		rm leaks
	fi

	return 1
}

ped_test_get_val()
{
	post_command=$2
	if test "x$input" = "x"; then
		input="Cancel"
	fi
	if test "x$post_command" = "x"; then
		post_command="true"
	fi

	if test -e leaks; then
		rm leaks
	fi
	if test "x$MALLOC_TRACE" != "x"; then
		if test -e $MALLOC_TRACE; then
			rm $MALLOC_TRACE
		fi
	fi

	if $TEST_PARTED_COMMAND -s $TEST_DRIVE $1 2>&1 > test_out; then
		if [ -e core ]; then
			return 0
		fi

		if check_leaks; then
			return 0
		fi

		if ( echo >> test_out ; ( eval $post_command ) 2>&1 >> test_out ); then
			return 1
		else
			return 0
		fi
	else
		return 0
	fi
}

ped_test()
{
	ped_testing "$1"
	if ped_test_get_val "$2" "$3"; then
		ped_test_failed	
		return 1
	else
		ped_test_ok
		return 0
	fi
}

ped_test_expect_fail()
{
	ped_testing_expect_fail "$1"
	if ped_test_get_val "$2" "$3"; then

	# we expect a CLEAN fail :-)
		if [ -e core ]; then
			ped_test_failed
			return 1
		fi
		if check_leaks; then
			ped_test_failed
			return 1
		fi

		ped_test_ok
		return 0
	else
		ped_test_failed
		return 1
	fi
}

################################################
# the rest...
################################################

init_environment()
{
	if [ "x$UID" != "x0" ]; then
		echo Warning: you should probably be running this as root.
		echo
	fi

	. testrc
	`cat testrc | grep "^[^#].*=" | sed "s/=.*//" | sed "s/^/export /" `

	if [ "x$HOSTNAME" != "x$TEST_HOST" ]; then
		do_help
	fi

	export OLD_KERNEL_PRINTK=`cat /proc/sys/kernel/printk`

	if [ "x$QUIET_KERNEL" = "x1" ]; then
		echo 1 1 1 1 > /proc/sys/kernel/printk
	fi

	renice 20 $$ > /dev/null

	export CORE_COUNTER=1
	export OK_COUNT=0
	export FAILED_COUNT=0

	export -f ped_testing
	export -f ped_testing_expect_fail
	export -f ped_test_ok
	export -f ped_test_failed
	export -f ped_test_get_val
	export -f ped_test
	export -f ped_test_expect_fail
	export -f check_leaks
}

done_environment()
{
	echo $OLD_KERNEL_PRINTK > /proc/sys/kernel/printk
}

open_log()
{
	if [ -e test_log ]; then
		echo -n > test_log;
	fi
}

print_version()
{
	echo -n "Testing "
	$TEST_PARTED_COMMAND --version
	echo

	echo -n "Testing " >> test_log
	$TEST_PARTED_COMMAND --version >> test_log
	echo >> test_log
}

main()
{
	init_environment
	open_log
	print_version
	do_tests
	done_environment
}

if [ "x$1" !=  "x" ]; then
	export TEST_LIST="test_*$1*"
else
	export TEST_LIST="test_*"
fi

main

