[PATCH 1/1] test: bootflow test depends on CONFIG_VIDEO

Simon Glass sjg at chromium.org
Wed May 31 21:52:51 CEST 2023


Hi Heinrich,

On Wed, 31 May 2023 at 13:27, Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
>
>
> On 5/31/23 20:24, Tom Rini wrote:
> > On Wed, May 31, 2023 at 08:05:18PM +0200, Heinrich Schuchardt wrote:
> >>
> >>
> >> On 5/31/23 19:13, Simon Glass wrote:
> >>> Hi Heinrich,
> >>>
> >>> On Wed, 31 May 2023 at 09:52, Tom Rini <trini at konsulko.com> wrote:
> >>>>
> >>>> On Wed, May 31, 2023 at 04:25:46PM +0200, Heinrich Schuchardt wrote:
> >>>>> Tom Rini <trini at konsulko.com> schrieb am Mi., 31. Mai 2023, 16:02:
> >>>>>
> >>>>>> On Wed, May 31, 2023 at 10:50:52AM +0200, Heinrich Schuchardt wrote:
> >>>>>>
> >>>>>>> qemu_arm64_defconfig with UNIT_TEST=y does not build.
> >>>>>>>
> >>>>>>> CONFIG_EXPO depends on CONFIG_VIDEO. Hence on platforms without video we
> >>>>>>> must not enable unit tests invoking expo functions.
> >>>>>>>
> >>>>>>> Fixes: fb1451bec2a5 ("bootstd: Add tests for bootstd including all
> >>>>>> uclasses")
> >>>>>>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> >>>>>>> ---
> >>>>>>>    test/boot/Makefile | 5 ++++-
> >>>>>>>    1 file changed, 4 insertions(+), 1 deletion(-)
> >>>>>>>
> >>>>>>> diff --git a/test/boot/Makefile b/test/boot/Makefile
> >>>>>>> index 22ed61c8fa..665017ba3d 100644
> >>>>>>> --- a/test/boot/Makefile
> >>>>>>> +++ b/test/boot/Makefile
> >>>>>>> @@ -2,7 +2,10 @@
> >>>>>>>    #
> >>>>>>>    # Copyright 2021 Google LLC
> >>>>>>>
> >>>>>>> -obj-$(CONFIG_BOOTSTD) += bootdev.o bootstd_common.o bootflow.o
> >>>>>> bootmeth.o
> >>>>>>> +ifdef CONFIG_BOOTSTD
> >>>>>>> +obj-y += bootstd_common.o bootmeth.o
> >>>>>>> +obj-$(VIDEO) += bootdev.o bootflow.o
> >>>>>>> +endif
> >>>>>>>    obj-$(CONFIG_FIT) += image.o
> >>>>>>>
> >>>>>>>    obj-$(CONFIG_EXPO) += expo.o
> >>>>>>
> >>>>>> OK, but the functionality itself doesn't depend on video, it looks like
> >>>>>> maybe only the bootflow_menu_theme test itself, so lets try and solve
> >>>>>> this differently.
> >>>>>>
> >>>>>> --
> >>>>>> Tom
> >>>>>>
> >>>>>
> >>>>> Yes I should have used CONFIG_EXPO not CONFIG_VIDEO .
> >>>>
> >>>> Well no, at first glance it's 1 out of 15 tests in that file that depend
> >>>> on CONFIG_EXPO, so we should just ifdef that test.
> >>
> >> Yes, there is only one test in bootflow.o depending on EXPO.
> >> There are multiple tests in bootdev.o depending on CONFIG_DM_MMC.
> >
> > And the tests presumably check for DM_MMC, or should.
> >
> >>> You could put something like this at the top of bootflow_cmd_menu():
> >>>
> >>> /* 'bootflow menu' currently requires a video console */
> >>> if (!IS_ENABLED(CONFIG_VIDEO))
> >>>      return -EAGAIN;
> >>
> >> With this change I still get:
> >>
> >>      aarch64-linux-gnu-ld.bfd: boot/bootflow_menu.o: in function
> >> `bootflow_menu_new':
> >
> > Looks like there's an extra line in boot/Makefile then, we already
> > include bootflow_menu.o on EXPO.
> >
>
> Hello Simon,
>
> the bootstd tests are in complete disarray
>
> On the sandbox invoked with
>
> ./u-boot -T
>
> => ut bootstd
> Can't map file 'mmc1.img': Invalid argument
> mmc1: Unable to map file 'mmc1.img'
> Failed to set up for bootstd tests (err=-5)
>
> It I create a file mmc1.img:
>
> test/boot/bootdev.c:460, bootdev_test_bootable(): -EINVAL ==
> bootdev_find_in_blk(iter.dev, blk, &iter, &bflow): Expected 0xffffffea
> (-22), got 0xffffffa3 (-93)
> test/boot/bootdev.c:465, bootdev_test_bootable(): -ENOENT ==
> bootdev_find_in_blk(iter.dev, blk, &iter, &bflow): Expected 0xfffffffe
> (-2), got 0xffffffa3 (-93)
> test/boot/bootdev.c:466, bootdev_test_bootable(): 1 ==
> iter.first_bootable: Expected 0x1 (1), got 0x0 (0)
> test/boot/bootdev.c:470, bootdev_test_bootable(): -EINVAL ==
> bootdev_find_in_blk(iter.dev, blk, &iter, &bflow): Expected 0xffffffea
> (-22), got 0xffffffa3 (-93)
> Test: bootdev_test_bootable: bootdev.c (flat tree)
> test/boot/bootdev.c:460, bootdev_test_bootable(): -EINVAL ==
> bootdev_find_in_blk(iter.dev, blk, &iter, &bflow): Expected 0xffffffea
> (-22), got 0xffffffa3 (-93)
> test/boot/bootdev.c:465, bootdev_test_bootable(): -ENOENT ==
> bootdev_find_in_blk(iter.dev, blk, &iter, &bflow): Expected 0xfffffffe
> (-2), got 0xffffffa3 (-93)
> test/boot/bootdev.c:466, bootdev_test_bootable(): 1 ==
> iter.first_bootable: Expected 0x1 (1), got 0x0 (0)
> test/boot/bootdev.c:470, bootdev_test_bootable(): -EINVAL ==
> bootdev_find_in_blk(iter.dev, blk, &iter, &bflow): Expected 0xffffffea
> (-22), got 0xffffffa3 (-93)
> Test <NULL> failed 8 times

I normally run these tests with an alias:  pyt bootstd

# Run a pytest on sandbox
# $1: Name of test to run (optional, else run all)

function pyt {
   local tests
   local para

   if [ "$1" = "-b" ]; then
      crosfw $b || return 1
      shift
   fi

   if [ "$1" = "-p" ]; then
      para="-n$(nproc) -q"
      shift
   fi
   tests="$@"
   echo $para $tests

   shift
   test/py/test.py -B sandbox --build-dir /tmp/b/sandbox ${para}
${tests:+"-k $tests"} $@
}

Once I do that once (for setup), I can then run individual tests
directly: rt bootdev_test_bootable


function rt_get_suite_and_name() {
   local arg
   #echo arg $arg
   suite=
   name=

   if [ "$1" = "-f" ]; then
      force="-f"
      shift
   fi
   arg="$1"
   rest="$2"

   # The symbol is something like this:
   #   _u_boot_list_2_ut_bootstd_test_2_vbe_simple_test_base
   # Split it into the suite name (bootstd) and test name
   # (vbe_simple_test_base)
   read suite name < \
      <(nm /tmp/b/$exec/u-boot |grep "list_2_ut.*$arg.*" \
         | cut -d' ' -f3 \
         | head -1 \
         | sed -n 's/_u_boot_list_2_ut_\(.*\)_test_2_/\1 /p')
   #echo suite $suite
   #echo name $name
}

# Run a test
function rt() {
   local exec=sandbox
   local suite name force rest
   rt_get_suite_and_name $*

   /tmp/b/$exec/u-boot -T $rest -c "ut $suite $force $name"
}


>
> As discussed previously:
>
> The general expectation is that unit tests can be run successfully on
> any physical or emulated board. Should a test not comply with this
> requirement the test must be deactivated automatically upon build.
>
> A test like
> ut_assert_skip_to_line(
> "sandbox: continuing, as we cannot run Linux");
> will never succeed on other architectures.

Most of the tests are written for sandbox, since:

- they are testing logic which is not arch- or board-specific
- they can access state which is not available on other boards
- they can make use of host files
- they are 1000s of times faster to run

Why are you wanting to run these tests on 'real' boards? There has to
be a reason, beyond just an academic exercise.

Regards,
Simon


More information about the U-Boot mailing list