#!/bin/bash

. /etc/sysconfig/kdump
. ./config

reset()
{
	echo "CUR_TEST=0"   >  $TEST_BASE_DIR/control
	echo "PREV_TEST=-1" >> $TEST_BASE_DIR/control
	echo "ITERATION=0"  >> $TEST_BASE_DIR/control
}

run_test()
{
	declare -ax TESTS
	declare -i LAST_TEST
	declare -i NEXT_TEST
	declare -i CUR_TEST
	declare -i PREV_TEST
	declare -i ITERATION

        if [ ! -f ./control ]; then
                echo "Control file not found... exiting"
                exit
        fi

	. ./control
	
	#
	# Read in test list
	#
	if [ ! -f $TESTFILE ]; then
		echo "Test file ($TESTFILE) not found... exiting"
		exit
	fi

	TESTS=( `cat $TESTFILE | tr '\n' ' '` )
	LAST_TEST=${#TESTS[*]}-1
	
	if [ $PREV_TEST -gt -1 ] ; then
	   if [ $DISTRO_RH -eq 1 ]; then
		#
		# Verify results of previous test
		#
		VMCORE="${VMCORE}/`date +%F-%H`*"
		RESULTS_FILE=${RESULTS_DIR}/${ITERATION}.${TESTS[$PREV_TEST]}.`date +%F-%T`
		if [ -f ${VMCORE}/vmcore ]; then
		mv ${VMCORE}/vmcore ${TEST_BASE_DIR}/results/vmcore
		rm -rf $VMCORE
		VMCORE=${TEST_BASE_DIR}/results/vmcore
			# Delay 1 minute to make sure the machine has fully booted
			sleep 1m
			echo "`date +%F-%T`: Verifying test ${TESTS[${PREV_TEST}]}" >> \
				 ${RESULTS_DIR}/status
			$VERIFY_SCR $VMCORE > $RESULTS_FILE
			rm -rf $VMCORE
			VMCORE="/var/crash"
		else
			echo "`date +%F-%T`: Verification failed for test " \
				"${TESTS[${PREV_TEST}]}: vmcore NOT FOUND" >> \
				 ${RESULTS_DIR}/status
        		echo "vmcore NOT FOUND!" > $RESULTS_FILE
		fi

		if [ $CUR_TEST -eq -1 ] ; then
			if [ $ITERATION -eq $NUM_ITERATIONS ] ; then
				# 
				# Change settings back
				#
				crontab -r
			fi
		fi
	   fi
	   if [ $DISTRO_SUSE -eq 1 ]; then
	        #
                # Verify results of previous test
                #
                RESULTS_FILE=${RESULTS_DIR}/${ITERATION}.${TESTS[$PREV_TEST]}.`date +%F-%T`
                if [ ${TESTS[$PREV_TEST]} = "KEXEC-L" ]; then
                        echo "`date +%F-%T`: Verifying test ${TESTS[${PREV_TEST}]}" >> \
                                 ${RESULTS_DIR}/status
                        echo "kexec -l SUCCEEDED" > $RESULTS_FILE
                else if [ -f $VMCORE ]; then
                        # Delay 1 minute to make sure the machine has fully booted
                        sleep 1m
                        echo "`date +%F-%T`: Verifying test ${TESTS[${PREV_TEST}]}" >> \
                                 ${RESULTS_DIR}/status
                        $VERIFY_SCR $VMCORE > $RESULTS_FILE
                        rm $VMCORE
                else
                        echo "`date +%F-%T`: Verification failed for test " \
                                "${TESTS[${PREV_TEST}]}: vmcore NOT FOUND" >> \
                                 ${RESULTS_DIR}/status
                        echo "vmcore NOT FOUND!" > $RESULTS_FILE
                fi
                fi
	  fi
	else
		echo "first test"
		#
		# First test, collect system info
		#
		RESULTS_DIR=${RESULTS_DIR}/`hostname`.`date +%F-%T`
		mkdir -p $RESULTS_DIR
                echo "`date +%F-%T`: Starting test run" >> ${RESULTS_DIR}/status
		if [ $DISTRO_SUSE -eq 1 ]; then
			cp /proc/config.gz ${RESULTS_DIR}
		fi
		echo "creating sysinfo"
		$SYSINFO_SCR > ${RESULTS_DIR}/system.info
		if [ $DISTRO_RH -eq 1 ]; then
			echo "emptying /var/crash/"
			rm -rf /var/crash/*
		fi
	fi


	#
	# Are we done?
	#
	if [ $CUR_TEST -eq -1 ] ; then
		echo "`date +%F-%T`: Test run complete" >> ${RESULTS_DIR}/status
		exit
	fi

	#
	# Set up for next test
	#

	if [ $CUR_TEST -eq $LAST_TEST ] ; then
		if [ $ITERATION -eq $NUM_ITERATIONS ] ; then
			# This is the last test, we're done
			NEXT_TEST=-1
		else
			# Starting new iteration
			NEXT_TEST=0
		fi
	else
		NEXT_TEST=CUR_TEST+1
	fi
	
	#
	# Are we starting a new iteration?
	#
	if [ $CUR_TEST -eq 0 ] ; then
		let "ITERATION++"
	fi	

	echo "CUR_TEST="$NEXT_TEST      >  $TEST_BASE_DIR/control
	echo "PREV_TEST="$CUR_TEST      >> $TEST_BASE_DIR/control
	echo "ITERATION="$ITERATION     >> $TEST_BASE_DIR/control
	echo "RESULTS_DIR="$RESULTS_DIR >> $TEST_BASE_DIR/control

	#
	# Run current test
	#
	echo "`date +%F-%T`: Running test ${TESTS[${CUR_TEST}]}" >> ${RESULTS_DIR}/status
	sync
	sleep 1m
	echo "running test : $TEST_SCR ${TESTS[${CUR_TEST}]}"
	$TEST_SCR ${TESTS[${CUR_TEST}]}
}

case "$1" in
	run)
		run_test
		;;
	reset)
		reset
		echo "Test control values reset"
		;;
	results)
		echo "Not implemented"
		;;
	*)
		echo $"Usage: $0 {run|reset|results}"
		exit 1
esac

exit $?
