Message ID | 1365766060-7604-2-git-send-email-kwolf@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, 2013-04-12 at 13:27 +0200, Kevin Wolf wrote: > This adds a convenient way to run all tests without having to set up > Autotest. > > Signed-off-by: Kevin Wolf <kwolf@redhat.com> > --- > run_tests.sh | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > x86-run | 9 +++- > x86/unittests.cfg | 2 + > 3 files changed, 132 insertions(+), 2 deletions(-) > create mode 100755 run_tests.sh > > diff --git a/run_tests.sh b/run_tests.sh > new file mode 100755 > index 0000000..55ecac5 > --- /dev/null > +++ b/run_tests.sh > @@ -0,0 +1,123 @@ > +#!/bin/bash > + > +testroot=x86 > +config=$testroot/unittests.cfg > +qemu=${qemu:-qemu-system-x86_64} > +verbose=0 > + > +function run() > +{ > + local testname="$1" > + local groups="$2" > + local smp="$3" > + local kernel="$4" > + local opts="$5" > + local arch="$6" > + > + if [ -z "$testname" ]; then > + return > + fi > + > + if [ -n "$only_group" ] && ! grep -q "$only_group" <<<$groups; then > + return > + fi > + > + if [ -n "$arch" ] && [ "$arch" != "$ARCH" ]; then > + echo "skip $1 ($arch only)" > + return > + fi > + > + cmdline="./x86-run $kernel -smp $smp -display none $opts" > + if [ $verbose != 0 ]; then > + echo $cmdline > + fi > + > + # extra_params in the config file may contain backticks that need to be > + # expanded, so use eval to start qemu > + eval $cmdline >> test.log > + > + if [ $? -le 1 ]; then > + echo -e "\e[32mPASS\e[0m $1" > + else > + echo -e "\e[31mFAIL\e[0m $1" > + fi > +} > + > +function run_all() > +{ > + local config="$1" > + local testname > + local smp > + local kernel > + local opts > + local groups > + local arch > + > + exec {config_fd}<$config > + > + while read -u $config_fd line; do > + if [[ "$line" =~ ^\[(.*)\]$ ]]; then > + run "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" > + testname=${BASH_REMATCH[1]} > + smp=1 > + kernel="" > + opts="" > + groups="" > + arch="" > + elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then > + kernel=$testroot/${BASH_REMATCH[1]} > + elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then > + smp=${BASH_REMATCH[1]} > + elif [[ $line =~ ^extra_params\ *=\ *(.*)$ ]]; then > + opts=${BASH_REMATCH[1]} > + elif [[ $line =~ ^groups\ *=\ *(.*)$ ]]; then > + groups=${BASH_REMATCH[1]} > + elif [[ $line =~ ^arch\ *=\ *(.*)$ ]]; then > + arch=${BASH_REMATCH[1]} > + fi > + done ^ This looks good to me, although using python and the ConfigParser library would be less work (no need to explicitly use regexp based parsing). I'm currently taking a look at the new fields and how autotest could make use of them... Thanks! -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/run_tests.sh b/run_tests.sh new file mode 100755 index 0000000..55ecac5 --- /dev/null +++ b/run_tests.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +testroot=x86 +config=$testroot/unittests.cfg +qemu=${qemu:-qemu-system-x86_64} +verbose=0 + +function run() +{ + local testname="$1" + local groups="$2" + local smp="$3" + local kernel="$4" + local opts="$5" + local arch="$6" + + if [ -z "$testname" ]; then + return + fi + + if [ -n "$only_group" ] && ! grep -q "$only_group" <<<$groups; then + return + fi + + if [ -n "$arch" ] && [ "$arch" != "$ARCH" ]; then + echo "skip $1 ($arch only)" + return + fi + + cmdline="./x86-run $kernel -smp $smp -display none $opts" + if [ $verbose != 0 ]; then + echo $cmdline + fi + + # extra_params in the config file may contain backticks that need to be + # expanded, so use eval to start qemu + eval $cmdline >> test.log + + if [ $? -le 1 ]; then + echo -e "\e[32mPASS\e[0m $1" + else + echo -e "\e[31mFAIL\e[0m $1" + fi +} + +function run_all() +{ + local config="$1" + local testname + local smp + local kernel + local opts + local groups + local arch + + exec {config_fd}<$config + + while read -u $config_fd line; do + if [[ "$line" =~ ^\[(.*)\]$ ]]; then + run "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" + testname=${BASH_REMATCH[1]} + smp=1 + kernel="" + opts="" + groups="" + arch="" + elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then + kernel=$testroot/${BASH_REMATCH[1]} + elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then + smp=${BASH_REMATCH[1]} + elif [[ $line =~ ^extra_params\ *=\ *(.*)$ ]]; then + opts=${BASH_REMATCH[1]} + elif [[ $line =~ ^groups\ *=\ *(.*)$ ]]; then + groups=${BASH_REMATCH[1]} + elif [[ $line =~ ^arch\ *=\ *(.*)$ ]]; then + arch=${BASH_REMATCH[1]} + fi + done + + run "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" + + exec {config_fd}<&- +} + +function usage() +{ +cat <<EOF + +Usage: $0 [-g group] [-h] [-v] + + -g: Only execute tests in the given group + -h: Output this help text + -v: Enables verbose mode + +Set the environment variable QEMU=/path/to/qemu-system-x86_64 to allow the +internally used x86-run to pick up the right qemu binary. + +EOF +} + +# As it happens, config.mak is valid shell script code, too :-) +source config.mak + +echo > test.log +while getopts "g:hv" opt; do + case $opt in + g) + only_group=$OPTARG + ;; + h) + usage + exit + ;; + v) + verbose=1 + ;; + *) + exit + ;; + esac +done + +run_all $config diff --git a/x86-run b/x86-run index e395a70..19e5dec 100755 --- a/x86-run +++ b/x86-run @@ -13,7 +13,7 @@ else qemu="${qemusystem}" else echo QEMU binary ${QEMU} has no support for test device. Exiting. - exit 1 + exit 2 fi fi @@ -24,4 +24,9 @@ then else command="${qemu} -device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out -serial stdio -kernel" fi -exec ${command} "$@" + +echo ${command} "$@" +${command} "$@" +ret=$? +echo Return value from qemu: $ret +exit $ret diff --git a/x86/unittests.cfg b/x86/unittests.cfg index 5e08c55..7d0fa73 100644 --- a/x86/unittests.cfg +++ b/x86/unittests.cfg @@ -3,6 +3,8 @@ # file = foo.flat # Name of the flat file to be used # smp = 2 # Number of processors the VM will use during this test # extra_params = -cpu qemu64,+x2apic # Additional parameters used +# arch = i386/x86_64 # Only if the test case works only on one of them +# groups = group1 group2 # Used to identify test cases with run_tests -g ... [apic] file = apic.flat
This adds a convenient way to run all tests without having to set up Autotest. Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- run_tests.sh | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ x86-run | 9 +++- x86/unittests.cfg | 2 + 3 files changed, 132 insertions(+), 2 deletions(-) create mode 100755 run_tests.sh