
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@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@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@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@7e202000: 0, sdhci@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