diff mbox series

[1/2] automation: Add support for using XTF for arm64 testing

Message ID 20221215152538.10266-2-michal.orzel@amd.com (mailing list archive)
State Superseded
Headers show
Series XTF on arm64 support in CI | expand

Commit Message

Michal Orzel Dec. 15, 2022, 3:25 p.m. UTC
Introduce support for using XTF on Arm to perform low-level testing.
For the purpose of the CI testing, let's use the fork [1] from upstream
XTF with implemented support for arm64 (the upstream XTF only supports
x86).

Add a new script under automation/scripts to be used by the CI XTF test
jobs to perform the following tasks:
 - Compiling XTF,
 - Creating dom0 rootfs,
 - Generating u-boot script using ImageBuilder,
 - Running Xen with Linux as dom0 and XTF as a dom0less domU using Qemu,
 - Checking test result.

The script takes the name of the XTF test to run as a first parameter.

[1] https://gitlab.com/xen-project/fusa/xtf.git (branch xtf-arm)

Signed-off-by: Michal Orzel <michal.orzel@amd.com>
---
 automation/scripts/qemu-xtf-dom0less-arm64.sh | 97 +++++++++++++++++++
 1 file changed, 97 insertions(+)
 create mode 100755 automation/scripts/qemu-xtf-dom0less-arm64.sh

Comments

Stefano Stabellini Dec. 15, 2022, 9:05 p.m. UTC | #1
On Thu, 15 Dec 2022, Michal Orzel wrote:
> Introduce support for using XTF on Arm to perform low-level testing.
> For the purpose of the CI testing, let's use the fork [1] from upstream
> XTF with implemented support for arm64 (the upstream XTF only supports
> x86).
> 
> Add a new script under automation/scripts to be used by the CI XTF test
> jobs to perform the following tasks:
>  - Compiling XTF,
>  - Creating dom0 rootfs,
>  - Generating u-boot script using ImageBuilder,
>  - Running Xen with Linux as dom0 and XTF as a dom0less domU using Qemu,
>  - Checking test result.
> 
> The script takes the name of the XTF test to run as a first parameter.
> 
> [1] https://gitlab.com/xen-project/fusa/xtf.git (branch xtf-arm)
> 
> Signed-off-by: Michal Orzel <michal.orzel@amd.com>
> ---
>  automation/scripts/qemu-xtf-dom0less-arm64.sh | 97 +++++++++++++++++++
>  1 file changed, 97 insertions(+)
>  create mode 100755 automation/scripts/qemu-xtf-dom0less-arm64.sh
> 
> diff --git a/automation/scripts/qemu-xtf-dom0less-arm64.sh b/automation/scripts/qemu-xtf-dom0less-arm64.sh
> new file mode 100755
> index 000000000000..321d1abc543b
> --- /dev/null
> +++ b/automation/scripts/qemu-xtf-dom0less-arm64.sh
> @@ -0,0 +1,97 @@
> +#!/bin/bash
> +
> +set -ex
> +
> +# Name of the XTF test
> +xtf_test=$1
> +
> +# Message returned by XTF in case of success
> +passed="Test result: SUCCESS"
> +
> +# XXX QEMU looks for "efi-virtio.rom" even if it is unneeded
> +curl -fsSLO https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom
> +./binaries/qemu-system-aarch64 \
> +   -machine virtualization=true \
> +   -cpu cortex-a57 -machine type=virt \
> +   -m 2048 -smp 2 -display none \
> +   -machine dumpdtb=binaries/virt-gicv2.dtb
> +
> +# XXX disable pl061 to avoid Linux crash
> +fdtput binaries/virt-gicv2.dtb -p -t s /pl061@9030000 status disabled
> +
> +# XTF
> +# Build a single XTF test passed as a first parameter to the script.
> +# Build XTF with GICv2 support to match Qemu configuration and with SBSA UART
> +# support, so that the test will use an emulated UART for printing messages.
> +# This will allow us to run the test on both debug and non-debug Xen builds.
> +rm -rf xtf
> +git clone https://gitlab.com/xen-project/fusa/xtf.git -b xtf-arm
> +make -C xtf TESTS=tests/${xtf_test} CONFIG_SBSA_UART=y CONFIG_GICV2=y -j$(nproc)
> +cp xtf/tests/${xtf_test}/test-mmu64le-${xtf_test} binaries/xtf-test
> +
> +# DOM0 rootfs

Given that we don't actually need dom0 for anything, maybe we could only
run xtf as the only domU guest without dom0 (pure dom0less
configuration)?


