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