mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 09:54:35 +00:00
test: efi: boot: Add a test for the efi bootmeth
Add a simple test of booting with the EFI bootmeth, which runs the app and checks that it can call 'exit boot-services' (to check that all the device-removal code doesn't break anything) and then exit back to U-Boot. This uses a disk image containing the testapp, ready for execution by sandbox when needed. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
79aed64f94
commit
70b78d5293
1 changed files with 67 additions and 0 deletions
|
@ -13,6 +13,7 @@
|
|||
#include <cli.h>
|
||||
#include <dm.h>
|
||||
#include <efi.h>
|
||||
#include <efi_loader.h>
|
||||
#include <expo.h>
|
||||
#ifdef CONFIG_SANDBOX
|
||||
#include <asm/test.h>
|
||||
|
@ -31,6 +32,9 @@ extern U_BOOT_DRIVER(bootmeth_android);
|
|||
extern U_BOOT_DRIVER(bootmeth_cros);
|
||||
extern U_BOOT_DRIVER(bootmeth_2script);
|
||||
|
||||
/* Use this as the vendor for EFI to tell the app to exit boot services */
|
||||
static u16 __efi_runtime_data test_vendor[] = u"U-Boot testing";
|
||||
|
||||
static int inject_response(struct unit_test_state *uts)
|
||||
{
|
||||
/*
|
||||
|
@ -1217,3 +1221,66 @@ static int bootflow_android(struct unit_test_state *uts)
|
|||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(bootflow_android, UTF_CONSOLE);
|
||||
|
||||
/* Test EFI bootmeth */
|
||||
static int bootflow_efi(struct unit_test_state *uts)
|
||||
{
|
||||
static const char *order[] = {"mmc1", "usb", NULL};
|
||||
struct bootstd_priv *std;
|
||||
struct udevice *bootstd;
|
||||
const char **old_order;
|
||||
|
||||
ut_assertok(uclass_first_device_err(UCLASS_BOOTSTD, &bootstd));
|
||||
std = dev_get_priv(bootstd);
|
||||
old_order = std->bootdev_order;
|
||||
std->bootdev_order = order;
|
||||
|
||||
/* disable ethernet since the hunter will run dhcp */
|
||||
test_set_eth_enable(false);
|
||||
|
||||
/* make USB scan without delays */
|
||||
test_set_skip_delays(true);
|
||||
|
||||
bootstd_reset_usb();
|
||||
|
||||
ut_assertok(run_command("bootflow scan", 0));
|
||||
ut_assert_skip_to_line(
|
||||
"Bus usb@1: scanning bus usb@1 for devices... 5 USB Device(s) found");
|
||||
|
||||
ut_assertok(run_command("bootflow list", 0));
|
||||
|
||||
ut_assert_nextlinen("Showing all");
|
||||
ut_assert_nextlinen("Seq");
|
||||
ut_assert_nextlinen("---");
|
||||
ut_assert_nextlinen(" 0 extlinux");
|
||||
ut_assert_nextlinen(
|
||||
" 1 efi ready usb_mass_ 1 usb_mass_storage.lun0.boo /EFI/BOOT/BOOTSBOX.EFI");
|
||||
ut_assert_nextlinen("---");
|
||||
ut_assert_skip_to_line("(2 bootflows, 2 valid)");
|
||||
ut_assert_console_end();
|
||||
|
||||
ut_assertok(run_command("bootflow select 1", 0));
|
||||
ut_assert_console_end();
|
||||
|
||||
systab.fw_vendor = test_vendor;
|
||||
|
||||
ut_asserteq(1, run_command("bootflow boot", 0));
|
||||
ut_assert_nextline(
|
||||
"** Booting bootflow 'usb_mass_storage.lun0.bootdev.part_1' with efi");
|
||||
if (IS_ENABLED(CONFIG_LOGF_FUNC))
|
||||
ut_assert_skip_to_line(" efi_run_image() Booting /\\EFI\\BOOT\\BOOTSBOX.EFI");
|
||||
else
|
||||
ut_assert_skip_to_line("Booting /\\EFI\\BOOT\\BOOTSBOX.EFI");
|
||||
|
||||
/* TODO: Why the \r ? */
|
||||
ut_assert_nextline("U-Boot test app for EFI_LOADER\r");
|
||||
ut_assert_nextline("Exiting test app");
|
||||
ut_assert_nextline("Boot failed (err=-14)");
|
||||
|
||||
ut_assert_console_end();
|
||||
|
||||
ut_assertok(bootstd_test_drop_bootdev_order(uts));
|
||||
|
||||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(bootflow_efi, UTF_CONSOLE);
|
||||
|
|
Loading…
Add table
Reference in a new issue