xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision 7e35f25a2c21313857211989a403fba8de4dd645)
12b30b764SAndrew Jones#!/bin/bash
22b30b764SAndrew Jones
32b30b764SAndrew Jonesif [ ! -f config.mak ]; then
42b30b764SAndrew Jones	echo "run ./configure && make first. See ./configure -h"
52b30b764SAndrew Jones	exit
62b30b764SAndrew Jonesfi
72b30b764SAndrew Jonessource config.mak
82b30b764SAndrew Jonessource scripts/functions.bash
92b30b764SAndrew Jones
102b30b764SAndrew Jonesone_kernel="$1"
112b30b764SAndrew Jones[ "$one_kernel" ] && one_kernel_base=$(basename $one_kernel)
122b30b764SAndrew Jonesone_testname="$2"
132b30b764SAndrew Jonesif [ -n "$one_kernel" ] && [ ! -f $one_kernel ]; then
142b30b764SAndrew Jones	echo "$one_kernel doesn't exist"
152b30b764SAndrew Jones	exit 1
162b30b764SAndrew Joneselif [ -n "$one_kernel" ] && [ -z "$one_testname" ]; then
172b30b764SAndrew Jones	one_testname="${one_kernel_base%.*}"
182b30b764SAndrew Jonesfi
192b30b764SAndrew Jones
202b30b764SAndrew Jonesunittests=$TEST_DIR/unittests.cfg
212b30b764SAndrew Jonesmkdir -p tests
222b30b764SAndrew Jones
23ba4a6fcfSRadim Krčmářtemp_file ()
24ba4a6fcfSRadim Krčmář{
25ba4a6fcfSRadim Krčmář	local var="$1"
26ba4a6fcfSRadim Krčmář	local file="$2"
27ba4a6fcfSRadim Krčmář
28ba4a6fcfSRadim Krčmář	echo "$var=\`mktemp\`"
29ba4a6fcfSRadim Krčmář	echo "cleanup=\"\$$var \$cleanup\""
30ba4a6fcfSRadim Krčmář	echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 1"
31ba4a6fcfSRadim Krčmář
32ba4a6fcfSRadim Krčmář	gzip - < $file | base64
33ba4a6fcfSRadim Krčmář
34ba4a6fcfSRadim Krčmář	echo "BIN_EOF"
35ba4a6fcfSRadim Krčmář	echo "chmod +x \$$var"
36ba4a6fcfSRadim Krčmář}
37ba4a6fcfSRadim Krčmář
382b30b764SAndrew Jonesfunction mkstandalone()
392b30b764SAndrew Jones{
402b30b764SAndrew Jones	local testname="$1"
412b30b764SAndrew Jones	local groups="$2"
422b30b764SAndrew Jones	local smp="$3"
432b30b764SAndrew Jones	local kernel="$4"
442b30b764SAndrew Jones	local opts="$5"
452b30b764SAndrew Jones	local arch="$6"
462b30b764SAndrew Jones	local check="$7"
470601b85cSAndrew Jones	local accel="$8"
482b30b764SAndrew Jones
492b30b764SAndrew Jones	if [ -z "$testname" ]; then
502b30b764SAndrew Jones		return 1
512b30b764SAndrew Jones	fi
522b30b764SAndrew Jones
532b30b764SAndrew Jones	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
542b30b764SAndrew Jones		return 1
552b30b764SAndrew Jones	fi
562b30b764SAndrew Jones
572b30b764SAndrew Jones	standalone=tests/$testname
582b30b764SAndrew Jones
59560cd30bSRadim Krčmář	exec {tmpfd}<&1
60560cd30bSRadim Krčmář	exec > $standalone
612b30b764SAndrew Jones
62949e210fSRadim Krčmář	echo "#!/bin/bash"
63f5738f77SRadim Krčmář	grep '^ARCH=' config.mak
64560cd30bSRadim Krčmář
652b30b764SAndrew Jonesif [ "$check" ]; then
66560cd30bSRadim Krčmář	cat <<EOF
672b30b764SAndrew Jonesfor param in $check; do
682b30b764SAndrew Jones	path=\`echo \$param | cut -d= -f1\`
692b30b764SAndrew Jones	value=\`echo \$param | cut -d= -f2\`
702b30b764SAndrew Jones	if [ -f "\$path" ] && [ "\`cat \$path\`" != "\$value" ]; then
712b30b764SAndrew Jones		echo "skip $testname (\$path not equal to \$value)" 1>&2
722b30b764SAndrew Jones		exit 1
732b30b764SAndrew Jones	fi
742b30b764SAndrew Jonesdone
752b30b764SAndrew Jones
762b30b764SAndrew JonesEOF
772b30b764SAndrew Jonesfi
782b30b764SAndrew Jonesif [ ! -f $kernel ]; then
79560cd30bSRadim Krčmář	cat <<EOF
802b30b764SAndrew Jonesecho "skip $testname (test kernel not present)" 1>&2
812b30b764SAndrew Jonesexit 1
822b30b764SAndrew JonesEOF
832b30b764SAndrew Joneselse
84949e210fSRadim Krčmář	echo "trap 'rm -f \$cleanup' EXIT"
85ba4a6fcfSRadim Krčmář
86ba4a6fcfSRadim Krčmář	temp_file bin "$kernel"
87*7e35f25aSRadim Krčmář	temp_file RUNTIME_arch_run "$TEST_DIR/run"
88ba4a6fcfSRadim Krčmář
89560cd30bSRadim Krčmář	cat <<EOF
902b30b764SAndrew Jones
915e78b70dSAndrew JonesMAX_SMP="MAX_SMP"
92*7e35f25aSRadim Krčmářecho \$RUNTIME_arch_run \$bin -smp $smp $opts
930601b85cSAndrew Jones
94*7e35f25aSRadim Krčmářif \$RUNTIME_arch_run _NO_FILE_4Uhere_ 2>&1 | grep 'No accelerator found'; then
950601b85cSAndrew Jones	ret=2
960601b85cSAndrew Joneselse
975e78b70dSAndrew Jones	MAX_SMP=\`getconf _NPROCESSORS_CONF\`
98*7e35f25aSRadim Krčmář	while \$RUNTIME_arch_run \$bin -smp \$MAX_SMP 2>&1 | grep 'exceeds max cpus' > /dev/null; do
995e78b70dSAndrew Jones		MAX_SMP=\`expr \$MAX_SMP - 1\`
1005e78b70dSAndrew Jones	done
1015e78b70dSAndrew Jones
102*7e35f25aSRadim Krčmář	\$RUNTIME_arch_run \$bin -smp $smp $opts
1032b30b764SAndrew Jones	ret=\$?
1040601b85cSAndrew Jonesfi
1052b30b764SAndrew Jonesif [ \$ret -le 1 ]; then
1062b30b764SAndrew Jones	echo PASS $testname 1>&2
1072b30b764SAndrew Joneselse
1082b30b764SAndrew Jones	echo FAIL $testname 1>&2
1092b30b764SAndrew Jonesfi
1102b30b764SAndrew Jonesexit 0
1112b30b764SAndrew JonesEOF
1122b30b764SAndrew Jonesfi
113560cd30bSRadim Krčmář	exec 1<&$tmpfd {tmpfd}<&-
1142b30b764SAndrew Jones	chmod +x $standalone
115560cd30bSRadim Krčmář
1162b30b764SAndrew Jones	return 0
1172b30b764SAndrew Jones}
1182b30b764SAndrew Jones
1192b30b764SAndrew Jonestrap 'rm -f $cfg; exit 1' HUP INT TERM
1202b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT
1212b30b764SAndrew Jonescfg=$(mktemp)
1222b30b764SAndrew Jones
1232b30b764SAndrew Jonesif [ -n "$one_testname" ]; then
1242b30b764SAndrew Jones	if grep -q "\[$one_testname\]" $unittests; then
1252b30b764SAndrew Jones		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
1262b30b764SAndrew Jones			| awk '!/^\[/ || NR == 1' > $cfg
1272b30b764SAndrew Jones	else
1282b30b764SAndrew Jones		echo "[$one_testname]" > $cfg
1292b30b764SAndrew Jones		echo "file = $one_kernel_base" >> $cfg
1302b30b764SAndrew Jones	fi
1312b30b764SAndrew Joneselse
1322b30b764SAndrew Jones	cp -f $unittests $cfg
1332b30b764SAndrew Jonesfi
1342b30b764SAndrew Jones
1352b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone
136