This is in preparation for adding a FIT boot pytest. We intentionally don't use scripts/make_fit.py as its compression is broken and we want to sign the FIT image, so we can test that in future too.
Signed-off-by: Ahmad Fatoum <a.fat...@barebox.org> --- .github/testfs/multi_v7_defconfig-gzipped.its | 57 +++++++++++++++++++ .github/testfs/multi_v8_defconfig-gzipped.its | 57 +++++++++++++++++++ .github/workflows/test-labgrid-pytest.yml | 20 ++++++- scripts/generate_testfs.sh | 26 +++++++++ 4 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 .github/testfs/multi_v7_defconfig-gzipped.its create mode 100644 .github/testfs/multi_v8_defconfig-gzipped.its create mode 100755 scripts/generate_testfs.sh diff --git a/.github/testfs/multi_v7_defconfig-gzipped.its b/.github/testfs/multi_v7_defconfig-gzipped.its new file mode 100644 index 000000000000..11595c39baa1 --- /dev/null +++ b/.github/testfs/multi_v7_defconfig-gzipped.its @@ -0,0 +1,57 @@ +/dts-v1/; + +/ { + description = "fitImage for testing"; + #address-cells = <1>; + images { + kernel-1 { + description = "barebox image"; + data = /incbin/("barebox-dt-2nd.img.gz"); + type = "kernel"; + arch = "arm"; + os = "linux"; + compression = "gzip"; + hash-1 { + algo = "sha256"; + }; + }; + fdt-qemu-virt32.dtb { + description = "Flattened Device Tree blob"; + data = /incbin/("arch/arm/dts/qemu-virt32.dtb"); + type = "flat_dt"; + arch = "arm"; + compression = "none"; + hash-1 { + algo = "sha256"; + }; + }; + ramdisk-1 { + description = "initramfs"; + data = /incbin/("ramdisk.cpio.gz"); + type = "ramdisk"; + arch = "arm"; + os = "linux"; + compression = "none"; + hash-1 { + algo = "sha256"; + }; + }; + }; + + configurations { + default = "conf-qemu-virt32.dtb"; + conf-qemu-virt32.dtb { + description = "Qemu Virt32"; + kernel = "kernel-1"; + fdt = "fdt-qemu-virt32.dtb"; + ramdisk = "ramdisk-1"; + compatible = "linux,dummy-virt"; + signature-1 { + algo = "sha256,rsa2048"; + sign-images = "kernel", "fdt", "ramdisk"; + signer-name = "None"; + signer-version = "None"; + }; + }; + }; +}; diff --git a/.github/testfs/multi_v8_defconfig-gzipped.its b/.github/testfs/multi_v8_defconfig-gzipped.its new file mode 100644 index 000000000000..5ce678eec9a8 --- /dev/null +++ b/.github/testfs/multi_v8_defconfig-gzipped.its @@ -0,0 +1,57 @@ +/dts-v1/; + +/ { + description = "fitImage for testing"; + #address-cells = <1>; + images { + kernel-1 { + description = "barebox image"; + data = /incbin/("barebox-dt-2nd.img.gz"); + type = "kernel"; + arch = "arm64"; + os = "linux"; + compression = "gzip"; + hash-1 { + algo = "sha256"; + }; + }; + fdt-qemu-virt64.dtb { + description = "Flattened Device Tree blob"; + data = /incbin/("arch/arm/dts/qemu-virt64.dtb"); + type = "flat_dt"; + arch = "arm64"; + compression = "none"; + hash-1 { + algo = "sha256"; + }; + }; + ramdisk-1 { + description = "initramfs"; + data = /incbin/("ramdisk.cpio.gz"); + type = "ramdisk"; + arch = "arm64"; + os = "linux"; + compression = "none"; + hash-1 { + algo = "sha256"; + }; + }; + }; + + configurations { + default = "conf-qemu-virt64.dtb"; + conf-qemu-virt64.dtb { + description = "Qemu Virt64"; + kernel = "kernel-1"; + fdt = "fdt-qemu-virt64.dtb"; + ramdisk = "ramdisk-1"; + compatible = "linux,dummy-virt"; + signature-1 { + algo = "sha256,rsa2048"; + sign-images = "kernel", "fdt", "ramdisk"; + signer-name = "None"; + signer-version = "None"; + }; + }; + }; +}; diff --git a/.github/workflows/test-labgrid-pytest.yml b/.github/workflows/test-labgrid-pytest.yml index d4043de961b2..64618582a940 100644 --- a/.github/workflows/test-labgrid-pytest.yml +++ b/.github/workflows/test-labgrid-pytest.yml @@ -80,6 +80,20 @@ jobs: if [ ${{matrix.arch}} = "riscv" ]; then cp /usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.bin ${KBUILD_OUTPUT}/ fi + + - name: Populate testfs + run: | + export KBUILD_OUTPUT=build-${{matrix.arch}}-${{matrix.defconfig}} + export KBUILD_DEFCONFIG=${{matrix.defconfig}} + + for i in ${{matrix.lgenv}}; do + grep -wq 'testfs' "$i" || continue + + # Just use already built dtc + export PATH="$PATH:${KBUILD_OUTPUT}/scripts/dtc/" + exec scripts/generate_testfs.sh + done + - name: labgrid-pytest run: | export KBUILD_OUTPUT=build-${{matrix.arch}}-${{matrix.defconfig}} @@ -87,10 +101,14 @@ jobs: for i in ${{matrix.lgenv}}; do grep -wq '\(QEMUDriver\|ExternalConsoleDriver\):' "$i" || continue + if grep -wq 'testfs' "$i"; then + extraargs="--fs testfs=${KBUILD_OUTPUT}/testfs" + fi + cfg=$(basename $i .yaml) echo "Testing $cfg" labgrid-pytest --lg-env $i test/py --verbosity=1 \ - --junitxml=$cfg.tests.xml --lg-log=log/$cfg + --junitxml=$cfg.tests.xml --lg-log=log/$cfg $extraargs done - name: Publish Test Results diff --git a/scripts/generate_testfs.sh b/scripts/generate_testfs.sh new file mode 100755 index 000000000000..c5d24f7e1af8 --- /dev/null +++ b/scripts/generate_testfs.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +MKIMAGE=${MKIMAGE:-mkimage} +KGZIP=${KGZIP:-gzip} + +set -e + +if [ -z "${KBUILD_OUTPUT}" ] || [ -z "${KBUILD_DEFCONFIG}" ] ; then + 2>&1 echo "KBUILD_OUTPUT and KBUILD_DEFCONFIG must be set" + exit 1 +fi + +rm -rf "${KBUILD_OUTPUT}/testfs/" +mkdir -p ${KBUILD_OUTPUT}/testfs + +cat ${KBUILD_OUTPUT}/images/barebox-dt-2nd.img | \ + ${KGZIP} -n -f -9 >${KBUILD_OUTPUT}/barebox-dt-2nd.img.gz + +cp .github/testfs/${KBUILD_DEFCONFIG}-gzipped.its ${KBUILD_OUTPUT}/ + +find COPYING LICENSES/ | cpio -o -H newc | ${KGZIP} \ + > ${KBUILD_OUTPUT}/ramdisk.cpio.gz + +${MKIMAGE} -G $PWD/test/self/development_rsa2048.pem -r \ + -f ${KBUILD_OUTPUT}/${KBUILD_DEFCONFIG}-gzipped.its \ + ${KBUILD_OUTPUT}/testfs/barebox-gzipped.fit -- 2.39.5