Question on running uboot_testpy with tbot

Simon Glass sjg at chromium.org
Fri Dec 24 13:47:30 CET 2021


Hi,

Just pinging this thread in case someone can explain how to use this feature.

Regards,
Simon

On Sat, 30 Oct 2021 at 13:47, Simon Glass <sjg at chromium.org> wrote:
>
> Hi again,
>
> The relevant part of test-log.html is
>
>  Section: flash
> [-] Section: test_fpga_help
>
> TIME: NOW: 2021/10/30 13:41:52.662614
>
> TIME: SINCE-PREV: 0:00:00.142842
>
> TIME: SINCE-START: 0:00:00.148402
>
> SKIPPED:
> ('/home/sglass/tbot-workdir/uboot-rpi3/test/py/conftest.py', 486, 'Skipped: .config feature "cmd_fpga" not enabled')
>
> TIME: SINCE-SECTION: 0:00:00.000684
>
> [-] Section: test_help
>
> TIME: NOW: 2021/10/30 13:41:52.663392
>
> TIME: SINCE-PREV: 0:00:00.000778
>
> TIME: SINCE-START: 0:00:00.149180
>
> [-] Section: test_help/Starting U-Boot
>
> TIME: NOW: 2021/10/30 13:41:52.663511
>
> TIME: SINCE-PREV: 0:00:00.000119
>
> TIME: SINCE-START: 0:00:00.149299
>
> Resetting board
>
> [-] Stream: u-boot-test-reset
>
> +u-boot-test-reset unknown na
>
> TIME: NOW: 2021/10/30 13:41:52.666658
>
> TIME: SINCE-PREV: 0:00:00.003147
>
> TIME: SINCE-START: 0:00:00.152446
>
> TIME: NOW: 2021/10/30 13:42:22.797678
>
> TIME: SINCE-PREV: 0:00:30.131020
>
> TIME: SINCE-START: 0:00:30.283466
>
> TIME: SINCE-SECTION: 0:00:30.134391
>
> FAILED:
> request = <SubRequest 'u_boot_console' for <Function test_help>>
>
>     @pytest.fixture(scope='function')
>     def u_boot_console(request):
>         """Generate the value of a test's u_boot_console fixture.
>
>         Args:
>             request: The pytest request.
>
>         Returns:
>             The fixture value.
>         """
>
> >       console.ensure_spawned()
>
> test/py/conftest.py:364:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> test/py/u_boot_console_base.py:372: in ensure_spawned
>     m = self.p.expect([pattern_u_boot_main_signon] + self.bad_patterns)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> self = <u_boot_spawn.Spawn object at 0x7f5a4979e208>
> patterns = [re.compile('(U-Boot \\d{4}\\.\\d{2}[^\r\n]*\\))'), re.compile('(U-Boot SPL \\d{4}\\.\\d{2}[^\r\n]*\\))'), re.compile(...d{2}[^\r\n]*\\))'), re.compile('Hit any key to stop autoboot: '), re.compile("Unknown command '.*' - try 'help'"), ...]
>
>     def expect(self, patterns):
>         """Wait for the sub-process to emit specific data.
>
>         This function waits for the process to emit one pattern from the
>         supplied list of patterns, or for a timeout to occur.
>
>         Args:
>             patterns: A list of strings or regex objects that we expect to
>                 see in the sub-process' stdout.
>
>         Returns:
>             The index within the patterns array of the pattern the process
>             emitted.
>
>         Notable exceptions:
>             Timeout, if the process did not emit any of the patterns within
>             the expected time.
>         """
>
>         for pi in range(len(patterns)):
>             if type(patterns[pi]) == type(''):
>                 patterns[pi] = re.compile(patterns[pi])
>
>         tstart_s = time.time()
>         try:
>             while True:
>                 earliest_m = None
>                 earliest_pi = None
>                 for pi in range(len(patterns)):
>                     pattern = patterns[pi]
>                     m = pattern.search(self.buf)
>                     if not m:
>                         continue
>                     if earliest_m and m.start() >= earliest_m.start():
>                         continue
>                     earliest_m = m
>                     earliest_pi = pi
>                 if earliest_m:
>                     pos = earliest_m.start()
>                     posafter = earliest_m.end()
>                     self.before = self.buf[:pos]
>                     self.after = self.buf[pos:posafter]
>                     self.output += self.buf[:posafter]
>                     self.buf = self.buf[posafter:]
>                     return earliest_pi
>                 tnow_s = time.time()
>                 if self.timeout:
>                     tdelta_ms = (tnow_s - tstart_s) * 1000
>                     poll_maxwait = self.timeout - tdelta_ms
>                     if tdelta_ms > self.timeout:
>                         raise Timeout()
>                 else:
>                     poll_maxwait = None
>                 events = self.poll.poll(poll_maxwait)
>                 if not events:
> >                   raise Timeout()
> E                   u_boot_spawn.Timeout
>
> test/py/u_boot_spawn.py:170: Timeout
>
> TIME: SINCE-SECTION: 0:00:30.159899
>
> [-] Section: Status Report
>
> TIME: NOW: 2021/10/30 13:42:22.825745
>
> TIME: SINCE-PREV: 0:00:00.028067
>
> TIME: SINCE-START: 0:00:30.311533
>
> 0 passed
>
> 1 skipped
>
> ... test_fpga_help
>
> 1 failed
>
> ... test_help
>
> 322 not run
>
>
> Regards,
> Simon
>
>
> On Sat, 30 Oct 2021 at 13:34, Simon Glass <sjg at chromium.org> wrote:
>>
>> Hi,
>>
>> I am trying to run the pytests on my unit. The documentation doesn't really explain how it works.
>>
>> This is what I am trying:
>>
>> $ tbot -vv -l kea.py -b rpi3.py -T tbot/contrib  -p 'testpy_args=["-k", "help", "-vv"]' uboot_testpy
>> tbot starting ...
>> ├─Parameters:
>> │     testpy_args = ['-k', 'help', '-vv']
>> ├─Calling uboot_testpy ...
>> │   ├─Logging in on sglass at kea:22 ...
>> │   ├─[sglass] bash --norc --noprofile
>> │   ├─Calling uboot_setup_testhooks ...
>> │   │   ├─[sglass] echo " ${HOME}"
>> │   │   │    ##  /home/sglass
>> │   │   ├─[sglass] mkdir -p /home/sglass/tbot-workdir
>> │   │   ├─[sglass] test -d /home/sglass/tbot-workdir/uboot-testpy-tbot
>> │   │   ├─Creating FIFOs ...
>> │   │   ├─[sglass] rm -rf /home/sglass/tbot-workdir/uboot-testpy-tbot/fifo_console_send
>> │   │   ├─[sglass] mkfifo /home/sglass/tbot-workdir/uboot-testpy-tbot/fifo_console_send
>> │   │   ├─[sglass] rm -rf /home/sglass/tbot-workdir/uboot-testpy-tbot/fifo_console_recv
>> │   │   ├─[sglass] mkfifo /home/sglass/tbot-workdir/uboot-testpy-tbot/fifo_console_recv
>> │   │   ├─[sglass] rm -rf /home/sglass/tbot-workdir/uboot-testpy-tbot/fifo_commands
>> │   │   ├─[sglass] mkfifo /home/sglass/tbot-workdir/uboot-testpy-tbot/fifo_commands
>> │   │   ├─[sglass] cat /home/sglass/tbot-workdir/uboot-testpy-tbot/tbot-scripts.sha256
>> │   │   │    ## 2d30892b61eb713ce9413e06c4f2a0cd00d2a74b6b8c2ac6624e1e49909b1897
>> │   │   ├─Hooks are up to date, skipping deployment ...
>> │   │   ├─Adding hooks to $PATH ...
>> │   │   ├─[sglass] echo " ${PATH}"
>> │   │   │    ##  /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/cosarm/depot_tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/cosarm/depot_tools:/home/sglass/.local/bin:/vid/software/devel/ubtest/u-boot-test-hooks/bin:/vid/software/devel/ubtest/standalone-hdctools
>> │   │   ├─[sglass] export PATH=/home/sglass/tbot-workdir/uboot-testpy-tbot:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/cosarm/depot_tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/cosarm/depot_tools:/home/sglass/.local/bin:/vid/software/devel/ubtest/u-boot-test-hooks/bin:/vid/software/devel/ubtest/standalone-hdctools
>> │   │   ├─Open console & command channels ...
>> │   │   ├─[sglass] /home/sglass/tbot-workdir/uboot-testpy-tbot/tbot-console
>> │   │   ├─[sglass] /home/sglass/tbot-workdir/uboot-testpy-tbot/tbot-commands
>> │   │   └─Done. (0.028s)
>> │   ├─Calling uboot_checkout ...
>> │   │   ├─Builder: rpi3
>> │   │   ├─[sglass] test -d /home/sglass/tbot-workdir/uboot-rpi3/.git
>> │   │   ├─[sglass] git -C /home/sglass/tbot-workdir/uboot-rpi3 fetch
>> │   │   └─Done. (0.121s)
>> │   ├─[sglass] test -e /home/sglass/tbot-workdir/uboot-rpi3/.config
>> │   ├─[sglass] test -e /home/sglass/tbot-workdir/uboot-rpi3/include/autoconf.mk
>> │   ├─[sglass] picocom -q -b 115200 /dev/ttyusb_port1
>> │   ├─POWERON (rpi3)
>> │   ├─[sglass] sd-mux-ctrl --device-serial sdwire-18 --dut
>> │   ├─[sglass] ykushcmd -s YK17698 -g 1
>> │   │    ##
>> │   │    ##
>> │   │    ## Downstream port 1 is OFF
>> │   │    ##
>> │   ├─[sglass] ykushcmd -s YK17698 -u 1
>> │   ├─UBOOT (rpi3-u-boot)
>> │   │    <>
>> │   │    <>
>> │   │    <> U-Boot 2020.10-rc2-00140-g392aa09f310 (Oct 30 2021 - 12:38:07 -0600)
>> │   │    <>
>> │   │    <> DRAM:  992 MiB
>> │   │    <> RPI 3 Model B (0xa22082)
>> │   │    <> MMC:   mmc at 7e202000: 0, sdhci at 7e300000: 1
>> │   │    <> Loading Environment from FAT... *** Warning - bad CRC, using default environment
>> │   │    <>
>> │   │    <> In:    serial
>> │   │    <> Out:   vidconsole
>> │   │    <> Err:   vidconsole
>> │   │    <> Net:   No ethernet found.
>> │   │    <> Hit any key to stop autoboot:  0
>> │   │    <> U-Boot>
>> │   ├─[sglass] cd /home/sglass/tbot-workdir/uboot-rpi3
>> │   ├─[sglass] ./test/py/test.py --build-dir . --board-type unknown -k help -vv
>> │   │    ## +u-boot-test-flash unknown na
>> │   │    ## ============================= test session starts ==============================
>> │   │    ## platform linux -- Python 3.6.9, pytest-5.2.1, py-1.8.0, pluggy-0.13.0 -- /usr/bin/python3
>> │   │    ## cachedir: .pytest_cache
>> │   │    ## rootdir: /home/sglass/tbot-workdir/uboot-rpi3/test/py, inifile: pytest.ini
>> │   │    ## collected 324 items / 322 deselected / 2 selected
>> │   │    ##
>> │   │    ## test/py/tests/test_fpga.py::test_fpga_help SKIPPED                       [ 50%]│   ├─[sglass] ykushcmd -s YK17698 -d 1
>> │   ├─[sglass] sd-mux-ctrl --device-serial sdwire-18 --ts
>> │   ├─Exiting poweroff
>> │   ├─[sglass] sd-mux-ctrl --device-serial sdwire-18 --dut
>> │   ├─[sglass] ykushcmd -s YK17698 -g 1
>> │   │    ##
>> │   │    ##
>> │   │    ## Downstream port 1 is OFF
>> │   │    ##
>> │   ├─[sglass] ykushcmd -s YK17698 -u 1
>>
>> │   ├─POWEROFF (rpi3)
>> │   ├─[sglass] ykushcmd -s YK17698 -d 1
>> │   ├─[sglass] sd-mux-ctrl --device-serial sdwire-18 --ts
>> │   ├─Exiting poweroff
>> │   └─Fail. (38.376s)
>> ├─Exception:
>> │   Traceback (most recent call last):
>> │     File "/home/sglass/.local/lib/python3.8/site-packages/tbot-0.9.2-py3.8.egg/tbot/main.py", line 345, in main
>> │       func(**params)
>> │     File "/home/sglass/.local/lib/python3.8/site-packages/tbot-0.9.2-py3.8.egg/tbot/decorators.py", line 92, in wrapped
>> │       return tc(*args, **kwargs)
>> │     File "/home/sglass/.local/lib/python3.8/site-packages/tbot-0.9.2-py3.8.egg/tbot/decorators.py", line 157, in wrapped
>> │       return tc(lh, *args, **kwargs)
>> │     File "/home/sglass/.local/lib/python3.8/site-packages/tbot-0.9.2-py3.8.egg/tbot/tc/uboot/testpy.py", line 321, in testpy
>> │       os.write(chan_console.fileno(), data)
>> │   OSError: [Errno 9] Bad file descriptor
>> ├─────────────────────────────────────────
>> └─FAILURE (38.488s)
>>
>>
>> I don't see the output appearing and I'm not sure how pytest is sending the commands to the board?
>>
>> Regards,
>> Simon
>>


More information about the U-Boot mailing list