> +mkdir -p rootfs
> +cd rootfs
> +tar xzf ../binaries/initrd.tar.gz
> +mkdir proc
> +mkdir run
> +mkdir srv
> +mkdir sys
> +rm var/run
> +cp -ar ../binaries/dist/install/* .
> +
> +echo "#!/bin/bash
> +
> +export LD_LIBRARY_PATH=/usr/local/lib
> +bash /etc/init.d/xencommons start
> +
> +/usr/local/lib/xen/bin/init-dom0less
> +" > etc/local.d/xen.start
> +
> +chmod +x etc/local.d/xen.start
> +echo "rc_verbose=yes" >> etc/rc.conf
> +find . | cpio -H newc -o | gzip > ../binaries/dom0-rootfs.cpio.gz
> +cd ..
> +
> +# ImageBuilder
> +echo 'MEMORY_START="0x40000000"
> +MEMORY_END="0xC0000000"
> +
> +XEN="xen"
> +DEVICE_TREE="virt-gicv2.dtb"
> +
> +DOM0_KERNEL="Image"
> +DOM0_RAMDISK="dom0-rootfs.cpio.gz"

So here we would skip DOM0_KERNEL and DOM0_RAMDISK


> +XEN_CMD="console=dtuart dom0_mem=512M"

we probably don't need dom0_mem=512M


> +DOMU_KERNEL[0]="xtf-test"
> +DOMU_MEM[0]="128"
> +
> +NUM_DOMUS=1

but we would keep this


> +LOAD_CMD="tftpb"
> +UBOOT_SOURCE="boot.source"
> +UBOOT_SCRIPT="boot.scr"' > binaries/config
> +
> +rm -rf imagebuilder
> +git clone https://gitlab.com/ViryaOS/imagebuilder
> +bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/config
> +
> +# 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 \
> +    -machine virtualization=true \
> +    -cpu cortex-a57 -machine type=virt \
> +    -m 2048 -monitor none -serial stdio \
> +    -smp 2 \
> +    -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
> +
> +set -e
> +(grep -q "^Welcome to Alpine Linux" smoke.serial && grep -q "${passed}" smoke.serial) || exit 1
> +exit 0
Michal Orzel Dec. 16, 2022, 9:31 a.m. UTC | #2
Hi Stefano,

On 15/12/2022 22:05, Stefano Stabellini wrote:
> 
> 
> On Thu, 15 Dec 2022, Michal Orzel wrote:
>> Introduce support for using XTF on Arm to perform low-level testing.
>> For the purpose of the CI testing, let's use the fork [1] from upstream
>> XTF with implemented support for arm64 (the upstream XTF only supports
>> x86).
>>
>> Add a new script under automation/scripts to be used by the CI XTF test
>> jobs to perform the following tasks:
>>  - Compiling XTF,
>>  - Creating dom0 rootfs,
>>  - Generating u-boot script using ImageBuilder,
>>  - Running Xen with Linux as dom0 and XTF as a dom0less domU using Qemu,
>>  - Checking test result.
>>
>> The script takes the name of the XTF test to run as a first parameter.
>>
>> [1] https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fxen-project%2Ffusa%2Fxtf.git&data=05%7C01%7Cmichal.orzel%40amd.com%7C92d389df450446d2916608dadee01c9d%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C638067351382726466%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=WSQJe1s9%2B67c%2FxvYu3OP9Hr1ZZXWSpjXNnCbIwbw2OU%3D&reserved=0 (branch xtf-arm)
>>
>> Signed-off-by: Michal Orzel <michal.orzel@amd.com>
>> ---
>>  automation/scripts/qemu-xtf-dom0less-arm64.sh | 97 +++++++++++++++++++
>>  1 file changed, 97 insertions(+)
>>  create mode 100755 automation/scripts/qemu-xtf-dom0less-arm64.sh
>>
>> diff --git a/automation/scripts/qemu-xtf-dom0less-arm64.sh b/automation/scripts/qemu-xtf-dom0less-arm64.sh
>> new file mode 100755
>> index 000000000000..321d1abc543b
>> --- /dev/null
>> +++ b/automation/scripts/qemu-xtf-dom0less-arm64.sh
>> @@ -0,0 +1,97 @@
>> +#!/bin/bash
>> +
>> +set -ex
>> +
>> +# Name of the XTF test
>> +xtf_test=$1
>> +
>> +# Message returned by XTF in case of success
>> +passed="Test result: SUCCESS"
>> +
>> +# XXX QEMU looks for "efi-virtio.rom" even if it is unneeded
>> +curl -fsSLO https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fqemu%2Fqemu%2Fraw%2Fv5.2.0%2Fpc-bios%2Fefi-virtio.rom&data=05%7C01%7Cmichal.orzel%40amd.com%7C92d389df450446d2916608dadee01c9d%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C638067351382726466%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=f9gY1ubTk0NssPcr38A5BUuFzdrIAm8rJXsuMNuGXYs%3D&reserved=0
>> +./binaries/qemu-system-aarch64 \
>> +   -machine virtualization=true \
>> +   -cpu cortex-a57 -machine type=virt \
>> +   -m 2048 -smp 2 -display none \
>> +   -machine dumpdtb=binaries/virt-gicv2.dtb
>> +
>> +# XXX disable pl061 to avoid Linux crash
>> +fdtput binaries/virt-gicv2.dtb -p -t s /pl061@9030000 status disabled
>> +
>> +# XTF
>> +# Build a single XTF test passed as a first parameter to the script.
>> +# Build XTF with GICv2 support to match Qemu configuration and with SBSA UART
>> +# support, so that the test will use an emulated UART for printing messages.
>> +# This will allow us to run the test on both debug and non-debug Xen builds.
>> +rm -rf xtf
>> +git clone https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fxen-project%2Ffusa%2Fxtf.git&data=05%7C01%7Cmichal.orzel%40amd.com%7C92d389df450446d2916608dadee01c9d%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C638067351382726466%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=WSQJe1s9%2B67c%2FxvYu3OP9Hr1ZZXWSpjXNnCbIwbw2OU%3D&reserved=0 -b xtf-arm
>> +make -C xtf TESTS=tests/${xtf_test} CONFIG_SBSA_UART=y CONFIG_GICV2=y -j$(nproc)
>> +cp xtf/tests/${xtf_test}/test-mmu64le-${xtf_test} binaries/xtf-test
>> +
>> +# DOM0 rootfs
> 
> Given that we don't actually need dom0 for anything, maybe we could only
> run xtf as the only domU guest without dom0 (pure dom0less
> configuration)?
This is what I thought at the beginning. It definitely makes sense because at the moment
we do not test pure dom0less configuration. I will do this in v2.

~Michal
diff mbox series

Patch

diff --git a/automation/scripts/qemu-xtf-dom0less-arm64.sh b/automation/scripts/qemu-xtf-dom0less-arm64.sh
new file mode 100755
index 000000000000..321d1abc543b
--- /dev/null
+++ b/automation/scripts/qemu-xtf-dom0less-arm64.sh
@@ -0,0 +1,97 @@ 
+#!/bin/bash
+
+set -ex
+
+# Name of the XTF test
+xtf_test=$1
+
+# Message returned by XTF in case of success
+passed="Test result: SUCCESS"
+
+# XXX QEMU looks for "efi-virtio.rom" even if it is unneeded
+curl -fsSLO https://github.com/qemu/qemu/raw/v5.2.0/pc-bios/efi-virtio.rom
+./binaries/qemu-system-aarch64 \
+   -machine virtualization=true \
+   -cpu cortex-a57 -machine type=virt \
+   -m 2048 -smp 2 -display none \
+   -machine dumpdtb=binaries/virt-gicv2.dtb
+
+# XXX disable pl061 to avoid Linux crash
+fdtput binaries/virt-gicv2.dtb -p -t s /pl061@9030000 status disabled
+
+# XTF
+# Build a single XTF test passed as a first parameter to the script.
+# Build XTF with GICv2 support to match Qemu configuration and with SBSA UART
+# support, so that the test will use an emulated UART for printing messages.
+# This will allow us to run the test on both debug and non-debug Xen builds.
+rm -rf xtf
+git clone https://gitlab.com/xen-project/fusa/xtf.git -b xtf-arm
+make -C xtf TESTS=tests/${xtf_test} CONFIG_SBSA_UART=y CONFIG_GICV2=y -j$(nproc)
+cp xtf/tests/${xtf_test}/test-mmu64le-${xtf_test} binaries/xtf-test
+
+# DOM0 rootfs
+mkdir -p rootfs
+cd rootfs
+tar xzf ../binaries/initrd.tar.gz
+mkdir proc
+mkdir run
+mkdir srv
+mkdir sys
+rm var/run
+cp -ar ../binaries/dist/install/* .
+
+echo "#!/bin/bash
+
+export LD_LIBRARY_PATH=/usr/local/lib
+bash /etc/init.d/xencommons start
+
+/usr/local/lib/xen/bin/init-dom0less
+" > etc/local.d/xen.start
+
+chmod +x etc/local.d/xen.start
+echo "rc_verbose=yes" >> etc/rc.conf
+find . | cpio -H newc -o | gzip > ../binaries/dom0-rootfs.cpio.gz
+cd ..
+
+# ImageBuilder
+echo 'MEMORY_START="0x40000000"
+MEMORY_END="0xC0000000"
+
+XEN="xen"
+DEVICE_TREE="virt-gicv2.dtb"
+
+DOM0_KERNEL="Image"
+DOM0_RAMDISK="dom0-rootfs.cpio.gz"
+XEN_CMD="console=dtuart dom0_mem=512M"
+
+DOMU_KERNEL[0]="xtf-test"
+DOMU_MEM[0]="128"
+
+NUM_DOMUS=1
+
+LOAD_CMD="tftpb"
+UBOOT_SOURCE="boot.source"
+UBOOT_SCRIPT="boot.scr"' > binaries/config
+
+rm -rf imagebuilder
+git clone https://gitlab.com/ViryaOS/imagebuilder
+bash imagebuilder/scripts/uboot-script-gen -t tftp -d binaries/ -c binaries/config
+
+# 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 \
+    -machine virtualization=true \
+    -cpu cortex-a57 -machine type=virt \
+    -m 2048 -monitor none -serial stdio \
+    -smp 2 \
+    -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
+
+set -e
+(grep -q "^Welcome to Alpine Linux" smoke.serial && grep -q "${passed}" smoke.serial) || exit 1
+exit 0