Dracut's run-qemu could find which virtualization technology to the
user in the order of kvm, kqemu, userspace. Using run-qemu could allow
running tests where qemu-kvm doesn't exist.
Signed-off-by: Coiby Xu <coxu(a)redhat.com>
---
tests/scripts/run-qemu | 23 +++++++++++++++++++++++
tests/scripts/test-lib.sh | 2 +-
2 files changed, 24 insertions(+), 1 deletion(-)
create mode 100755 tests/scripts/run-qemu
diff --git a/tests/scripts/run-qemu b/tests/scripts/run-qemu
new file mode 100755
index 0000000..836387a
--- /dev/null
+++ b/tests/scripts/run-qemu
@@ -0,0 +1,23 @@
+#!/bin/bash
+# Check which virtualization technology to use
+# We prefer kvm, kqemu, userspace in that order.
+
+# This script is based on
https://github.com/dracutdevs/dracut/blob/master/test/run-qemu
+
+export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+[[ -x /usr/bin/qemu ]] && BIN=/usr/bin/qemu && ARGS="-cpu max"
+$(lsmod | grep -q '^kqemu ') && BIN=/usr/bin/qemu &&
ARGS="-kernel-kqemu -cpu host"
+[[ -c /dev/kvm && -x /usr/bin/kvm ]] && BIN=/usr/bin/kvm &&
ARGS="-cpu host"
+[[ -c /dev/kvm && -x /usr/bin/qemu-kvm ]] && BIN=/usr/bin/qemu-kvm
&& ARGS="-cpu host"
+[[ -c /dev/kvm && -x /usr/libexec/qemu-kvm ]] &&
BIN=/usr/libexec/qemu-kvm && ARGS="-cpu host"
+[[ -x /usr/bin/qemu-system-$(uname -i) ]] && BIN=/usr/bin/qemu-system-$(uname -i)
&& ARGS="-cpu max"
+[[ -c /dev/kvm && -x /usr/bin/qemu-system-$(uname -i) ]] &&
BIN=/usr/bin/qemu-system-$(uname -i) && ARGS="-enable-kvm -cpu host"
+
+[[ $BIN ]] || {
+ echo "Could not find a working KVM or QEMU to test with!" >&2
+ echo "Please install kvm or qemu." >&2
+ exit 1
+}
+
+exec $BIN $ARGS "$@"
diff --git a/tests/scripts/test-lib.sh b/tests/scripts/test-lib.sh
index aff5cd3..f8a2249 100644
--- a/tests/scripts/test-lib.sh
+++ b/tests/scripts/test-lib.sh
@@ -89,7 +89,7 @@ run_test_sync() {
local qemu_cmd=$(get_test_qemu_cmd $1)
if [ -n "$qemu_cmd" ]; then
- timeout --foreground 10m qemu-kvm $(get_test_qemu_cmd $1)
+ timeout --foreground 10m $BASEDIR/run-qemu $(get_test_qemu_cmd $1)
else
echo "error: test qemu command line is not configured" > /dev/stderr
return 1
--
2.31.0