automation: add a QEMU based x86_64 Dom0/DomU test

Introduce a test based on QEMU to run Xen, Dom0 and start a DomU.
This is similar to the existing qemu-alpine-arm64.sh script and test.
The only differences are:
- use Debian's qemu-system-x86_64 (on ARM we build our own)
- use ipxe instead of u-boot and ImageBuilder

Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
This commit is contained in:
Stefano Stabellini committed 2021-10-29 16:23:26 -07:00
1 parent d07af6949f
commit 3030a73bf8
2 files changed
+119

No files matched your search

+24
View File
@@ -47,6 +47,30 @@ qemu-alpine-arm64-gcc:
- /^coverity-tested\/.*/
- /^stable-.*/
qemu-alpine-x86_64-gcc:
stage: test
image: registry.gitlab.com/xen-project/xen/${CONTAINER}
variables:
CONTAINER: debian:stretch
script:
- ./automation/scripts/qemu-alpine-x86_64.sh 2>&1 | tee qemu-smoke-x86_64.log
dependencies:
- alpine-3.12-gcc
- alpine-3.12-rootfs-export
- kernel-5.10.74-export
artifacts:
paths:
- smoke.serial
- '*.log'
when: always
tags:
- x86_64
except:
- master
- smoke
- /^coverity-tested\/.*/
- /^stable-.*/
qemu-smoke-arm64-gcc:
stage: test
image: registry.gitlab.com/xen-project/xen/${CONTAINER}
+95
View File
@@ -0,0 +1,95 @@
#!/bin/bash
set -ex
apt-get -qy update
apt-get -qy install --no-install-recommends cpio \
busybox-static
# DomU Busybox
cd binaries
mkdir -p initrd
mkdir -p initrd/bin
mkdir -p initrd/sbin
mkdir -p initrd/etc
mkdir -p initrd/dev
mkdir -p initrd/proc
mkdir -p initrd/sys
mkdir -p initrd/lib
mkdir -p initrd/var
mkdir -p initrd/mnt
cp /bin/busybox initrd/bin/busybox
initrd/bin/busybox --install initrd/bin
echo "#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t devtmpfs devtmpfs /dev
/bin/sh" > initrd/init
chmod +x initrd/init
# DomU rootfs
cd initrd
find . | cpio --create --format='newc' | gzip > ../initrd.cpio.gz
cd ..
# initrd.tar.gz is Dom0 rootfs
mkdir -p rootfs
cd rootfs
tar xvzf ../initrd.tar.gz
mkdir proc
mkdir run
mkdir srv
mkdir sys
rm var/run
cp -ar ../dist/install/* .
mv ../initrd.cpio.gz ./root
cp ../bzImage ./root
echo "name=\"test\"
memory=512
vcpus=1
kernel=\"/root/bzImage\"
ramdisk=\"/root/initrd.cpio.gz\"
extra=\"console=hvc0 root=/dev/ram0 rdinit=/bin/sh\"
" > root/test.cfg
echo "#!/bin/bash
set -x
export LD_LIBRARY_PATH=/usr/local/lib
bash /etc/init.d/xencommons start
xl list
xl create -c /root/test.cfg
" > etc/local.d/xen.start
chmod +x etc/local.d/xen.start
echo "rc_verbose=yes" >> etc/rc.conf
# rebuild Dom0 rootfs
find . |cpio -H newc -o|gzip > ../xen-rootfs.cpio.gz
cd ../..
cat >> binaries/pxelinux.0 << EOF
#!ipxe
kernel xen console=com1
module bzImage console=hvc0
module xen-rootfs.cpio.gz
boot
EOF
# Run the test
rm -f smoke.serial
set +e
timeout -k 1 720 \
qemu-system-x86_64 \
-cpu qemu64,+svm \
-m 2G -smp 2 \
-monitor none -serial stdio \
-nographic \
-device virtio-net-pci,netdev=n0 \
-netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0 |& tee smoke.serial
set -e
(grep -q "Domain-0" smoke.serial && grep -q "BusyBox" smoke.serial) || exit 1
exit 0
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.