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 580601b85cSAndrew Jones cmdline=$(DRYRUN=yes ACCEL=$accel ./$TEST_DIR-run $kernel) 592b30b764SAndrew Jones if [ $? -ne 0 ]; then 602b30b764SAndrew Jones echo $cmdline 612b30b764SAndrew Jones exit 1 622b30b764SAndrew Jones fi 632b30b764SAndrew Jones qemu=$(cut -d' ' -f1 <<< "$cmdline") 642b30b764SAndrew Jones cmdline=$(cut -d' ' -f2- <<< "$cmdline") 652b30b764SAndrew Jones 66560cd30bSRadim Krčmář exec {tmpfd}<&1 67560cd30bSRadim Krčmář exec > $standalone 682b30b764SAndrew Jones 69*949e210fSRadim Krčmář echo "#!/bin/bash" 70f5738f77SRadim Krčmář grep '^ARCH=' config.mak 71560cd30bSRadim Krčmář 722b30b764SAndrew Jonesif [ "$check" ]; then 73560cd30bSRadim Krčmář cat <<EOF 742b30b764SAndrew Jonesfor param in $check; do 752b30b764SAndrew Jones path=\`echo \$param | cut -d= -f1\` 762b30b764SAndrew Jones value=\`echo \$param | cut -d= -f2\` 772b30b764SAndrew Jones if [ -f "\$path" ] && [ "\`cat \$path\`" != "\$value" ]; then 782b30b764SAndrew Jones echo "skip $testname (\$path not equal to \$value)" 1>&2 792b30b764SAndrew Jones exit 1 802b30b764SAndrew Jones fi 812b30b764SAndrew Jonesdone 822b30b764SAndrew Jones 832b30b764SAndrew JonesEOF 842b30b764SAndrew Jonesfi 852b30b764SAndrew Jonesif [ ! -f $kernel ]; then 86560cd30bSRadim Krčmář cat <<EOF 872b30b764SAndrew Jonesecho "skip $testname (test kernel not present)" 1>&2 882b30b764SAndrew Jonesexit 1 892b30b764SAndrew JonesEOF 902b30b764SAndrew Joneselse 91*949e210fSRadim Krčmář echo "trap 'rm -f \$cleanup' EXIT" 92ba4a6fcfSRadim Krčmář 93ba4a6fcfSRadim Krčmář temp_file bin "$kernel" 94ba4a6fcfSRadim Krčmář 95560cd30bSRadim Krčmář cat <<EOF 962b30b764SAndrew Jones 972b30b764SAndrew Jonesqemu="$qemu" 982b30b764SAndrew Jonesif [ "\$QEMU" ]; then 992b30b764SAndrew Jones qemu="\$QEMU" 1002b30b764SAndrew Jonesfi 1015e78b70dSAndrew Jones 1025e78b70dSAndrew JonesMAX_SMP="MAX_SMP" 1032b30b764SAndrew Jonesecho \$qemu $cmdline -smp $smp $opts 1040601b85cSAndrew Jones 1050601b85cSAndrew Jonescmdline="\`echo '$cmdline' | sed s%$kernel%_NO_FILE_4Uhere_%\`" 1060601b85cSAndrew Jonesif \$qemu \$cmdline 2>&1 | grep 'No accelerator found'; then 1070601b85cSAndrew Jones ret=2 1080601b85cSAndrew Joneselse 1095e78b70dSAndrew Jones MAX_SMP=\`getconf _NPROCESSORS_CONF\` 1105e78b70dSAndrew Jones while \$qemu \$cmdline -smp \$MAX_SMP 2>&1 | grep 'exceeds max cpus' > /dev/null; do 1115e78b70dSAndrew Jones MAX_SMP=\`expr \$MAX_SMP - 1\` 1125e78b70dSAndrew Jones done 1135e78b70dSAndrew Jones 1140601b85cSAndrew Jones cmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`" 1152b30b764SAndrew Jones \$qemu \$cmdline -smp $smp $opts 1162b30b764SAndrew Jones ret=\$? 1170601b85cSAndrew Jonesfi 1182b30b764SAndrew Jonesecho Return value from qemu: \$ret 1192b30b764SAndrew Jonesif [ \$ret -le 1 ]; then 1202b30b764SAndrew Jones echo PASS $testname 1>&2 1212b30b764SAndrew Joneselse 1222b30b764SAndrew Jones echo FAIL $testname 1>&2 1232b30b764SAndrew Jonesfi 1242b30b764SAndrew Jonesexit 0 1252b30b764SAndrew JonesEOF 1262b30b764SAndrew Jonesfi 127560cd30bSRadim Krčmář exec 1<&$tmpfd {tmpfd}<&- 1282b30b764SAndrew Jones chmod +x $standalone 129560cd30bSRadim Krčmář 1302b30b764SAndrew Jones return 0 1312b30b764SAndrew Jones} 1322b30b764SAndrew Jones 1332b30b764SAndrew Jonestrap 'rm -f $cfg; exit 1' HUP INT TERM 1342b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT 1352b30b764SAndrew Jonescfg=$(mktemp) 1362b30b764SAndrew Jones 1372b30b764SAndrew Jonesif [ -n "$one_testname" ]; then 1382b30b764SAndrew Jones if grep -q "\[$one_testname\]" $unittests; then 1392b30b764SAndrew Jones sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \ 1402b30b764SAndrew Jones | awk '!/^\[/ || NR == 1' > $cfg 1412b30b764SAndrew Jones else 1422b30b764SAndrew Jones echo "[$one_testname]" > $cfg 1432b30b764SAndrew Jones echo "file = $one_kernel_base" >> $cfg 1442b30b764SAndrew Jones fi 1452b30b764SAndrew Joneselse 1462b30b764SAndrew Jones cp -f $unittests $cfg 1472b30b764SAndrew Jonesfi 1482b30b764SAndrew Jones 1492b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone 150