tbot_contrib.uboot.testpy(uboot_sources: Path[BH], *, board: Board | None = None, uboot: BoardUBoot | None = None, boardenv: str | None = None, testpy_args: List[str] | None = None) None[source]

Run U-Boot’s test/py test-framework against a tbot-machine.


This function supersedes the old tbot.tc.uboot.testpy() testcase. Please read the docs below carefully on how to use it.

This function is meant to be integrated into a custom testcase for test/py which sets up the environment as needed. A simple example could look like this:

from tbot_contrib import uboot

BOARDENV = r"""# Boardenv for xyz board.

env__net_dhcp_server = True

def run_testpy() -> None:
    with tbot.ctx.request(tbot.role.BuildHost) as h:
        # location of the U-Boot sources - these must have been
        # pre-configured elsewhere (or configured here manually)
        build_dir = h.workdir / "u-boot-mainline"

        # subshell for the build environment
        with h.subshell():
            # setup toolchain
            h.env("CROSS_COMPILE", "arm-linux-")

            # if needed, you could configure sources here
            # h.exec0("make", "xyz_defconfig")

                testpy_args=["--maxfail", "6"],

As shown above, the testcase will attempt to instanciate the default board machine from tbot.role.Board and tbot.role.BoardUBoot. If a different board machine should be used, it can be passed in explicitly like this:

def run_testpy() -> None:
    with tbot.ctx() as cx:
        h = cx.request(tbot.role.BuildHost)
        build_dir = ...

        # for demonstration - this is exactly what uboot.testpy()
        # would do on its own when board and uboot are not passed.
        b = cx.request(tbot.role.Board)
        ub = cx.request(tbot.role.BoardUBoot, exclusive=True)


It is advisable to request the U-Boot machine with exclusive=True so no other code will attempt interacting with it while testpy is running. This is not a hard requirement, though.

  • uboot_sources (tbot.machine.linux.Path) – Path to the U-Boot sources on the host where test/py should run. This could, for example, be your build-host. Importantly, before calling testpy(), you must ensure that these U-Boot sources have been configured appropriately for your board. testpy() will make no attempt to do this itself.

  • board (tbot.role.Board) – Optional board machine if requesting tbot.role.Board is not enough. uboot must also be passed if board is passed.

  • uboot (tbot.role.BoardUBoot) – Optional U-Boot machine if requesting tbot.role.BoardUBoot is not enough. board must also be passed if uboot is passed.

  • boardenv (str) – Optional “boardenv” file contents to configure test/py. This can, for example, be used to configure where mmc tests can perform test reads. The individual test implementations in the U-Boot sources document available options.

  • testpy_args (list(str)) – Optional additional args to be passed to the test/py invocation. For example, you can use ["-k", "mmc"] to filter for mmc tests only. Or ["-v"] to show the names of all testcases as they are executed (or skipped).

New in version 0.9.5.