diff options
Diffstat (limited to '0014-automation-use-expect-to-run-QEMU.patch')
-rw-r--r-- | 0014-automation-use-expect-to-run-QEMU.patch | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/0014-automation-use-expect-to-run-QEMU.patch b/0014-automation-use-expect-to-run-QEMU.patch new file mode 100644 index 0000000..90e2c62 --- /dev/null +++ b/0014-automation-use-expect-to-run-QEMU.patch @@ -0,0 +1,362 @@ +From 0918434e0fbee48c9dccc5fe262de5a81e380c15 Mon Sep 17 00:00:00 2001 +From: Stefano Stabellini <stefano.stabellini@amd.com> +Date: Fri, 9 Aug 2024 23:59:20 -0700 +Subject: [PATCH 14/35] automation: use expect to run QEMU + +Use expect to invoke QEMU so that we can terminate the test as soon as +we get the right string in the output instead of waiting until the +final timeout. + +For timeout, instead of an hardcoding the value, use a Gitlab CI +variable "QEMU_TIMEOUT" that can be changed depending on the latest +status of the Gitlab CI runners. + +Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com> +Reviewed-by: Michal Orzel <michal.orzel@amd.com> +master commit: c36efb7fcea6ef9f31a20e60ec79ed3ae293feee +master date: 2024-08-09 23:59:20 -0700 +--- + automation/scripts/qemu-alpine-x86_64.sh | 16 +++---- + automation/scripts/qemu-key.exp | 45 +++++++++++++++++++ + automation/scripts/qemu-smoke-dom0-arm32.sh | 16 +++---- + automation/scripts/qemu-smoke-dom0-arm64.sh | 16 +++---- + .../scripts/qemu-smoke-dom0less-arm32.sh | 18 ++++---- + .../scripts/qemu-smoke-dom0less-arm64.sh | 16 +++---- + automation/scripts/qemu-smoke-ppc64le.sh | 13 +++--- + automation/scripts/qemu-smoke-riscv64.sh | 13 +++--- + automation/scripts/qemu-smoke-x86-64.sh | 15 ++++--- + automation/scripts/qemu-xtf-dom0less-arm64.sh | 15 +++---- + 10 files changed, 112 insertions(+), 71 deletions(-) + create mode 100755 automation/scripts/qemu-key.exp + +diff --git a/automation/scripts/qemu-alpine-x86_64.sh b/automation/scripts/qemu-alpine-x86_64.sh +index 8e398dcea3..5359e0820b 100755 +--- a/automation/scripts/qemu-alpine-x86_64.sh ++++ b/automation/scripts/qemu-alpine-x86_64.sh +@@ -77,18 +77,16 @@ EOF + # Run the test + rm -f smoke.serial + set +e +-timeout -k 1 720 \ +-qemu-system-x86_64 \ ++export QEMU_CMD="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 |& \ +- # Remove carriage returns from the stdout output, as gitlab +- # interface chokes on them +- tee smoke.serial | sed 's/\r//' ++ -netdev user,id=n0,tftp=binaries,bootfile=/pxelinux.0" + +-set -e +-(grep -q "Domain-0" smoke.serial && grep -q "BusyBox" smoke.serial) || exit 1 +-exit 0 ++export QEMU_LOG="smoke.serial" ++export LOG_MSG="Domain-0" ++export PASSED="BusyBox" ++ ++./automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-key.exp b/automation/scripts/qemu-key.exp +new file mode 100755 +index 0000000000..35eb903a31 +--- /dev/null ++++ b/automation/scripts/qemu-key.exp +@@ -0,0 +1,45 @@ ++#!/usr/bin/expect -f ++ ++set timeout $env(QEMU_TIMEOUT) ++ ++log_file -a $env(QEMU_LOG) ++ ++match_max 10000 ++ ++eval spawn $env(QEMU_CMD) ++ ++expect_after { ++ -re "(.*)\r" { ++ exp_continue ++ } ++ timeout {send_error "ERROR-Timeout!\n"; exit 1} ++ eof {send_error "ERROR-EOF!\n"; exit 1} ++} ++ ++if {[info exists env(UBOOT_CMD)]} { ++ expect "=>" ++ ++ send "$env(UBOOT_CMD)\r" ++} ++ ++if {[info exists env(LOG_MSG)]} { ++ expect { ++ "$env(PASSED)" { ++ expect "$env(LOG_MSG)" ++ exit 0 ++ } ++ "$env(LOG_MSG)" { ++ expect "$env(PASSED)" ++ exit 0 ++ } ++ } ++} ++ ++expect { ++ "$env(PASSED)" { ++ exit 0 ++ } ++} ++ ++expect eof ++ +diff --git a/automation/scripts/qemu-smoke-dom0-arm32.sh b/automation/scripts/qemu-smoke-dom0-arm32.sh +index 31c05cc840..bab66bfe44 100755 +--- a/automation/scripts/qemu-smoke-dom0-arm32.sh ++++ b/automation/scripts/qemu-smoke-dom0-arm32.sh +@@ -78,9 +78,7 @@ bash imagebuilder/scripts/uboot-script-gen -t tftp -d . -c config + + rm -f ${serial_log} + set +e +-echo " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \ +-timeout -k 1 720 \ +-./qemu-system-arm \ ++export QEMU_CMD="./qemu-system-arm \ + -machine virt \ + -machine virtualization=true \ + -smp 4 \ +@@ -91,9 +89,11 @@ timeout -k 1 720 \ + -no-reboot \ + -device virtio-net-pci,netdev=n0 \ + -netdev user,id=n0,tftp=./ \ +- -bios /usr/lib/u-boot/qemu_arm/u-boot.bin |& \ +- tee ${serial_log} | sed 's/\r//' ++ -bios /usr/lib/u-boot/qemu_arm/u-boot.bin" ++ ++export UBOOT_CMD="virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000" ++export QEMU_LOG="${serial_log}" ++export LOG_MSG="Domain-0" ++export PASSED="/ #" + +-set -e +-(grep -q "Domain-0" ${serial_log} && grep -q "^/ #" ${serial_log}) || exit 1 +-exit 0 ++../automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-smoke-dom0-arm64.sh b/automation/scripts/qemu-smoke-dom0-arm64.sh +index 352963a741..0094bfc8e1 100755 +--- a/automation/scripts/qemu-smoke-dom0-arm64.sh ++++ b/automation/scripts/qemu-smoke-dom0-arm64.sh +@@ -94,9 +94,7 @@ bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/conf + # Run the test + rm -f smoke.serial + set +e +-echo " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \ +-timeout -k 1 720 \ +-./binaries/qemu-system-aarch64 \ ++export QEMU_CMD="./binaries/qemu-system-aarch64 \ + -machine virtualization=true \ + -cpu cortex-a57 -machine type=virt \ + -m 2048 -monitor none -serial stdio \ +@@ -104,9 +102,11 @@ timeout -k 1 720 \ + -no-reboot \ + -device virtio-net-pci,netdev=n0 \ + -netdev user,id=n0,tftp=binaries \ +- -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin |& \ +- tee smoke.serial | sed 's/\r//' ++ -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin" ++ ++export UBOOT_CMD="virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000" ++export QEMU_LOG="smoke.serial" ++export LOG_MSG="Domain-0" ++export PASSED="BusyBox" + +-set -e +-(grep -q "Domain-0" smoke.serial && grep -q "BusyBox" smoke.serial) || exit 1 +-exit 0 ++./automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-smoke-dom0less-arm32.sh b/automation/scripts/qemu-smoke-dom0less-arm32.sh +index c027c8c5c8..68ffbabdb8 100755 +--- a/automation/scripts/qemu-smoke-dom0less-arm32.sh ++++ b/automation/scripts/qemu-smoke-dom0less-arm32.sh +@@ -5,7 +5,7 @@ set -ex + test_variant=$1 + + # Prompt to grep for to check if dom0 booted successfully +-dom0_prompt="^/ #" ++dom0_prompt="/ #" + + serial_log="$(pwd)/smoke.serial" + +@@ -131,9 +131,7 @@ bash imagebuilder/scripts/uboot-script-gen -t tftp -d . -c config + # Run the test + rm -f ${serial_log} + set +e +-echo " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \ +-timeout -k 1 240 \ +-./qemu-system-arm \ ++export QEMU_CMD="./qemu-system-arm \ + -machine virt \ + -machine virtualization=true \ + -smp 4 \ +@@ -144,9 +142,11 @@ timeout -k 1 240 \ + -no-reboot \ + -device virtio-net-pci,netdev=n0 \ + -netdev user,id=n0,tftp=./ \ +- -bios /usr/lib/u-boot/qemu_arm/u-boot.bin |& \ +- tee ${serial_log} | sed 's/\r//' ++ -bios /usr/lib/u-boot/qemu_arm/u-boot.bin" ++ ++export UBOOT_CMD="virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000" ++export QEMU_LOG="${serial_log}" ++export LOG_MSG="${dom0_prompt}" ++export PASSED="${passed}" + +-set -e +-(grep -q "${dom0_prompt}" ${serial_log} && grep -q "${passed}" ${serial_log}) || exit 1 +-exit 0 ++../automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-smoke-dom0less-arm64.sh b/automation/scripts/qemu-smoke-dom0less-arm64.sh +index 15258692d5..eb25c4af4b 100755 +--- a/automation/scripts/qemu-smoke-dom0less-arm64.sh ++++ b/automation/scripts/qemu-smoke-dom0less-arm64.sh +@@ -205,9 +205,7 @@ bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/conf + # Run the test + rm -f smoke.serial + set +e +-echo " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \ +-timeout -k 1 240 \ +-./binaries/qemu-system-aarch64 \ ++export QEMU_CMD="./binaries/qemu-system-aarch64 \ + -machine virtualization=true \ + -cpu cortex-a57 -machine type=virt,gic-version=$gic_version \ + -m 2048 -monitor none -serial stdio \ +@@ -215,9 +213,11 @@ timeout -k 1 240 \ + -no-reboot \ + -device virtio-net-pci,netdev=n0 \ + -netdev user,id=n0,tftp=binaries \ +- -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin |& \ +- tee smoke.serial | sed 's/\r//' ++ -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin" ++ ++export UBOOT_CMD="virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000" ++export QEMU_LOG="smoke.serial" ++export LOG_MSG="Welcome to Alpine Linux" ++export PASSED="${passed}" + +-set -e +-(grep -q "^Welcome to Alpine Linux" smoke.serial && grep -q "${passed}" smoke.serial) || exit 1 +-exit 0 ++./automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-smoke-ppc64le.sh b/automation/scripts/qemu-smoke-ppc64le.sh +index 9088881b73..ccb4a576f4 100755 +--- a/automation/scripts/qemu-smoke-ppc64le.sh ++++ b/automation/scripts/qemu-smoke-ppc64le.sh +@@ -11,8 +11,7 @@ machine=$1 + rm -f ${serial_log} + set +e + +-timeout -k 1 20 \ +-qemu-system-ppc64 \ ++export QEMU_CMD="qemu-system-ppc64 \ + -bios skiboot.lid \ + -M $machine \ + -m 2g \ +@@ -21,9 +20,9 @@ qemu-system-ppc64 \ + -monitor none \ + -nographic \ + -serial stdio \ +- -kernel binaries/xen \ +- |& tee ${serial_log} | sed 's/\r//' ++ -kernel binaries/xen" + +-set -e +-(grep -q "Hello, ppc64le!" ${serial_log}) || exit 1 +-exit 0 ++export QEMU_LOG="${serial_log}" ++export PASSED="Hello, ppc64le!" ++ ++./automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-smoke-riscv64.sh b/automation/scripts/qemu-smoke-riscv64.sh +index f90df3c051..0355c075b7 100755 +--- a/automation/scripts/qemu-smoke-riscv64.sh ++++ b/automation/scripts/qemu-smoke-riscv64.sh +@@ -6,15 +6,14 @@ set -ex + rm -f smoke.serial + set +e + +-timeout -k 1 2 \ +-qemu-system-riscv64 \ ++export QEMU_CMD="qemu-system-riscv64 \ + -M virt \ + -smp 1 \ + -nographic \ + -m 2g \ +- -kernel binaries/xen \ +- |& tee smoke.serial | sed 's/\r//' ++ -kernel binaries/xen" + +-set -e +-(grep -q "All set up" smoke.serial) || exit 1 +-exit 0 ++export QEMU_LOG="smoke.serial" ++export PASSED="All set up" ++ ++./automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-smoke-x86-64.sh b/automation/scripts/qemu-smoke-x86-64.sh +index 3014d07314..37ac10e068 100755 +--- a/automation/scripts/qemu-smoke-x86-64.sh ++++ b/automation/scripts/qemu-smoke-x86-64.sh +@@ -16,11 +16,12 @@ esac + + rm -f smoke.serial + set +e +-timeout -k 1 30 \ +-qemu-system-x86_64 -nographic -kernel binaries/xen \ ++export QEMU_CMD="qemu-system-x86_64 -nographic -kernel binaries/xen \ + -initrd xtf/tests/example/$k \ +- -append "loglvl=all console=com1 noreboot console_timestamps=boot $extra" \ +- -m 512 -monitor none -serial file:smoke.serial +-set -e +-grep -q 'Test result: SUCCESS' smoke.serial || exit 1 +-exit 0 ++ -append \"loglvl=all console=com1 noreboot console_timestamps=boot $extra\" \ ++ -m 512 -monitor none -serial stdio" ++ ++export QEMU_LOG="smoke.serial" ++export PASSED="Test result: SUCCESS" ++ ++./automation/scripts/qemu-key.exp +diff --git a/automation/scripts/qemu-xtf-dom0less-arm64.sh b/automation/scripts/qemu-xtf-dom0less-arm64.sh +index b08c2d44fb..0666f6363e 100755 +--- a/automation/scripts/qemu-xtf-dom0less-arm64.sh ++++ b/automation/scripts/qemu-xtf-dom0less-arm64.sh +@@ -51,9 +51,7 @@ bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/conf + # Run the test + rm -f smoke.serial + set +e +-echo " virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000"| \ +-timeout -k 1 120 \ +-./binaries/qemu-system-aarch64 \ ++export QEMU_CMD="./binaries/qemu-system-aarch64 \ + -machine virtualization=true \ + -cpu cortex-a57 -machine type=virt \ + -m 2048 -monitor none -serial stdio \ +@@ -61,9 +59,10 @@ timeout -k 1 120 \ + -no-reboot \ + -device virtio-net-pci,netdev=n0 \ + -netdev user,id=n0,tftp=binaries \ +- -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin |& \ +- tee smoke.serial | sed 's/\r//' ++ -bios /usr/lib/u-boot/qemu_arm64/u-boot.bin" ++ ++export UBOOT_CMD="virtio scan; dhcp; tftpb 0x40000000 boot.scr; source 0x40000000" ++export QEMU_LOG="smoke.serial" ++export PASSED="${passed}" + +-set -e +-(grep -q "${passed}" smoke.serial) || exit 1 +-exit 0 ++./automation/scripts/qemu-key.exp +-- +2.46.1 + |