[tbot] Problem with context exit (and serial transmission)
Lukasz Majewski
lukma at denx.de
Sat Feb 2 22:57:44 UTC 2019
Dear tbot users,
I'm trying to build a more sophisticated tbot scenario:
1. I allow board to boot till linux prompt and change the u-boot env
variable with fw_setenv foo "AAA" (this is one test - separate one ->
linux_falcon_boot)
2. Then I start another test, which in u-boot updates fitImage
(uboot_kernel_write)
Please find following snippet:
def kernel_active_update(
lab: typing.Optional[linux.LabHost] = None,
) -> None:
linux_falcon_boot(falcon_status="disable")
# --------- Problem / why do I need this code ?
with lab or tbot.acquire_lab() as lh:
lh.exec0("pkill", "-9", "picocom")
time.sleep(3)
# ---------
uboot_kernel_write(reset=True, serverip="192.168.2.222")
The linux_falcon_boot() and uboot_kernel_write() works without problems
when executed as standalone tests (and I only expect them to be run one
by one).
The question is - why do I need to kill manually the picocom process
and put some sleep between invocation of those two tests?
From the doc I thought that when we exit context (from one test with
disabling power) and start the context again (and power up in another
test), the "channel" would be put into default state (I mean the picocom
would be killed and re-spawned accordingly).
When I comment lines between #---- I do see following error
(for /dev/tty_display5 or ttyUSB0):
│ BlockingIOError: [Errno 11] Resource temporarily unavailable
│
│ During handling of the above exception, another exception occurred:
File"/root/.local/lib/python3.7/site-packages/tbot-0.6.6-py3.7.egg/tbot/machine/channel/subprocess.py",
line 85, in recv
│ raise channel.ChannelClosedException()
│tbot.machine.channel.channel.ChannelClosedException
Thanks in advance for help.
The separate tests in questions (for a reference):
tc_uboot_kernel_write.py:
-------------------------
import contextlib
import typing
import tbot
from tbot.machine import board
from tbot.machine import linux
TFTP_DIR = "/srv/tftp"
@tbot.testcase
def uboot_kernel_write(
lab: typing.Optional[tbot.selectable.LabHost] = None,
uboot: typing.Optional[board.UBootMachine] = None,
serverip: str = "192.168.2.222",
reset: bool = False,
) -> None:
with contextlib.ExitStack() as cx:
lh = cx.enter_context(lab or tbot.acquire_lab())
if uboot is not None:
ub = uboot
else:
b = cx.enter_context(tbot.acquire_board(lh))
ub = cx.enter_context(tbot.acquire_uboot(b))
p = linux.Path(lh, TFTP_DIR+"/fitImage")
if not p.is_file():
raise Exception(f"{p} must be a fitImage file!")
ub.exec0("setenv", "serverip", serverip)
ub.exec0("run", "tftp_mmc_fitImg")
if reset:
ub.exec0("reset")
tc_linux_falcon_boot.py
-----------------------
import contextlib
import typing
import tbot
from tbot.machine import linux, board
@tbot.testcase
def linux_falcon_boot(
lab: typing.Optional[linux.LabHost] = None,
board_linux: typing.Optional[board.LinuxStandaloneMachine] = None,
falcon_status: str = "disable",
) -> None:
with contextlib.ExitStack() as cx:
if board_linux is None:
lh = cx.enter_context(lab or tbot.acquire_lab())
b = cx.enter_context(tbot.acquire_board(lh))
lnx = cx.enter_context(tbot.acquire_linux(b))
else:
lnx = board_linux
lnx.exec0("fw_setenv", "boot_os", "y" if falcon_status ==
"enable" else "" )
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/tbot/attachments/20190202/fb6a84f9/attachment.sig>
More information about the tbot
mailing list