#!/bin/bash

if [ ! -f config.mak ]; then
	echo "run ./configure && make first. See ./configure -h"
	exit
fi
source config.mak
source scripts/functions.bash

one_kernel="$1"
[ "$one_kernel" ] && one_kernel_base=$(basename $one_kernel)
one_testname="$2"
if [ -n "$one_kernel" ] && [ ! -f $one_kernel ]; then
	echo "$one_kernel doesn't exist"
	exit 1
elif [ -n "$one_kernel" ] && [ -z "$one_testname" ]; then
	one_testname="${one_kernel_base%.*}"
fi

unittests=$TEST_DIR/unittests.cfg
mkdir -p tests

function mkstandalone()
{
	local testname="$1"
	local groups="$2"
	local smp="$3"
	local kernel="$4"
	local opts="$5"
	local arch="$6"
	local check="$7"

	if [ -z "$testname" ]; then
		return 1
	fi

	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
		return 1
	fi

	standalone=tests/$testname
	cmdline=$(DRYRUN=yes ./$TEST_DIR-run $kernel)
	if [ $? -ne 0 ]; then
		echo $cmdline
		exit 1
	fi
	qemu=$(cut -d' ' -f1 <<< "$cmdline")
	cmdline=$(cut -d' ' -f2- <<< "$cmdline")

	cat <<EOF > $standalone
#!/bin/sh

EOF
if [ "$arch" ]; then
	cat <<EOF >> $standalone
ARCH=\`uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/'\`
[ "\$ARCH" = "aarch64" ] && ARCH="arm64"
if [ "\$ARCH" != "$arch" ]; then
	echo "skip $testname ($arch only)" 1>&2
	exit 1
fi

EOF
fi
if [ "$check" ]; then
	cat <<EOF >> $standalone
for param in $check; do
	path=\`echo \$param | cut -d= -f1\`
	value=\`echo \$param | cut -d= -f2\`
	if [ -f "\$path" ] && [ "\`cat \$path\`" != "\$value" ]; then
		echo "skip $testname (\$path not equal to \$value)" 1>&2
		exit 1
	fi
done

EOF
fi
if [ ! -f $kernel ]; then
	cat <<EOF >> $standalone
echo "skip $testname (test kernel not present)" 1>&2
exit 1
EOF
else
	cat <<EOF >> $standalone
trap 'rm -f \$bin; exit 1' HUP INT TERM
bin=\`mktemp\`
base64 -d << 'BIN_EOF' | zcat > \$bin &&
EOF
gzip - < $kernel | base64 >> $standalone
	cat <<EOF >> $standalone
BIN_EOF

qemu="$qemu"
if [ "\$QEMU" ]; then
	qemu="\$QEMU"
fi
cmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`"
echo \$qemu $cmdline -smp $smp $opts
\$qemu \$cmdline -smp $smp $opts
ret=\$?
echo Return value from qemu: \$ret
if [ \$ret -le 1 ]; then
	echo PASS $testname 1>&2
else
	echo FAIL $testname 1>&2
fi
rm -f \$bin
exit 0
EOF
fi
chmod +x $standalone
return 0
}

trap 'rm -f $cfg; exit 1' HUP INT TERM
trap 'rm -f $cfg' EXIT
cfg=$(mktemp)

if [ -n "$one_testname" ]; then
	if grep -q "\[$one_testname\]" $unittests; then
		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
			| awk '!/^\[/ || NR == 1' > $cfg
	else
		echo "[$one_testname]" > $cfg
		echo "file = $one_kernel_base" >> $cfg
	fi
else
	cp -f $unittests $cfg
fi

for_each_unittest $cfg mkstandalone
