kumquat-buildroot/support/testing/tests/boot/test_grub.py
Thomas Petazzoni 7dcd979098 support/testing/tests/boot: new test cases for Grub
This commit adds four test cases for Grub:

 - Grub i386 legacy BIOS
 - Grub i386 UEFI
 - Grub x86-64 UEFI
 - Grub AArch64 UEFI

There is some overlap with the ISO9660 filesystem test cases, some of
which use Grub, but we found it relevant to have separate test cases
for Grub, which were useful to test Grub in non-ISO9660 situations.

The Grub ARM UEFI case is not tested, as it requires Grub to be
chain-loaded by U-Boot. Implementing this test case is left as an
exercise for the reader.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[yann.morin.1998@free.fr:
  - use EDK2 to build the OVMF blurbs from source, instead of the
    binary blobs
  - add host-dosfstools
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2022-07-23 19:04:41 +02:00

157 lines
5.6 KiB
Python

import os
import infra.basetest
class TestGrubi386BIOS(infra.basetest.BRTest):
config = \
"""
BR2_x86_core2=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_CORE2_UCLIBC_STABLE=y
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh {}"
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pc/genimage-bios.cfg"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_I386_PC=y
BR2_TARGET_GRUB2_INSTALL_TOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
""".format(infra.filepath("tests/boot/test_grub/post-build.sh"))
def test_run(self):
hda = os.path.join(self.builddir, "images", "disk.img")
self.emulator.boot(arch="i386", options=["-hda", hda])
self.emulator.login()
class TestGrubi386EFI(infra.basetest.BRTest):
config = \
"""
BR2_x86_core2=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_CORE2_UCLIBC_STABLE=y
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh {}"
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_PACKAGE_EFIVAR=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_EDK2=y
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_I386_EFI=y
BR2_TARGET_GRUB2_INSTALL_TOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
""".format(infra.filepath("tests/boot/test_grub/post-build.sh"))
def test_run(self):
hda = os.path.join(self.builddir, "images", "disk.img")
bios = os.path.join(self.builddir, "images", "OVMF.fd")
self.emulator.boot(arch="i386", options=["-bios", bios, "-hda", hda])
self.emulator.login()
cmd = "modprobe efivarfs"
self.assertRunOk(cmd)
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
self.assertRunOk(cmd)
cmd = "efivar -l"
self.assertRunOk(cmd)
class TestGrubX8664EFI(infra.basetest.BRTest):
config = \
"""
BR2_x86_64=y
BR2_x86_corei7=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_UCLIBC_STABLE=y
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh {}"
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.204"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/pc/linux.config"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_PACKAGE_EFIVAR=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_EDK2=y
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_X86_64_EFI=y
BR2_TARGET_GRUB2_INSTALL_TOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
""".format(infra.filepath("tests/boot/test_grub/post-build.sh"))
def test_run(self):
hda = os.path.join(self.builddir, "images", "disk.img")
bios = os.path.join(self.builddir, "images", "OVMF.fd")
self.emulator.boot(arch="x86_64", options=["-bios", bios, "-hda", hda])
self.emulator.login()
cmd = "modprobe efivarfs"
self.assertRunOk(cmd)
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
self.assertRunOk(cmd)
cmd = "efivar -l"
self.assertRunOk(cmd)
class TestGrubAArch64EFI(infra.basetest.BRTest):
config = \
"""
BR2_aarch64=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_ROOTFS_POST_IMAGE_SCRIPT="{post_image}"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.15.18"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{linux_fragment}"
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_PACKAGE_EFIVAR=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_EDK2=y
BR2_TARGET_GRUB2=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_DOSFSTOOLS=y
""".format(post_image=infra.filepath("tests/boot/test_grub/post-image-aarch64-efi.sh"),
linux_fragment=infra.filepath("tests/boot/test_grub/linux-aarch64-efi.config"))
def test_run(self):
hda = os.path.join(self.builddir, "images", "disk.img")
bios = os.path.join(self.builddir, "images", "QEMU_EFI.fd")
self.emulator.boot(arch="aarch64", options=["-M", "virt", "-cpu", "cortex-a53", "-bios", bios, "-hda", hda])
self.emulator.login()
cmd = "modprobe efivarfs"
self.assertRunOk(cmd)
cmd = "mount -t efivarfs none /sys/firmware/efi/efivars"
self.assertRunOk(cmd)
cmd = "efivar -l"
self.assertRunOk(cmd)