| # 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 |