* [PATCH 0/2] CI: Check save/restore, minor style update @ 2026-08-04 17:42 Frediano Ziglio 2026-08-04 17:42 ` [PATCH 1/2] CI: Simplify directories creation Frediano Ziglio 2026-08-04 17:42 ` [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 Frediano Ziglio 0 siblings, 2 replies; 11+ messages in thread From: Frediano Ziglio @ 2026-08-04 17:42 UTC (permalink / raw) To: xen-devel Cc: Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper, Marek Marczykowski-Górecki Main change is the second commit implementing a test for save and restore. First commit is just a style change to reduce number of commands (and lines). Frediano Ziglio (2): CI: Simplify directories creation CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 automation/scripts/console.exp | 8 ++++ automation/scripts/qemu-alpine-x86_64.sh | 51 ++++++++++++++++++------ 2 files changed, 47 insertions(+), 12 deletions(-) -- 2.43.0 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] CI: Simplify directories creation 2026-08-04 17:42 [PATCH 0/2] CI: Check save/restore, minor style update Frediano Ziglio @ 2026-08-04 17:42 ` Frediano Ziglio 2026-08-04 19:29 ` Anthony PERARD 2026-08-04 17:42 ` [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 Frediano Ziglio 1 sibling, 1 reply; 11+ messages in thread From: Frediano Ziglio @ 2026-08-04 17:42 UTC (permalink / raw) To: xen-devel Cc: Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper, Marek Marczykowski-Górecki Use a single command. Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> --- automation/scripts/qemu-alpine-x86_64.sh | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh index 242ffca693..60f5cc49fc 100755 --- a/automation/scripts/qemu-alpine-x86_64.sh +++ b/automation/scripts/qemu-alpine-x86_64.sh @@ -4,16 +4,7 @@ set -ex -o pipefail # 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 +mkdir -p initrd/{bin,sbin,etc,dev,proc,sys,lib,var,mnt} cp /bin/busybox initrd/bin/busybox initrd/bin/busybox --install initrd/bin echo "#!/bin/sh -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] CI: Simplify directories creation 2026-08-04 17:42 ` [PATCH 1/2] CI: Simplify directories creation Frediano Ziglio @ 2026-08-04 19:29 ` Anthony PERARD 2026-08-04 21:40 ` Frediano Ziglio 0 siblings, 1 reply; 11+ messages in thread From: Anthony PERARD @ 2026-08-04 19:29 UTC (permalink / raw) To: Frediano Ziglio Cc: xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper, Marek Marczykowski-Górecki [-- Attachment #1: Type: text/plain, Size: 1526 bytes --] On Tue, Aug 04, 2026 at 06:42:17PM +0100, Frediano Ziglio wrote: > diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > index 242ffca693..60f5cc49fc 100755 > --- a/automation/scripts/qemu-alpine-x86_64.sh > +++ b/automation/scripts/qemu-alpine-x86_64.sh > @@ -4,16 +4,7 @@ set -ex -o pipefail > > # 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 > +mkdir -p initrd/{bin,sbin,etc,dev,proc,sys,lib,var,mnt} This makes it really hard to find out if more directory or less directory are been created. When reviewing a patch, we don't see what changed in a line without using more complex tools. For this patch, I have now idea at a glimpse if all the directory that was created before are still created. In the future, we might need to create more directories, this would change on very long line to another, and make it hard to find out what was the logical change, by just looking at the output of `diff -u`. So I don't see this patch as an improvement. But that just my opinion, but that would apply equally to other similar changes, like packing all the variable declaration on a single line in C. Cheers, -- Anthony Perard | Vates XCP-ng Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] CI: Simplify directories creation 2026-08-04 19:29 ` Anthony PERARD @ 2026-08-04 21:40 ` Frediano Ziglio 0 siblings, 0 replies; 11+ messages in thread From: Frediano Ziglio @ 2026-08-04 21:40 UTC (permalink / raw) To: Anthony PERARD Cc: xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper, Marek Marczykowski-Górecki On Tue, 4 Aug 2026 at 20:29, Anthony PERARD <anthony.perard@vates.tech> wrote: > > On Tue, Aug 04, 2026 at 06:42:17PM +0100, Frediano Ziglio wrote: > > diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > > index 242ffca693..60f5cc49fc 100755 > > --- a/automation/scripts/qemu-alpine-x86_64.sh > > +++ b/automation/scripts/qemu-alpine-x86_64.sh > > @@ -4,16 +4,7 @@ set -ex -o pipefail > > > > # 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 > > +mkdir -p initrd/{bin,sbin,etc,dev,proc,sys,lib,var,mnt} > > This makes it really hard to find out if more directory or less > directory are been created. When reviewing a patch, we don't see what > changed in a line without using more complex tools. > > For this patch, I have now idea at a glimpse if all the directory that > was created before are still created. > > In the future, we might need to create more directories, this would > change on very long line to another, and make it hard to find out what > was the logical change, by just looking at the output of `diff -u`. > > So I don't see this patch as an improvement. > > But that just my opinion, but that would apply equally to other similar > changes, like packing all the variable declaration on a single line in C. > > Cheers, > Hi, what about putting the directory names in alphabetical order? Either in multiline or in the concise single line? In both cases it makes it easier to check if it's already there. Or something like mkdir -p binaries/initrd cd binaries/initrd mkdir -p \ bin \ dev \ etc \ lib \ mnt \ proc \ sbin \ sys \ var cd .. Regards, Frediano ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 17:42 [PATCH 0/2] CI: Check save/restore, minor style update Frediano Ziglio 2026-08-04 17:42 ` [PATCH 1/2] CI: Simplify directories creation Frediano Ziglio @ 2026-08-04 17:42 ` Frediano Ziglio 2026-08-04 17:57 ` Marek Marczykowski-Górecki 1 sibling, 1 reply; 11+ messages in thread From: Frediano Ziglio @ 2026-08-04 17:42 UTC (permalink / raw) To: xen-devel Cc: Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper, Marek Marczykowski-Górecki Make sure that save/restore continue to work. The check save and restore twice to check for corrupted status. Also a command is launched in the guest to make sure that the machine is not crashed but working. Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> --- automation/scripts/console.exp | 8 +++++ automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp index e27886bbef..ff58ed29b8 100755 --- a/automation/scripts/console.exp +++ b/automation/scripts/console.exp @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { system "$env(WAKEUP_CMD)" } +if {[info exists env(EXPECT_TEXTS)]} { + set lines [split "$env(EXPECT_TEXTS)" "\n"] + foreach {exp snd} $lines { + expect -re "$exp" + send "$snd\n" + } +} + if {[info exists env(LOG_MSG)]} { expect { -notransfer -re "$env(PASSED)" { diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh index 60f5cc49fc..409a601c34 100755 --- a/automation/scripts/qemu-alpine-x86_64.sh +++ b/automation/scripts/qemu-alpine-x86_64.sh @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg " > etc/local.d/xen.start chmod +x etc/local.d/xen.start + +# Script to test save and restore. +# It saves and restores domU domain twice to check if the domain was corrupted +# during the first sequence. +# At the end open the console to check if the domain is working. +cat > root/save_restore_test << "EOF" +#!/bin/sh +set -ex +xl list | grep -q domU +rm -f save.dat +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg +xl restore /root/domU.cfg save.dat +xl list | grep -q domU +rm -f save.dat +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg +xl restore /root/domU.cfg save.dat +xl list | grep -q domU +rm -f save.dat +xl console "$(xl list | awk '$1=="domU" { print $2 }')" +EOF +chmod +x root/save_restore_test + find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz cd ../.. @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ -device virtio-net-pci,netdev=n0 \ -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" +# Sequence of expect/send strings: +# 1. wait domain start and close console; +# 2. wait login prompt and login as root +# 3. wait login and launch save/restore test; +# 4. wait restore from domain console and send a command. +gs=$'\x1d' +export EXPECT_TEXTS="BusyBox +$gs $gs +login: +root +login on +/root/save_restore_test +Restarting tasks +dmesg | grep suspending | tr o 0" + export TEST_LOG="smoke.serial" export BOOT_MSG="Latest ChangeSet: " -export LOG_MSG="Domain-0" -export PASSED="BusyBox" +export PASSED="suspending xenst0re" ./automation/scripts/console.exp |& sed 's/\r\+$//' -- 2.43.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 17:42 ` [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 Frediano Ziglio @ 2026-08-04 17:57 ` Marek Marczykowski-Górecki 2026-08-04 18:48 ` Frediano Ziglio 0 siblings, 1 reply; 11+ messages in thread From: Marek Marczykowski-Górecki @ 2026-08-04 17:57 UTC (permalink / raw) To: Frediano Ziglio Cc: xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper [-- Attachment #1: Type: text/plain, Size: 3454 bytes --] On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote: > Make sure that save/restore continue to work. > The check save and restore twice to check for corrupted status. > Also a command is launched in the guest to make sure that the > machine is not crashed but working. > > Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> > --- > automation/scripts/console.exp | 8 +++++ > automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- > 2 files changed, 46 insertions(+), 2 deletions(-) > > diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp > index e27886bbef..ff58ed29b8 100755 > --- a/automation/scripts/console.exp > +++ b/automation/scripts/console.exp > @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { > system "$env(WAKEUP_CMD)" > } > > +if {[info exists env(EXPECT_TEXTS)]} { > + set lines [split "$env(EXPECT_TEXTS)" "\n"] > + foreach {exp snd} $lines { > + expect -re "$exp" > + send "$snd\n" > + } > +} > + > if {[info exists env(LOG_MSG)]} { > expect { > -notransfer -re "$env(PASSED)" { > diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > index 60f5cc49fc..409a601c34 100755 > --- a/automation/scripts/qemu-alpine-x86_64.sh > +++ b/automation/scripts/qemu-alpine-x86_64.sh > @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg > > " > etc/local.d/xen.start > chmod +x etc/local.d/xen.start > + > +# Script to test save and restore. > +# It saves and restores domU domain twice to check if the domain was corrupted > +# during the first sequence. > +# At the end open the console to check if the domain is working. > +cat > root/save_restore_test << "EOF" > +#!/bin/sh > +set -ex > +xl list | grep -q domU > +rm -f save.dat > +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > +xl restore /root/domU.cfg save.dat > +xl list | grep -q domU > +rm -f save.dat > +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > +xl restore /root/domU.cfg save.dat > +xl list | grep -q domU > +rm -f save.dat > +xl console "$(xl list | awk '$1=="domU" { print $2 }')" > +EOF > +chmod +x root/save_restore_test > + > find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz > cd ../.. > > @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ > -device virtio-net-pci,netdev=n0 \ > -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" > > +# Sequence of expect/send strings: > +# 1. wait domain start and close console; > +# 2. wait login prompt and login as root > +# 3. wait login and launch save/restore test; > +# 4. wait restore from domain console and send a command. Why doing this interactively over serial, instead of adding to etc/local.d/xen.start and then printing test result at the end? > +gs=$'\x1d' > +export EXPECT_TEXTS="BusyBox > +$gs $gs > +login: > +root > +login on > +/root/save_restore_test > +Restarting tasks > +dmesg | grep suspending | tr o 0" > + > export TEST_LOG="smoke.serial" > export BOOT_MSG="Latest ChangeSet: " > -export LOG_MSG="Domain-0" > -export PASSED="BusyBox" > +export PASSED="suspending xenst0re" > > ./automation/scripts/console.exp |& sed 's/\r\+$//' > -- > 2.43.0 > -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 17:57 ` Marek Marczykowski-Górecki @ 2026-08-04 18:48 ` Frediano Ziglio 2026-08-04 18:55 ` Andrew Cooper 0 siblings, 1 reply; 11+ messages in thread From: Frediano Ziglio @ 2026-08-04 18:48 UTC (permalink / raw) To: Marek Marczykowski-Górecki Cc: xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich, Andrew Cooper On Tue, 4 Aug 2026 at 18:57, Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> wrote: > > On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote: > > Make sure that save/restore continue to work. > > The check save and restore twice to check for corrupted status. > > Also a command is launched in the guest to make sure that the > > machine is not crashed but working. > > > > Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> > > --- > > automation/scripts/console.exp | 8 +++++ > > automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- > > 2 files changed, 46 insertions(+), 2 deletions(-) > > > > diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp > > index e27886bbef..ff58ed29b8 100755 > > --- a/automation/scripts/console.exp > > +++ b/automation/scripts/console.exp > > @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { > > system "$env(WAKEUP_CMD)" > > } > > > > +if {[info exists env(EXPECT_TEXTS)]} { > > + set lines [split "$env(EXPECT_TEXTS)" "\n"] > > + foreach {exp snd} $lines { > > + expect -re "$exp" > > + send "$snd\n" > > + } > > +} > > + > > if {[info exists env(LOG_MSG)]} { > > expect { > > -notransfer -re "$env(PASSED)" { > > diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > > index 60f5cc49fc..409a601c34 100755 > > --- a/automation/scripts/qemu-alpine-x86_64.sh > > +++ b/automation/scripts/qemu-alpine-x86_64.sh > > @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg > > > > " > etc/local.d/xen.start > > chmod +x etc/local.d/xen.start > > + > > +# Script to test save and restore. > > +# It saves and restores domU domain twice to check if the domain was corrupted > > +# during the first sequence. > > +# At the end open the console to check if the domain is working. > > +cat > root/save_restore_test << "EOF" > > +#!/bin/sh > > +set -ex > > +xl list | grep -q domU > > +rm -f save.dat > > +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > > +xl restore /root/domU.cfg save.dat > > +xl list | grep -q domU > > +rm -f save.dat > > +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > > +xl restore /root/domU.cfg save.dat > > +xl list | grep -q domU > > +rm -f save.dat > > +xl console "$(xl list | awk '$1=="domU" { print $2 }')" > > +EOF > > +chmod +x root/save_restore_test > > + > > find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz > > cd ../.. > > > > @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ > > -device virtio-net-pci,netdev=n0 \ > > -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" > > > > +# Sequence of expect/send strings: > > +# 1. wait domain start and close console; > > +# 2. wait login prompt and login as root > > +# 3. wait login and launch save/restore test; > > +# 4. wait restore from domain console and send a command. > > Why doing this interactively over serial, instead of adding to > etc/local.d/xen.start and then printing test result at the end? > I'm using expect to interact with the console. expect is not available inside the alpine root filesystem. Some failure I had during migration is that the VM crashed. In the script I interact with the console to check that the VM is still able to run commands. > > +gs=$'\x1d' > > +export EXPECT_TEXTS="BusyBox > > +$gs $gs > > +login: > > +root > > +login on > > +/root/save_restore_test > > +Restarting tasks > > +dmesg | grep suspending | tr o 0" > > + > > export TEST_LOG="smoke.serial" > > export BOOT_MSG="Latest ChangeSet: " > > -export LOG_MSG="Domain-0" > > -export PASSED="BusyBox" > > +export PASSED="suspending xenst0re" > > > > ./automation/scripts/console.exp |& sed 's/\r\+$//' > > -- > > 2.43.0 > > > > -- > Best Regards, > Marek Marczykowski-Górecki > Invisible Things Lab ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 18:48 ` Frediano Ziglio @ 2026-08-04 18:55 ` Andrew Cooper 2026-08-04 19:17 ` Marek Marczykowski-Górecki 0 siblings, 1 reply; 11+ messages in thread From: Andrew Cooper @ 2026-08-04 18:55 UTC (permalink / raw) To: Frediano Ziglio, Marek Marczykowski-Górecki Cc: Andrew Cooper, xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich On 04/08/2026 7:48 pm, Frediano Ziglio wrote: > On Tue, 4 Aug 2026 at 18:57, Marek Marczykowski-Górecki > <marmarek@invisiblethingslab.com> wrote: >> On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote: >>> Make sure that save/restore continue to work. >>> The check save and restore twice to check for corrupted status. >>> Also a command is launched in the guest to make sure that the >>> machine is not crashed but working. >>> >>> Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> >>> --- >>> automation/scripts/console.exp | 8 +++++ >>> automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- >>> 2 files changed, 46 insertions(+), 2 deletions(-) >>> >>> diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp >>> index e27886bbef..ff58ed29b8 100755 >>> --- a/automation/scripts/console.exp >>> +++ b/automation/scripts/console.exp >>> @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { >>> system "$env(WAKEUP_CMD)" >>> } >>> >>> +if {[info exists env(EXPECT_TEXTS)]} { >>> + set lines [split "$env(EXPECT_TEXTS)" "\n"] >>> + foreach {exp snd} $lines { >>> + expect -re "$exp" >>> + send "$snd\n" >>> + } >>> +} >>> + >>> if {[info exists env(LOG_MSG)]} { >>> expect { >>> -notransfer -re "$env(PASSED)" { >>> diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh >>> index 60f5cc49fc..409a601c34 100755 >>> --- a/automation/scripts/qemu-alpine-x86_64.sh >>> +++ b/automation/scripts/qemu-alpine-x86_64.sh >>> @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg >>> >>> " > etc/local.d/xen.start >>> chmod +x etc/local.d/xen.start >>> + >>> +# Script to test save and restore. >>> +# It saves and restores domU domain twice to check if the domain was corrupted >>> +# during the first sequence. >>> +# At the end open the console to check if the domain is working. >>> +cat > root/save_restore_test << "EOF" >>> +#!/bin/sh >>> +set -ex >>> +xl list | grep -q domU >>> +rm -f save.dat >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg >>> +xl restore /root/domU.cfg save.dat >>> +xl list | grep -q domU >>> +rm -f save.dat >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg >>> +xl restore /root/domU.cfg save.dat >>> +xl list | grep -q domU >>> +rm -f save.dat >>> +xl console "$(xl list | awk '$1=="domU" { print $2 }')" >>> +EOF >>> +chmod +x root/save_restore_test >>> + >>> find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz >>> cd ../.. >>> >>> @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ >>> -device virtio-net-pci,netdev=n0 \ >>> -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" >>> >>> +# Sequence of expect/send strings: >>> +# 1. wait domain start and close console; >>> +# 2. wait login prompt and login as root >>> +# 3. wait login and launch save/restore test; >>> +# 4. wait restore from domain console and send a command. >> Why doing this interactively over serial, instead of adding to >> etc/local.d/xen.start and then printing test result at the end? >> > I'm using expect to interact with the console. expect is not available > inside the alpine root filesystem. > Some failure I had during migration is that the VM crashed. In the > script I interact with the console to check that the VM is still able > to run commands. We can add `expect` to the dom0 root filesystem if we find a need for it, and it looks like this might be a good enough reason. You want a patch to https://gitlab.com/xen-project/hardware/test-artifacts images/alpine/*-x86_64-base.dockerfile to get it included. But, for migration testing, this really wants to run on the real hardware. Besides the main memory image, there's variations in register state and validity which will vary between hardware. ~Andrew ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 18:55 ` Andrew Cooper @ 2026-08-04 19:17 ` Marek Marczykowski-Górecki 2026-08-04 21:58 ` Frediano Ziglio 0 siblings, 1 reply; 11+ messages in thread From: Marek Marczykowski-Górecki @ 2026-08-04 19:17 UTC (permalink / raw) To: Andrew Cooper Cc: Frediano Ziglio, xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich [-- Attachment #1: Type: text/plain, Size: 4552 bytes --] On Tue, Aug 04, 2026 at 07:55:24PM +0100, Andrew Cooper wrote: > On 04/08/2026 7:48 pm, Frediano Ziglio wrote: > > On Tue, 4 Aug 2026 at 18:57, Marek Marczykowski-Górecki > > <marmarek@invisiblethingslab.com> wrote: > >> On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote: > >>> Make sure that save/restore continue to work. > >>> The check save and restore twice to check for corrupted status. > >>> Also a command is launched in the guest to make sure that the > >>> machine is not crashed but working. > >>> > >>> Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> > >>> --- > >>> automation/scripts/console.exp | 8 +++++ > >>> automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- > >>> 2 files changed, 46 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp > >>> index e27886bbef..ff58ed29b8 100755 > >>> --- a/automation/scripts/console.exp > >>> +++ b/automation/scripts/console.exp > >>> @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { > >>> system "$env(WAKEUP_CMD)" > >>> } > >>> > >>> +if {[info exists env(EXPECT_TEXTS)]} { > >>> + set lines [split "$env(EXPECT_TEXTS)" "\n"] > >>> + foreach {exp snd} $lines { > >>> + expect -re "$exp" > >>> + send "$snd\n" > >>> + } > >>> +} > >>> + > >>> if {[info exists env(LOG_MSG)]} { > >>> expect { > >>> -notransfer -re "$env(PASSED)" { > >>> diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > >>> index 60f5cc49fc..409a601c34 100755 > >>> --- a/automation/scripts/qemu-alpine-x86_64.sh > >>> +++ b/automation/scripts/qemu-alpine-x86_64.sh > >>> @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg > >>> > >>> " > etc/local.d/xen.start > >>> chmod +x etc/local.d/xen.start > >>> + > >>> +# Script to test save and restore. > >>> +# It saves and restores domU domain twice to check if the domain was corrupted > >>> +# during the first sequence. > >>> +# At the end open the console to check if the domain is working. > >>> +cat > root/save_restore_test << "EOF" > >>> +#!/bin/sh > >>> +set -ex > >>> +xl list | grep -q domU > >>> +rm -f save.dat > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > >>> +xl restore /root/domU.cfg save.dat > >>> +xl list | grep -q domU > >>> +rm -f save.dat > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > >>> +xl restore /root/domU.cfg save.dat > >>> +xl list | grep -q domU > >>> +rm -f save.dat > >>> +xl console "$(xl list | awk '$1=="domU" { print $2 }')" > >>> +EOF > >>> +chmod +x root/save_restore_test > >>> + > >>> find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz > >>> cd ../.. > >>> > >>> @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ > >>> -device virtio-net-pci,netdev=n0 \ > >>> -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" > >>> > >>> +# Sequence of expect/send strings: > >>> +# 1. wait domain start and close console; > >>> +# 2. wait login prompt and login as root > >>> +# 3. wait login and launch save/restore test; > >>> +# 4. wait restore from domain console and send a command. > >> Why doing this interactively over serial, instead of adding to > >> etc/local.d/xen.start and then printing test result at the end? > >> > > I'm using expect to interact with the console. expect is not available > > inside the alpine root filesystem. > > Some failure I had during migration is that the VM crashed. In the > > script I interact with the console to check that the VM is still able > > to run commands. > > We can add `expect` to the dom0 root filesystem if we find a need for > it, and it looks like this might be a good enough reason. You want a > patch to https://gitlab.com/xen-project/hardware/test-artifacts > images/alpine/*-x86_64-base.dockerfile to get it included. FWIW, my suspend test (which tests a similar thing) uses ping to check if domU is still alive: https://gitlab.com/xen-project/people/marmarek/xen/-/blob/2184be51d426b60f5e1a7e6e891d0f40e9488fc7/automation/scripts/qemu-alpine-domU-suspend-x86_64.sh > But, for migration testing, this really wants to run on the real > hardware. Besides the main memory image, there's variations in register > state and validity which will vary between hardware. -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 19:17 ` Marek Marczykowski-Górecki @ 2026-08-04 21:58 ` Frediano Ziglio 2026-08-04 22:43 ` Marek Marczykowski-Górecki 0 siblings, 1 reply; 11+ messages in thread From: Frediano Ziglio @ 2026-08-04 21:58 UTC (permalink / raw) To: Marek Marczykowski-Górecki Cc: Andrew Cooper, xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich On Tue, 4 Aug 2026 at 20:17, Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> wrote: > > On Tue, Aug 04, 2026 at 07:55:24PM +0100, Andrew Cooper wrote: > > On 04/08/2026 7:48 pm, Frediano Ziglio wrote: > > > On Tue, 4 Aug 2026 at 18:57, Marek Marczykowski-Górecki > > > <marmarek@invisiblethingslab.com> wrote: > > >> On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote: > > >>> Make sure that save/restore continue to work. > > >>> The check save and restore twice to check for corrupted status. > > >>> Also a command is launched in the guest to make sure that the > > >>> machine is not crashed but working. > > >>> > > >>> Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> > > >>> --- > > >>> automation/scripts/console.exp | 8 +++++ > > >>> automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- > > >>> 2 files changed, 46 insertions(+), 2 deletions(-) > > >>> > > >>> diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp > > >>> index e27886bbef..ff58ed29b8 100755 > > >>> --- a/automation/scripts/console.exp > > >>> +++ b/automation/scripts/console.exp > > >>> @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { > > >>> system "$env(WAKEUP_CMD)" > > >>> } > > >>> > > >>> +if {[info exists env(EXPECT_TEXTS)]} { > > >>> + set lines [split "$env(EXPECT_TEXTS)" "\n"] > > >>> + foreach {exp snd} $lines { > > >>> + expect -re "$exp" > > >>> + send "$snd\n" > > >>> + } > > >>> +} > > >>> + > > >>> if {[info exists env(LOG_MSG)]} { > > >>> expect { > > >>> -notransfer -re "$env(PASSED)" { > > >>> diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > > >>> index 60f5cc49fc..409a601c34 100755 > > >>> --- a/automation/scripts/qemu-alpine-x86_64.sh > > >>> +++ b/automation/scripts/qemu-alpine-x86_64.sh > > >>> @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg > > >>> > > >>> " > etc/local.d/xen.start > > >>> chmod +x etc/local.d/xen.start > > >>> + > > >>> +# Script to test save and restore. > > >>> +# It saves and restores domU domain twice to check if the domain was corrupted > > >>> +# during the first sequence. > > >>> +# At the end open the console to check if the domain is working. > > >>> +cat > root/save_restore_test << "EOF" > > >>> +#!/bin/sh > > >>> +set -ex > > >>> +xl list | grep -q domU > > >>> +rm -f save.dat > > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > > >>> +xl restore /root/domU.cfg save.dat > > >>> +xl list | grep -q domU > > >>> +rm -f save.dat > > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > > >>> +xl restore /root/domU.cfg save.dat > > >>> +xl list | grep -q domU > > >>> +rm -f save.dat > > >>> +xl console "$(xl list | awk '$1=="domU" { print $2 }')" > > >>> +EOF > > >>> +chmod +x root/save_restore_test > > >>> + > > >>> find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz > > >>> cd ../.. > > >>> > > >>> @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ > > >>> -device virtio-net-pci,netdev=n0 \ > > >>> -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" > > >>> > > >>> +# Sequence of expect/send strings: > > >>> +# 1. wait domain start and close console; > > >>> +# 2. wait login prompt and login as root > > >>> +# 3. wait login and launch save/restore test; > > >>> +# 4. wait restore from domain console and send a command. > > >> Why doing this interactively over serial, instead of adding to > > >> etc/local.d/xen.start and then printing test result at the end? > > >> > > > I'm using expect to interact with the console. expect is not available > > > inside the alpine root filesystem. > > > Some failure I had during migration is that the VM crashed. In the > > > script I interact with the console to check that the VM is still able > > > to run commands. > > > > We can add `expect` to the dom0 root filesystem if we find a need for > > it, and it looks like this might be a good enough reason. You want a > > patch to https://gitlab.com/xen-project/hardware/test-artifacts > > images/alpine/*-x86_64-base.dockerfile to get it included. > > FWIW, my suspend test (which tests a similar thing) uses ping to check > if domU is still alive: > https://gitlab.com/xen-project/people/marmarek/xen/-/blob/2184be51d426b60f5e1a7e6e891d0f40e9488fc7/automation/scripts/qemu-alpine-domU-suspend-x86_64.sh > Are you going to upstream the test? Why sleep between commands? Worrying about possible races? Probably there should be no race after the command exited so I personally would remove. Using the network seems like a good idea. I also discovered that there is nc and bash installed so something like # nc -lk -p 8888 -e sh -c "echo Still alive" and # bash -c 'read -t 1 line < /dev/tcp/localhost/8888; echo $line' Still alive would even test if userspace is still working correctly > > > But, for migration testing, this really wants to run on the real > > hardware. Besides the main memory image, there's variations in register > > state and validity which will vary between hardware. > Which scripts/jobs are run on real hardware (well, I suppose all that starts with zen, kbl, xilink or adl). Are they all run for every build? -- Frediano ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 2026-08-04 21:58 ` Frediano Ziglio @ 2026-08-04 22:43 ` Marek Marczykowski-Górecki 0 siblings, 0 replies; 11+ messages in thread From: Marek Marczykowski-Górecki @ 2026-08-04 22:43 UTC (permalink / raw) To: Frediano Ziglio Cc: Andrew Cooper, xen-devel, Frediano Ziglio, Doug Goldstein, Stefano Stabellini, Jan Beulich [-- Attachment #1: Type: text/plain, Size: 6404 bytes --] On Tue, Aug 04, 2026 at 10:58:47PM +0100, Frediano Ziglio wrote: > On Tue, 4 Aug 2026 at 20:17, Marek Marczykowski-Górecki > <marmarek@invisiblethingslab.com> wrote: > > > > On Tue, Aug 04, 2026 at 07:55:24PM +0100, Andrew Cooper wrote: > > > On 04/08/2026 7:48 pm, Frediano Ziglio wrote: > > > > On Tue, 4 Aug 2026 at 18:57, Marek Marczykowski-Górecki > > > > <marmarek@invisiblethingslab.com> wrote: > > > >> On Tue, Aug 04, 2026 at 06:42:18PM +0100, Frediano Ziglio wrote: > > > >>> Make sure that save/restore continue to work. > > > >>> The check save and restore twice to check for corrupted status. > > > >>> Also a command is launched in the guest to make sure that the > > > >>> machine is not crashed but working. > > > >>> > > > >>> Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com> > > > >>> --- > > > >>> automation/scripts/console.exp | 8 +++++ > > > >>> automation/scripts/qemu-alpine-x86_64.sh | 40 ++++++++++++++++++++++-- > > > >>> 2 files changed, 46 insertions(+), 2 deletions(-) > > > >>> > > > >>> diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp > > > >>> index e27886bbef..ff58ed29b8 100755 > > > >>> --- a/automation/scripts/console.exp > > > >>> +++ b/automation/scripts/console.exp > > > >>> @@ -58,6 +58,14 @@ if {[info exists env(WAKEUP_CMD)]} { > > > >>> system "$env(WAKEUP_CMD)" > > > >>> } > > > >>> > > > >>> +if {[info exists env(EXPECT_TEXTS)]} { > > > >>> + set lines [split "$env(EXPECT_TEXTS)" "\n"] > > > >>> + foreach {exp snd} $lines { > > > >>> + expect -re "$exp" > > > >>> + send "$snd\n" > > > >>> + } > > > >>> +} > > > >>> + > > > >>> if {[info exists env(LOG_MSG)]} { > > > >>> expect { > > > >>> -notransfer -re "$env(PASSED)" { > > > >>> diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh > > > >>> index 60f5cc49fc..409a601c34 100755 > > > >>> --- a/automation/scripts/qemu-alpine-x86_64.sh > > > >>> +++ b/automation/scripts/qemu-alpine-x86_64.sh > > > >>> @@ -48,6 +48,28 @@ xl -vvv create -c /root/domU.cfg > > > >>> > > > >>> " > etc/local.d/xen.start > > > >>> chmod +x etc/local.d/xen.start > > > >>> + > > > >>> +# Script to test save and restore. > > > >>> +# It saves and restores domU domain twice to check if the domain was corrupted > > > >>> +# during the first sequence. > > > >>> +# At the end open the console to check if the domain is working. > > > >>> +cat > root/save_restore_test << "EOF" > > > >>> +#!/bin/sh > > > >>> +set -ex > > > >>> +xl list | grep -q domU > > > >>> +rm -f save.dat > > > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > > > >>> +xl restore /root/domU.cfg save.dat > > > >>> +xl list | grep -q domU > > > >>> +rm -f save.dat > > > >>> +xl save "$(xl list | awk '$1=="domU" { print $2 }')" save.dat /root/domU.cfg > > > >>> +xl restore /root/domU.cfg save.dat > > > >>> +xl list | grep -q domU > > > >>> +rm -f save.dat > > > >>> +xl console "$(xl list | awk '$1=="domU" { print $2 }')" > > > >>> +EOF > > > >>> +chmod +x root/save_restore_test > > > >>> + > > > >>> find . | cpio -R 0:0 -H newc -o | gzip >> ../dom0-rootfs.cpio.gz > > > >>> cd ../.. > > > >>> > > > >>> @@ -70,9 +92,23 @@ export TEST_CMD="qemu-system-x86_64 \ > > > >>> -device virtio-net-pci,netdev=n0 \ > > > >>> -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" > > > >>> > > > >>> +# Sequence of expect/send strings: > > > >>> +# 1. wait domain start and close console; > > > >>> +# 2. wait login prompt and login as root > > > >>> +# 3. wait login and launch save/restore test; > > > >>> +# 4. wait restore from domain console and send a command. > > > >> Why doing this interactively over serial, instead of adding to > > > >> etc/local.d/xen.start and then printing test result at the end? > > > >> > > > > I'm using expect to interact with the console. expect is not available > > > > inside the alpine root filesystem. > > > > Some failure I had during migration is that the VM crashed. In the > > > > script I interact with the console to check that the VM is still able > > > > to run commands. > > > > > > We can add `expect` to the dom0 root filesystem if we find a need for > > > it, and it looks like this might be a good enough reason. You want a > > > patch to https://gitlab.com/xen-project/hardware/test-artifacts > > > images/alpine/*-x86_64-base.dockerfile to get it included. > > > > FWIW, my suspend test (which tests a similar thing) uses ping to check > > if domU is still alive: > > https://gitlab.com/xen-project/people/marmarek/xen/-/blob/2184be51d426b60f5e1a7e6e891d0f40e9488fc7/automation/scripts/qemu-alpine-domU-suspend-x86_64.sh > > > > Are you going to upstream the test? Yes, this branch (including a few more tests) waits for the other series to test-artifacts (already acked) to be pushed. Otherwise, it needs a hack with switching to alternative repos to work... I guess I can post it anyway, just with a disclaimer about pushing order... > Why sleep between commands? Worrying about possible races? Probably > there should be no race after the command exited so I personally would > remove. To cover also cases where crash happens only a moment later, not in the very second it's resumed. I had also a case where only one vcpu crashed, but otherwise domU appeared functional (this I solved with oops=panic on kernel cmdline, added in an earlier commit). > Using the network seems like a good idea. I also discovered that there > is nc and bash installed so something like > > # nc -lk -p 8888 -e sh -c "echo Still alive" > > and > > # bash -c 'read -t 1 line < /dev/tcp/localhost/8888; echo $line' > Still alive > > would even test if userspace is still working correctly Looks like a good idea. > > > But, for migration testing, this really wants to run on the real > > > hardware. Besides the main memory image, there's variations in register > > > state and validity which will vary between hardware. > > > > Which scripts/jobs are run on real hardware (well, I suppose all that > starts with zen, kbl, xilink or adl). Are they all run for every > build? Yes. -- Best Regards, Marek Marczykowski-Górecki Invisible Things Lab [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-08-04 22:44 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-04 17:42 [PATCH 0/2] CI: Check save/restore, minor style update Frediano Ziglio 2026-08-04 17:42 ` [PATCH 1/2] CI: Simplify directories creation Frediano Ziglio 2026-08-04 19:29 ` Anthony PERARD 2026-08-04 21:40 ` Frediano Ziglio 2026-08-04 17:42 ` [PATCH 2/2] CI: Check save/restore of PV domain as part of qemu-alpine-x86_64 Frediano Ziglio 2026-08-04 17:57 ` Marek Marczykowski-Górecki 2026-08-04 18:48 ` Frediano Ziglio 2026-08-04 18:55 ` Andrew Cooper 2026-08-04 19:17 ` Marek Marczykowski-Górecki 2026-08-04 21:58 ` Frediano Ziglio 2026-08-04 22:43 ` Marek Marczykowski-Górecki
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.