upstream u-boot with additional patches for our devices/boards:
https://lists.denx.de/pipermail/u-boot/2017-March/282789.html (AXP crashes) ;
Gbit ethernet patch for some LIME2 revisions ;
with SPI flash support
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.9 KiB
118 lines
3.9 KiB
9 years ago
|
# Copyright (c) 2016 DENX Software Engineering GmbH
|
||
|
# Heiko Schocher <hs@denx.de>
|
||
|
#
|
||
|
# SPDX-License-Identifier: GPL-2.0+
|
||
|
#
|
||
|
|
||
|
write a new testcase
|
||
|
=====================
|
||
|
|
||
|
A TC is written in python, so you can use python as usual. For accessing
|
||
|
the boards console, use functions from the tbotlib, therefore
|
||
|
|
||
|
First import the tbotlib with the line:
|
||
|
|
||
|
from tbotlib import tbot
|
||
|
|
||
|
If your TC uses variables, please add a line which adds them to
|
||
|
the log file (for debugging purposes):
|
||
|
|
||
|
logging.info("args: %s ...", tb.varname, ...)
|
||
|
|
||
|
Say tbot, for which board state your TC is valid with:
|
||
|
|
||
|
tb.set_board_state("u-boot")
|
||
|
|
||
|
Then you are ready ... and you can use the tbotlib funtions
|
||
|
for writting/reading to the boards console.
|
||
|
|
||
|
Big fat warning:
|
||
|
|
||
|
A TC must worry about to end only if a board has finished the shell
|
||
|
command!
|
||
|
|
||
|
Not following this rule, will end in unpredictable behaviour.
|
||
|
|
||
|
(hopefully) useful tbotlib functions
|
||
|
====================================
|
||
|
- set the board state, you want to test
|
||
|
tb.set_board_state(state)
|
||
|
states are: "u-boot" or "linux"
|
||
|
If tbot could not set the board state, tbot ends with failure.
|
||
|
|
||
|
- write a command to the boards console:
|
||
|
tb.eof_write_con(command):
|
||
|
write the command to the boards console. If this
|
||
|
fails, tbot ends with failure
|
||
|
|
||
|
- write a command to boards console and wait for prompt:
|
||
|
tb.eof_write_cmd(fd, command):
|
||
|
fd: filedescriptor which is used, use tb.channel_con for boards console
|
||
|
command: command which is written to fd
|
||
|
|
||
|
Wait endless for board prompt
|
||
|
|
||
|
- write a list of commands to boards console:
|
||
|
tb.eof_write_cmd_list(fd, cmdlist):
|
||
|
fd: filedescriptor which is used, use tb.channel_con for boards console
|
||
|
cmdlist: python list of commandstrings which is written to fd
|
||
|
|
||
|
- wait for boards prompt:
|
||
|
tb.eof_read_end_state_con(retry):
|
||
|
retry: deprecated, not used anymore, cleanup needed here...
|
||
|
tbot waits endless for the boards prompt
|
||
|
|
||
|
- write a command, wait for prompt and check, if a string is read
|
||
|
tb.write_cmd_check(fd, cmd, string):
|
||
|
fd: filedescriptor which is used, use tb.channel_con for boards console
|
||
|
cmd: command, which is send to fd
|
||
|
string: string which should be read from fd
|
||
|
|
||
|
return value:
|
||
|
True, if string is read and tbot got back boards prompt
|
||
|
False, else
|
||
|
|
||
|
tb.eof_write_cmd_check(fd, cmd, string):
|
||
|
same as tb.write_cmd_check(fd, cmd, string) except, that tbot
|
||
|
ends immediately with Failure, if string is not read.
|
||
|
|
||
|
- read until prompt and search strings:
|
||
|
tb.readline_and_search_strings(fd, strings):
|
||
|
fd: filedescriptor which is used, use tb.channel_con for boards console
|
||
|
strings: python list of strings, which can be read
|
||
|
If one of this strings is read, this function return the index, which
|
||
|
string is read. This function shoud be called in a while loop,
|
||
|
until this function returns 'prompt'
|
||
|
|
||
|
- read a line from filedescriptor:
|
||
|
not recommended to use, as the TC must check, if tprompt is read for every
|
||
|
readen line. Also TC must ensure, that it ends only, if prompt is read.
|
||
|
tb.read_line(fd, retry)
|
||
|
fd: filedescriptor which is used, use tb.channel_con for boards console
|
||
|
retry: retry of trying to reead a line
|
||
|
|
||
|
return values:
|
||
|
True, if a line is read. Readen line in tb.buf[fd]
|
||
|
False, if something read, but not a complete line
|
||
|
None, if nothing is read
|
||
|
|
||
|
check if string contains prompt with:
|
||
|
tb.is_end_fd(fd, string)
|
||
|
fd: filedescriptor which is used, use tb.channel_con for boards console
|
||
|
string: buffer, in which a prompt gets searched.
|
||
|
|
||
|
- calling other TC:
|
||
|
eof_call_tc(name):
|
||
|
call another TC from "src/tc"
|
||
|
if the called TC fails with failure, tbot ends with failure
|
||
|
|
||
|
call_tc(name):
|
||
|
call another TC from "src/tc"
|
||
|
if the TC which call_tc calls fails, call_tc() returns False, else True
|
||
|
|
||
|
There are more functions, but for writting TC this should be enough. But
|
||
|
its software, so new useful functions can always pop up.
|
||
|
|
||
|
Heiko Schocher <hs@denx.de>
|
||
|
v1 2016.01.23
|