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



Reply via email to