[PATCH v2 06/17] boot: Add a new test for global bootmeths
Simon Glass
sjg at chromium.org
Wed Oct 1 23:26:31 CEST 2025
These have different behaviour from normal bootmeths and we are about to
enhance it. So add a test and also an extra check in bootflow_iter()
Signed-off-by: Simon Glass <sjg at chromium.org>
---
(no changes since v1)
test/boot/bootflow.c | 45 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
index 73fe3d34d0f..f6661530848 100644
--- a/test/boot/bootflow.c
+++ b/test/boot/bootflow.c
@@ -307,6 +307,8 @@ static int bootflow_iter(struct unit_test_state *uts)
ut_asserteq(0, iter.max_part);
ut_asserteq_str("extlinux", iter.method->name);
ut_asserteq(0, bflow.err);
+ ut_assert(!iter.doing_global);
+ ut_asserteq(-1, iter.first_glob_method);
/*
* This shows MEDIA even though there is none, since in
@@ -388,6 +390,49 @@ static int bootflow_iter(struct unit_test_state *uts)
BOOTSTD_TEST(bootflow_iter, UTF_DM | UTF_SCAN_FDT | UTF_CONSOLE);
#if defined(CONFIG_SANDBOX) && defined(CONFIG_BOOTMETH_GLOBAL)
+
+/* Check iterating through available bootflows to test global bootmeths */
+static int bootflow_iter_glob(struct unit_test_state *uts)
+{
+ struct bootflow_iter iter;
+ struct bootflow bflow;
+
+ bootstd_clear_glob();
+
+ /* we should get the global bootmeth initially */
+ ut_asserteq(-EINVAL,
+ bootflow_scan_first(NULL, NULL, &iter, BOOTFLOWIF_ALL |
+ BOOTFLOWIF_SHOW, &bflow));
+ bootflow_show(0, &bflow, true);
+ ut_asserteq(3, iter.num_methods);
+ ut_assert(iter.doing_global);
+ ut_asserteq(2, iter.first_glob_method);
+
+ ut_asserteq(2, iter.cur_method);
+ ut_asserteq(0, iter.part);
+ ut_asserteq(0, iter.max_part);
+ ut_asserteq_str("firmware0", iter.method->name);
+ ut_asserteq(0, bflow.err);
+ bootflow_free(&bflow);
+
+ /* next we should get the first non-global bootmeth */
+ ut_asserteq(-EPROTONOSUPPORT, bootflow_scan_next(&iter, &bflow));
+
+ /* at this point the global bootmeths are stranded above num_methods */
+ ut_asserteq(2, iter.num_methods);
+ ut_asserteq(2, iter.first_glob_method);
+ ut_assert(!iter.doing_global);
+
+ ut_asserteq(0, iter.cur_method);
+ ut_asserteq(0, iter.part);
+ ut_asserteq(0, iter.max_part);
+ ut_asserteq_str("extlinux", iter.method->name);
+ ut_asserteq(0, bflow.err);
+
+ return 0;
+}
+BOOTSTD_TEST(bootflow_iter_glob, UTF_DM | UTF_SCAN_FDT);
+
/* Check using the system bootdev */
static int bootflow_system(struct unit_test_state *uts)
{
--
2.43.0
More information about the U-Boot
mailing list