diff mbox

[kvm-unittests,v2,1/4] Add run_tests.sh

Message ID 1365766060-7604-2-git-send-email-kwolf@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kevin Wolf April 12, 2013, 11:27 a.m. UTC
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

Comments

Lucas Meneghel Rodrigues April 12, 2013, 12:24 p.m. UTC | #1
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 mbox

Patch

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