On Fri, Sep 27, 2024 at 12:02:23AM +0200, Simon Glass wrote: > 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 <[email protected]>
So lets go to the problem point. What asserts here fail due to ANSI
escape codes being in the output and needing to be filtered out?
[snip]
> diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
> index e05103188b4..da2ee1ab345 100644
> --- a/test/boot/bootflow.c
> +++ b/test/boot/bootflow.c
> @@ -13,6 +13,7 @@
> #include <cli.h>
> #include <dm.h>
> #include <efi_default_filename.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)
> {
> /*
> @@ -1205,3 +1209,62 @@ 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)
> +{
> + /* 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();
> +
> + /* Avoid outputting ANSI characters which mess with our asserts */
> + efi_console_set_ansi(false);
> +
> + ut_assertok(bootstd_test_drop_bootdev_order(uts));
> + 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 boot sevices");
> + if (IS_ENABLED(CONFIG_LOGF_FUNC))
> + ut_assert_nextline(" do_bootefi_exec() ## Application
> failed, r = 5");
> + else
> + ut_assert_nextline("## Application failed, r = 5");
> + ut_assert_nextline("Boot failed (err=-22)");
> +
> + ut_assert_console_end();
> +
> + return 0;
> +}
> +BOOTSTD_TEST(bootflow_efi, UTF_CONSOLE);
--
Tom
signature.asc
Description: PGP signature

