Blob Blame History Raw
#!/bin/bash

_kill_all_jobs() {
	local _jobs=$(jobs -r -p)

	[ -n "$_jobs" ] && kill $_jobs
}

trap '
ret=$?;
_kill_all_jobs
exit $ret;
' EXIT

trap 'exit 1;' SIGINT

BASEDIR=$(realpath $(dirname "$0"))
. $BASEDIR/test-lib.sh
TESTCASEDIR="$BASEDIR/testcases"

console=0
testcases=""

while [ $# -gt 0 ]; do
	case $1 in
		'')
			break
			;;
		--console )
			console=1
			;;
		-*)
			echo "Invalid option $1"
			;;
		*)
			testcases+=" $1"
			;;
	esac
	shift;
done

if [ -z "$testcases" ]; then
	echo "==== Starting all tests: ===="
	testcases=$(ls -1 $TESTCASEDIR)
else
	echo "==== Starting specified tests: ===="
fi
echo ${testcases##*/}
echo

declare -A results
ret=0

for test_case in $testcases; do
	echo "======== Running Test Case $test_case ========"
	results[$test_case]="<Test Skipped>"

	testdir=$TESTCASEDIR/$test_case
	script_num=$(ls -1 $testdir | wc -l)
	scripts=$(ls -r -1 $testdir | tr '\n' ' ')
	test_outputs=""
	read main_script aux_script <<< "$scripts"

	if [ -z "$main_script" ]; then
		echo "ERROR: Empty testcase dir $testdir"
		continue
	fi

	for script in $scripts; do
		echo "---- Building image for: $script ----"
		echo "-------- Output image is: $(get_test_image $testdir/$script)"
		echo "-------- Building log is: $(get_test_image $testdir/$script).log"

		mkdir -p $(dirname $(get_test_image $testdir/$script))
		build_test_image $testdir/$script &> $(get_test_image $testdir/$script).log

		if [ $? -ne 0 ]; then
			echo "Failing building image!"
			continue 2
		fi
	done

	for script in $aux_script; do
		echo "---- Starting VM: $script ----"

		script="$testdir/$script"
		echo "-------- Qemu cmdline: $(get_test_qemu_cmd_file $script)"
		echo "-------- Console log: $(get_test_console_file $script)"
		echo "-------- Test log: $(get_test_output_file $script)"
		test_outputs+="$(get_test_output_file $script) "

		rm -f $(get_test_console_file $script)
		rm -f $(get_test_output_file $script)

		$(run_test_sync $script > $(get_test_console_file $script)) &

		sleep 5
	done

	script="$main_script"
	echo "---- Starting test VM: $(basename $script) ----"
	script="$testdir/$script"

	echo "-------- Qemu cmdline: $(get_test_qemu_cmd_file $script)"
	echo "-------- Console log: $(get_test_console_file $script)"
	echo "-------- Test log: $(get_test_output_file $script)"
	test_outputs+="$(get_test_output_file $script) "

	rm -f $(get_test_console_file $script)
	rm -f $(get_test_output_file $script)

	if [ $console -eq 1 ]; then
		run_test_sync $script | tee $(get_test_console_file $script)
		[ -n "$(jobs -p)" ] && kill $(jobs -p)
	else
		$(run_test_sync $script > $(get_test_console_file $script)) &
		watch_test_outputs $test_outputs
	fi

	res="$(gather_test_result $test_outputs)"

	[ $? -ne 0 ] && ret=$(expr $ret + 1)
	results[$test_case]="$res"

	echo -e "-------- Test finished: $test_case $res --------"
	for script in $scripts; do
		script="$testdir/$script"
		output="$(get_test_output_file $script) "
		image="$(get_test_image $script)"
		vmcore="$(sed -n 's/^VMCORE: \(\S*\).*/\1/p' $output)"
		kernel="$(sed -n 's/^KERNEL VERSION: \(\S*\).*/\1/p' $output)"
		if [ -n "$vmcore" ]; then
			echo "You can retrive the verify the vmcore file using following command:"
			echo "./scripts/copy-from-image.sh \\"
			echo "    $image \\"
			echo "    $vmcore ./"
			echo "Kernel package verion is: $kernel"
		fi
	done
done

echo "======== Test results ========"
for i in ${!results[@]}; do
	echo "----------------"
	echo -e "$i:\t\t${results[$i]}"
done

exit $ret