summaryrefslogtreecommitdiffstats
path: root/test/TEST-18-UEFI
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 13:54:25 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 13:54:25 +0000
commit9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a (patch)
tree2efb72864cc69e174c9c5ee33efb88a5f1553b48 /test/TEST-18-UEFI
parentInitial commit. (diff)
downloaddracut-9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a.tar.xz
dracut-9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a.zip
Adding upstream version 060+5.upstream/060+5
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'test/TEST-18-UEFI')
-rw-r--r--test/TEST-18-UEFI/Makefile1
-rwxr-xr-xtest/TEST-18-UEFI/test-init.sh23
-rwxr-xr-xtest/TEST-18-UEFI/test.sh92
3 files changed, 116 insertions, 0 deletions
diff --git a/test/TEST-18-UEFI/Makefile b/test/TEST-18-UEFI/Makefile
new file mode 100644
index 0000000..2dcab81
--- /dev/null
+++ b/test/TEST-18-UEFI/Makefile
@@ -0,0 +1 @@
+-include ../Makefile.testdir
diff --git a/test/TEST-18-UEFI/test-init.sh b/test/TEST-18-UEFI/test-init.sh
new file mode 100755
index 0000000..03966d2
--- /dev/null
+++ b/test/TEST-18-UEFI/test-init.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin
+
+[ -e /proc/self/mounts ] \
+ || (mkdir -p /proc && mount -t proc -o nosuid,noexec,nodev proc /proc)
+
+grep -q '^sysfs /sys sysfs' /proc/self/mounts \
+ || (mkdir -p /sys && mount -t sysfs -o nosuid,noexec,nodev sysfs /sys)
+
+grep -q '^devtmpfs /dev devtmpfs' /proc/self/mounts \
+ || (mkdir -p /dev && mount -t devtmpfs -o mode=755,noexec,nosuid,strictatime devtmpfs /dev)
+
+grep -q '^tmpfs /run tmpfs' /proc/self/mounts \
+ || (mkdir -p /run && mount -t tmpfs -o mode=755,noexec,nosuid,strictatime tmpfs /run)
+
+: > /dev/watchdog
+
+exec > /dev/console 2>&1
+
+echo "made it to the rootfs! Powering down."
+echo "dracut-root-block-success" | dd oflag=direct,dsync of=/dev/sdb
+poweroff -f
diff --git a/test/TEST-18-UEFI/test.sh b/test/TEST-18-UEFI/test.sh
new file mode 100755
index 0000000..4191fed
--- /dev/null
+++ b/test/TEST-18-UEFI/test.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+
+# shellcheck disable=SC2034
+TEST_DESCRIPTION="UEFI boot"
+
+# Linux kernel requirements
+# CONFIG_BLK_DEV_INITRD for initramfs
+# CONFIG_EFI_HANDOVER_PROTOCOL for ovmf (Open Virtual Machine Firmware)
+# CONFIG_SATA_AHCI for ahci.ko
+# CONFIG_BLK_DEV_SD for sd_mod.ko
+# CONFIG_SQUASHFS_ZLIB for squashfs.ko
+
+ovmf_code() {
+ for path in \
+ "/usr/share/OVMF/OVMF_CODE.fd" \
+ "/usr/share/edk2/x64/OVMF_CODE.fd" \
+ "/usr/share/edk2-ovmf/OVMF_CODE.fd" \
+ "/usr/share/qemu/ovmf-x86_64-4m.bin"; do
+ [[ -s $path ]] && echo -n "$path" && return
+ done
+}
+
+test_check() {
+ [[ -n "$(ovmf_code)" ]]
+}
+
+KVERSION="${KVERSION-$(uname -r)}"
+
+test_marker_reset() {
+ dd if=/dev/zero of="$TESTDIR"/marker.img bs=1MiB count=1
+}
+
+test_marker_check() {
+ grep -U --binary-files=binary -F -m 1 -q dracut-root-block-success -- "$TESTDIR"/marker.img
+ return $?
+}
+
+test_dracut() {
+ TEST_DRACUT_ARGS+=" --local --no-hostonly --no-early-microcode --add test --kver $KVERSION"
+
+ # shellcheck disable=SC2162
+ IFS=' ' read -a TEST_DRACUT_ARGS_ARRAY <<< "$TEST_DRACUT_ARGS"
+
+ "$DRACUT" "$@" \
+ --kernel-cmdline "panic=1 oops=panic softlockup_panic=1 systemd.crash_reboot selinux=0 console=ttyS0,115200n81 $DEBUGFAIL" \
+ "${TEST_DRACUT_ARGS_ARRAY[@]}" || return 1
+}
+
+test_run() {
+ declare -a disk_args=()
+ declare -i disk_index=1
+ qemu_add_drive_args disk_index disk_args "$TESTDIR"/marker.img marker
+ qemu_add_drive_args disk_index disk_args "$TESTDIR"/squashfs.img root
+
+ test_marker_reset
+ "$testdir"/run-qemu "${disk_args[@]}" -net none \
+ -drive file=fat:rw:"$TESTDIR"/ESP,format=vvfat,label=EFI \
+ -global driver=cfi.pflash01,property=secure,value=on \
+ -drive if=pflash,format=raw,unit=0,file="$(ovmf_code)",readonly=on
+ test_marker_check || return 1
+}
+
+test_setup() {
+ # Create what will eventually be our root filesystem
+ "$DRACUT" --local --no-hostonly --no-early-microcode --nofscks \
+ --tmpdir "$TESTDIR" --keep --modules "test-root" --include ./test-init.sh /sbin/init \
+ "$TESTDIR"/tmp-initramfs.root "$KVERSION" || return 1
+
+ mkdir -p "$TESTDIR"/dracut.*/initramfs/proc
+ mksquashfs "$TESTDIR"/dracut.*/initramfs/ "$TESTDIR"/squashfs.img -quiet -no-progress
+
+ mkdir -p "$TESTDIR"/ESP/EFI/BOOT
+
+ if [ -f "/usr/lib/gummiboot/linuxx64.efi.stub" ]; then
+ TEST_DRACUT_ARGS+=" --uefi-stub /usr/lib/gummiboot/linuxx64.efi.stub "
+ fi
+
+ mkdir -p "$TESTDIR"/ESP/EFI/BOOT
+ test_dracut \
+ --modules 'rootfs-block test' \
+ --kernel-cmdline 'root=/dev/sdc ro rd.skipfsck rootfstype=squashfs' \
+ --drivers 'ahci sd_mod squashfs' \
+ --uefi \
+ "$TESTDIR"/ESP/EFI/BOOT/BOOTX64.efi
+}
+
+test_cleanup() {
+ return 0
+}
+
+# shellcheck disable=SC1090
+. "$testdir"/test-functions