[PATCH v2 06/17] boot: Add a new test for global bootmeths
    Simon Glass 
    sjg at chromium.org
       
    Wed Oct  8 14:54:21 CEST 2025
    
    
  
Hi Tom,
On Tue, 7 Oct 2025 at 11:58, Tom Rini <trini at konsulko.com> wrote:
>
> On Wed, Oct 01, 2025 at 03:26:31PM -0600, Simon Glass wrote:
>
> > 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>
> [snip]
> > @@ -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);
>
> Here is the one call of bootflow_show outside of where show_bootflow is
> called today, and bootflow_show is called by the end of this series.
>
> > +     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);
>
> Nothing in the rest of this test is checking the output of strings, and
> nor should it since the test is checking the struct itself to be as
> expected. Am I missing something? If not, I don't think we should bother
> with the previous patch.
You're missing that when the test fails you need to try to figure out
why...it is much easier to do that if it prints out info on the
bootflow. In my case it was printing a completely different one.
I'm happy to remove that line (and the patch) if you like.
Regards,
Simon
    
    
More information about the U-Boot
mailing list