[PATCH v4 06/42] doc: Explain how to run tests without pytest

Simon Glass sjg at chromium.org
Sun Mar 7 23:49:14 CET 2021


Hi Heinrich,

On Thu, 4 Mar 2021 at 11:13, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 3/4/21 2:50 PM, Simon Glass wrote:
> > Add details about how to run a sandbox test directly, without using
> > pytest. This is more convenient for rapid development, since it is faster
> > and allows easier use of a debugger. Also mention sandbox_flattree as an
> > example of the different sandbox builds available.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > (no changes since v2)
> >
> > Changes in v2:
> > - Put the docs in tests_sandbox since it is more related to sandbox
> > - Put in a mention of tests_sandbox in the main testing docs
> >
> >   doc/develop/index.rst         |  1 +
> >   doc/develop/testing.rst       |  9 ++++
> >   doc/develop/tests_sandbox.rst | 79 +++++++++++++++++++++++++++++++++++
>
> Thank you for adding this documentation.
>
> tests_sandbox.rst seems to be the wrong file name:

But if you look at it, it is all about running tests using sandbox.

>
> We have three types of tests:
>
> * Python tests
> * library tests started using the 'ut' shell commad
> * UEFI related tests started using the 'bootefi selftest' command
>
> All three tpyes of tests are run both on real hardware and on the sandbox.
>
> Unfortunately a few Python tests require the sandbox.
>
> Some tests are not run on the sandbox by default though they could, e.g.
> the UEFI tests run only on QEMU because you decided not to activate
> CONFIG_EFI_SELFTEST on sandbox_defconfig.

It was a long time ago, but I recall spending a year trying to
upstream a bit of refactoring to allow it and then giving up. If you
have a way to do it, please go ahead.

>
> Some tests can only be used interactively, e.g.
>
>      setenv efi_selftest block image transfer
>      bootefi selftest
>
> Some tests cannot be run on the sandbox at all, e.g.
> test/py/tests/test_fpga.py

That is a bug :-)

>
> >   3 files changed, 89 insertions(+)
> >   create mode 100644 doc/develop/tests_sandbox.rst
> >
> > diff --git a/doc/develop/index.rst b/doc/develop/index.rst
> > index ac57fdb8f30..50b1de3bdff 100644
> > --- a/doc/develop/index.rst
> > +++ b/doc/develop/index.rst
> > @@ -33,3 +33,4 @@ Testing
> >      coccinelle
> >      testing
> >      py_testing
> > +   tests_sandbox
> > diff --git a/doc/develop/testing.rst b/doc/develop/testing.rst
> > index f01ca4dc408..87c90eee271 100644
> > --- a/doc/develop/testing.rst
> > +++ b/doc/develop/testing.rst
> > @@ -36,6 +36,7 @@ U-Boot can be built as a user-space application (e.g. for Linux). This
> >   allows test to be executed without needing target hardware. The 'sandbox'
> >   target provides this feature and it is widely used in tests.
> >
> > +See :doc:`tests_sandbox` for more information.
> >
> >   Pytest Suite
> >   ------------
> > @@ -51,8 +52,16 @@ You can run the tests on sandbox with::
> >
> >   This will produce HTML output in build-sandbox/test-log.html
> >
> > +Some tests run with other versions of sandbox. For example sandbox_flattree
> > +runs the tests with livetree (the hierachical devicetree) disabled. You can
> > +also select particular tests with -k::
> > +
> > +   ./test/py/test.py --bd sandbox_flattree --build -k hello
> > +
> >   See test/py/README.md for more information about the pytest suite.
> >
> > +See :doc:`tests_sandbox` for how to run tests directly (not through pytest).
> > +
> >
> >   tbot
> >   ----
> > diff --git a/doc/develop/tests_sandbox.rst b/doc/develop/tests_sandbox.rst
> > new file mode 100644
> > index 00000000000..85bbd4f6734
> > --- /dev/null
> > +++ b/doc/develop/tests_sandbox.rst
> > @@ -0,0 +1,79 @@
> > +.. SPDX-License-Identifier: GPL-2.0+
> > +
> > +Tests Under the Hood
> > +====================
> > +
> > +Running sandbox tests directly
> > +------------------------------
> > +
> > +Typically tests are run using the pytest suite. This is easy and always gets
> > +things right.
>
> No, in the contrary:
>
> It is difficult to set up Python testing for real hardware. Running
> non-Python tests from the console is trivial both on the sandbox and on
> real hardware.

OK I will reword it.

>
> > +
> > +But it is also possible to run some sandbox tests directly. For example, this
> > +runs the dm_test_gpio() test which you can find in test/dm/gpio.c::
> > +
> > +   $ ./u-boot -T -c "ut dm gpio"
> This works only on the sandbox. To create examples assume that the shell
> is already started:

The whole point of this file is to describe using sandbox!

>
>      => ut dm gpio
>
> and
>
>      => bootefi selftest
>
> We should add a man-page for the ut command in /doc/usage/.

OK, please go ahead.

>
> > +
> > +
> > +   U-Boot 2021.01
> > +
> > +   Model: sandbox
> > +   DRAM:  128 MiB
> > +   WDT:   Started with servicing (60s timeout)
> > +   MMC:   mmc2: 2 (SD), mmc1: 1 (SD), mmc0: 0 (SD)
> > +   In:    serial
> > +   Out:   vidconsole
> > +   Err:   vidconsole
> > +   Model: sandbox
> > +   SCSI:
> > +   Net:   eth0: eth at 10002000, eth5: eth at 10003000, eth3: sbe5, eth6: eth at 10004000
> > +   Test: dm_test_gpio: gpio.c
> > +   Test: dm_test_gpio: gpio.c (flat tree)
> > +   Failures: 0
> > +
>
> Only the text below is sandbox specific.
>
> > +The -T option tells U-Boot to run with the 'test' devicetree (test.dts) instead
>
> %s/U-Boot/the U-Boot sandbox/g
>
> > +of -D which selects the normal sandbox.dts - this is necessary because many
> > +tests rely on things in the test devicetree. If you try running tests without
>
> %s/things/nodes/ ?

or properties

>
> > +-T then you may see failures, like::
> > +
> > +   $ ./u-boot -c "ut dm gpio"
> > +
> > +
> > +   U-Boot 2021.01
> > +
> > +   DRAM:  128 MiB
> > +   WDT:   Not found!
> > +   MMC:
> > +   In:    serial
> > +   Out:   serial
> > +   Err:   serial
> > +   SCSI:
> > +   Net:   No ethernet found.
> > +   Please run with test device tree:
> > +       ./u-boot -d arch/sandbox/dts/test.dtb
> > +   Test: dm_test_gpio: gpio.c
> > +   test/dm/gpio.c:37, dm_test_gpio(): 0 == gpio_lookup_name("b4", &dev, &offset, &gpio): Expected 0x0 (0), got 0xffffffea (-22)
> > +   Test: dm_test_gpio: gpio.c (flat tree)
> > +   test/dm/gpio.c:37, dm_test_gpio(): 0 == gpio_lookup_name("b4", &dev, &offset, &gpio): Expected 0x0 (0), got 0xffffffea (-22)
> > +   Failures: 2
> > +
> > +The message above should provide a hint if you forget. Even running with -D
>
> If I forget what? Please, complete the sentence.

OK.

Regards,
Simon


More information about the U-Boot mailing list