xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision 2b30b76497b8d4a064ca30022d970bee413f163b)
1*2b30b764SAndrew Jones#!/bin/bash
2*2b30b764SAndrew Jones
3*2b30b764SAndrew Jonesif [ ! -f config.mak ]; then
4*2b30b764SAndrew Jones	echo "run ./configure && make first. See ./configure -h"
5*2b30b764SAndrew Jones	exit
6*2b30b764SAndrew Jonesfi
7*2b30b764SAndrew Jonessource config.mak
8*2b30b764SAndrew Jonessource scripts/functions.bash
9*2b30b764SAndrew Jones
10*2b30b764SAndrew Jonesone_kernel="$1"
11*2b30b764SAndrew Jones[ "$one_kernel" ] && one_kernel_base=$(basename $one_kernel)
12*2b30b764SAndrew Jonesone_testname="$2"
13*2b30b764SAndrew Jonesif [ -n "$one_kernel" ] && [ ! -f $one_kernel ]; then
14*2b30b764SAndrew Jones	echo "$one_kernel doesn't exist"
15*2b30b764SAndrew Jones	exit 1
16*2b30b764SAndrew Joneselif [ -n "$one_kernel" ] && [ -z "$one_testname" ]; then
17*2b30b764SAndrew Jones	one_testname="${one_kernel_base%.*}"
18*2b30b764SAndrew Jonesfi
19*2b30b764SAndrew Jones
20*2b30b764SAndrew Jonesunittests=$TEST_DIR/unittests.cfg
21*2b30b764SAndrew Jonesmkdir -p tests
22*2b30b764SAndrew Jones
23*2b30b764SAndrew Jonesfunction mkstandalone()
24*2b30b764SAndrew Jones{
25*2b30b764SAndrew Jones	local testname="$1"
26*2b30b764SAndrew Jones	local groups="$2"
27*2b30b764SAndrew Jones	local smp="$3"
28*2b30b764SAndrew Jones	local kernel="$4"
29*2b30b764SAndrew Jones	local opts="$5"
30*2b30b764SAndrew Jones	local arch="$6"
31*2b30b764SAndrew Jones	local check="$7"
32*2b30b764SAndrew Jones
33*2b30b764SAndrew Jones	if [ -z "$testname" ]; then
34*2b30b764SAndrew Jones		return 1
35*2b30b764SAndrew Jones	fi
36*2b30b764SAndrew Jones
37*2b30b764SAndrew Jones	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
38*2b30b764SAndrew Jones		return 1
39*2b30b764SAndrew Jones	fi
40*2b30b764SAndrew Jones
41*2b30b764SAndrew Jones	standalone=tests/$testname
42*2b30b764SAndrew Jones	cmdline=$(DRYRUN=yes ./$TEST_DIR-run $kernel)
43*2b30b764SAndrew Jones	if [ $? -ne 0 ]; then
44*2b30b764SAndrew Jones		echo $cmdline
45*2b30b764SAndrew Jones		exit 1
46*2b30b764SAndrew Jones	fi
47*2b30b764SAndrew Jones	qemu=$(cut -d' ' -f1 <<< "$cmdline")
48*2b30b764SAndrew Jones	cmdline=$(cut -d' ' -f2- <<< "$cmdline")
49*2b30b764SAndrew Jones
50*2b30b764SAndrew Jones	cat <<EOF > $standalone
51*2b30b764SAndrew Jones#!/bin/sh
52*2b30b764SAndrew Jones
53*2b30b764SAndrew JonesEOF
54*2b30b764SAndrew Jonesif [ "$arch" ]; then
55*2b30b764SAndrew Jones	cat <<EOF >> $standalone
56*2b30b764SAndrew JonesARCH=\`uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/'\`
57*2b30b764SAndrew Jones[ "\$ARCH" = "aarch64" ] && ARCH="arm64"
58*2b30b764SAndrew Jonesif [ "\$ARCH" != "$arch" ]; then
59*2b30b764SAndrew Jones	echo "skip $testname ($arch only)" 1>&2
60*2b30b764SAndrew Jones	exit 1
61*2b30b764SAndrew Jonesfi
62*2b30b764SAndrew Jones
63*2b30b764SAndrew JonesEOF
64*2b30b764SAndrew Jonesfi
65*2b30b764SAndrew Jonesif [ "$check" ]; then
66*2b30b764SAndrew Jones	cat <<EOF >> $standalone
67*2b30b764SAndrew Jonesfor param in $check; do
68*2b30b764SAndrew Jones	path=\`echo \$param | cut -d= -f1\`
69*2b30b764SAndrew Jones	value=\`echo \$param | cut -d= -f2\`
70*2b30b764SAndrew Jones	if [ -f "\$path" ] && [ "\`cat \$path\`" != "\$value" ]; then
71*2b30b764SAndrew Jones		echo "skip $testname (\$path not equal to \$value)" 1>&2
72*2b30b764SAndrew Jones		exit 1
73*2b30b764SAndrew Jones	fi
74*2b30b764SAndrew Jonesdone
75*2b30b764SAndrew Jones
76*2b30b764SAndrew JonesEOF
77*2b30b764SAndrew Jonesfi
78*2b30b764SAndrew Jonesif [ ! -f $kernel ]; then
79*2b30b764SAndrew Jones	cat <<EOF >> $standalone
80*2b30b764SAndrew Jonesecho "skip $testname (test kernel not present)" 1>&2
81*2b30b764SAndrew Jonesexit 1
82*2b30b764SAndrew JonesEOF
83*2b30b764SAndrew Joneselse
84*2b30b764SAndrew Jones	cat <<EOF >> $standalone
85*2b30b764SAndrew Jonestrap 'rm -f \$bin; exit 1' HUP INT TERM
86*2b30b764SAndrew Jonesbin=\`mktemp\`
87*2b30b764SAndrew Jonesbase64 -d << 'BIN_EOF' | zcat > \$bin &&
88*2b30b764SAndrew JonesEOF
89*2b30b764SAndrew Jonesgzip - < $kernel | base64 >> $standalone
90*2b30b764SAndrew Jones	cat <<EOF >> $standalone
91*2b30b764SAndrew JonesBIN_EOF
92*2b30b764SAndrew Jones
93*2b30b764SAndrew Jonesqemu="$qemu"
94*2b30b764SAndrew Jonesif [ "\$QEMU" ]; then
95*2b30b764SAndrew Jones	qemu="\$QEMU"
96*2b30b764SAndrew Jonesfi
97*2b30b764SAndrew Jonescmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`"
98*2b30b764SAndrew Jonesecho \$qemu $cmdline -smp $smp $opts
99*2b30b764SAndrew Jones\$qemu \$cmdline -smp $smp $opts
100*2b30b764SAndrew Jonesret=\$?
101*2b30b764SAndrew Jonesecho Return value from qemu: \$ret
102*2b30b764SAndrew Jonesif [ \$ret -le 1 ]; then
103*2b30b764SAndrew Jones	echo PASS $testname 1>&2
104*2b30b764SAndrew Joneselse
105*2b30b764SAndrew Jones	echo FAIL $testname 1>&2
106*2b30b764SAndrew Jonesfi
107*2b30b764SAndrew Jonesrm -f \$bin
108*2b30b764SAndrew Jonesexit 0
109*2b30b764SAndrew JonesEOF
110*2b30b764SAndrew Jonesfi
111*2b30b764SAndrew Joneschmod +x $standalone
112*2b30b764SAndrew Jonesreturn 0
113*2b30b764SAndrew Jones}
114*2b30b764SAndrew Jones
115*2b30b764SAndrew Jonestrap 'rm -f $cfg; exit 1' HUP INT TERM
116*2b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT
117*2b30b764SAndrew Jonescfg=$(mktemp)
118*2b30b764SAndrew Jones
119*2b30b764SAndrew Jonesif [ -n "$one_testname" ]; then
120*2b30b764SAndrew Jones	if grep -q "\[$one_testname\]" $unittests; then
121*2b30b764SAndrew Jones		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
122*2b30b764SAndrew Jones			| awk '!/^\[/ || NR == 1' > $cfg
123*2b30b764SAndrew Jones	else
124*2b30b764SAndrew Jones		echo "[$one_testname]" > $cfg
125*2b30b764SAndrew Jones		echo "file = $one_kernel_base" >> $cfg
126*2b30b764SAndrew Jones	fi
127*2b30b764SAndrew Joneselse
128*2b30b764SAndrew Jones	cp -f $unittests $cfg
129*2b30b764SAndrew Jonesfi
130*2b30b764SAndrew Jones
131*2b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone
132