This enables qemu unit tests to run on gnumach as xen dom0.
However, it will skip running the tests if xen binary is missing.
Therefore, the test suite will not fail if not intending to test xen.
This is useful, for example on CI where we want to see a pass status
for most of the tests without fully testing xen which is difficult to
execute.
This should make debugging easier for anyone interested in progressing
the xen dom0 port of gnumach.
---
tests/Makefrag.am | 5 +----
tests/grub.cfg.xen.template | 5 +++++
tests/run-qemu.sh.template | 8 +++++++-
tests/test-multiboot.in | 6 ++++++
tests/user-qemu.mk | 29 ++++++++++++++++++++++++++++-
5 files changed, 47 insertions(+), 6 deletions(-)
create mode 100644 tests/grub.cfg.xen.template
diff --git a/tests/Makefrag.am b/tests/Makefrag.am
index ef5616a6..087aa2e2 100644
--- a/tests/Makefrag.am
+++ b/tests/Makefrag.am
@@ -20,8 +20,6 @@
# Tests.
#
-if !PLATFORM_xen
-
# Let user specify a kernel to test
GNUMACH ?= gnumach
export GNUMACH
@@ -37,6 +35,7 @@ TESTS += \
EXTRA_DIST += \
tests/README \
tests/grub.cfg.single.template \
+ tests/grub.cfg.xen.template \
tests/run-qemu.sh.template \
tests/include/syscalls.h \
tests/include/testlib.h \
@@ -50,5 +49,3 @@ EXTRA_DIST += \
clean-local: $(USER_TESTS_CLEAN)
rm -fr tests/include-mach tests/test-multiboot tests/errlist.c
tests/mig-out
-
-endif # !PLATFORM_xen
diff --git a/tests/grub.cfg.xen.template b/tests/grub.cfg.xen.template
new file mode 100644
index 00000000..083c4166
--- /dev/null
+++ b/tests/grub.cfg.xen.template
@@ -0,0 +1,5 @@
+echo TEST_START_MARKER
+multiboot /boot/xen dom0_mem=2000M,max:2000M console=com1 noreboot
+module /boot/gnumach GNUMACHARGS
+module /boot/BOOTMODULE BOOTMODULE '${host-port}' '${device-port}'
'$(task-create)' '$(task-resume)'
+boot
diff --git a/tests/run-qemu.sh.template b/tests/run-qemu.sh.template
index a7ec426f..2fd558ad 100644
--- a/tests/run-qemu.sh.template
+++ b/tests/run-qemu.sh.template
@@ -21,8 +21,14 @@ cmd="QEMU_BIN QEMU_OPTS -cdrom tests/test-TESTNAME.iso"
log="tests/test-TESTNAME.raw"
echo "temp log $log"
+
+if PLATFORM_XEN && [ ! -e 'XEN_BIN' ]; then
+ echo "skipping, XEN_BIN not found for xen tests"
+ exit 77
+fi
+
if which QEMU_BIN >/dev/null ; then
- if ! timeout -v --foreground --kill-after=3 60s $cmd \
+ if ! timeout -v --foreground --kill-after=3 120s $cmd \
| tee $log | sed -n "/TEST_START_MARKER/"',$p' ; then
exit 10 # timeout
fi
diff --git a/tests/test-multiboot.in b/tests/test-multiboot.in
index 7693ab93..cc0f8d77 100644
--- a/tests/test-multiboot.in
+++ b/tests/test-multiboot.in
@@ -18,6 +18,12 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+if $PLATFORM_XEN
+then
+ # ignore this test
+ exit 77
+fi
+
[ -n "$GNUMACH" ] || GNUMACH=gnumach
if grub-file --help > /dev/null 2>&1
then grub-file --is-x86-multiboot $GNUMACH
diff --git a/tests/user-qemu.mk b/tests/user-qemu.mk
index 7893c7d2..a01e1ead 100644
--- a/tests/user-qemu.mk
+++ b/tests/user-qemu.mk
@@ -173,11 +173,18 @@ tests/module-%: $(srcdir)/tests/test-%.c $(SRC_TESTLIB)
$(MACH_TESTINSTALL)
# packaging of qemu bootable image and test runner
#
+XEN_BIN ?= /usr/share/xen/xen
GRUB_MKRESCUE ?= grub-mkrescue
GNUMACH_ARGS = console=com0
-QEMU_OPTS = -m 2047 -nographic -no-reboot -boot d
+QEMU_OPTS = -m 2047 -nographic -no-reboot -monitor none -serial stdio -boot d
QEMU_GDB_PORT ?= 1234
+if PLATFORM_xen
+PLATFORM_XEN = true
+QEMU_BIN = qemu-system-x86_64
+QEMU_OPTS += -cpu core2duo-v1
+else
+PLATFORM_XEN = false
if HOST_ix86
QEMU_BIN = qemu-system-i386
QEMU_OPTS += -cpu pentium3-v1
@@ -186,10 +193,27 @@ if HOST_x86_64
QEMU_BIN = qemu-system-x86_64
QEMU_OPTS += -cpu core2duo-v1
endif
+endif
+
if enable_smp
QEMU_OPTS += -smp 2
endif
+if PLATFORM_xen
+tests/test-%.iso: tests/module-% $(GNUMACH)
$(srcdir)/tests/grub.cfg.xen.template
+ rm -rf $(builddir)/tests/isofiles-$*
+ mkdir -p $(builddir)/tests/isofiles-$*/boot/grub/
+ < $(srcdir)/tests/grub.cfg.xen.template \
+ sed -e "s|BOOTMODULE|$(notdir $<)|g" \
+ -e "s/GNUMACHARGS/$(GNUMACH_ARGS)/g" \
+ -e "s/TEST_START_MARKER/$(TEST_START_MARKER)/g" \
+ >$(builddir)/tests/isofiles-$*/boot/grub/grub.cfg
+ cp $(GNUMACH) $(builddir)/tests/isofiles-$*/boot/gnumach
+ if [ -e "$(XEN_BIN)" ]; then cp $(XEN_BIN)
$(builddir)/tests/isofiles-$*/boot/xen; fi
+ cp $< $(builddir)/tests/isofiles-$*/boot/
+ $(GRUB_MKRESCUE) -o $@ $(builddir)/tests/isofiles-$*
+ rm -rf $(builddir)/tests/isofiles-$*
+else
tests/test-%.iso: tests/module-% $(GNUMACH)
$(srcdir)/tests/grub.cfg.single.template
rm -rf $(builddir)/tests/isofiles-$*
mkdir -p $(builddir)/tests/isofiles-$*/boot/grub/
@@ -202,12 +226,15 @@ tests/test-%.iso: tests/module-% $(GNUMACH)
$(srcdir)/tests/grub.cfg.single.temp
cp $< $(builddir)/tests/isofiles-$*/boot/
$(GRUB_MKRESCUE) -o $@ $(builddir)/tests/isofiles-$*
rm -rf $(builddir)/tests/isofiles-$*
+endif
tests/test-%: tests/test-%.iso $(srcdir)/tests/run-qemu.sh.template
< $(srcdir)/tests/run-qemu.sh.template \
sed -e "s|TESTNAME|$(subst tests/test-,,$@)|g" \
-e "s/QEMU_OPTS/$(QEMU_OPTS)/g" \
-e "s/QEMU_BIN/$(QEMU_BIN)/g" \
+ -e "s|XEN_BIN|$(XEN_BIN)|g" \
+ -e "s/PLATFORM_XEN/$(PLATFORM_XEN)/g" \
-e "s/TEST_START_MARKER/$(TEST_START_MARKER)/g" \
-e "s/TEST_SUCCESS_MARKER/$(TEST_SUCCESS_MARKER)/g" \
-e "s/TEST_FAILURE_MARKER/$(TEST_FAILURE_MARKER)/g" \
--
2.47.3