| # Copyright (c) 2016 DENX Software Engineering GmbH |
| # Heiko Schocher <hs@denx.de> |
| # |
| # SPDX-License-Identifier: GPL-2.0+ |
| # |
| |
| What is tbot ? |
| ============== |
| |
| tbot is a tool for executing testcases on boards. |
| Source code found on [1] |
| Based on DUTS [2] |
| written in python |
| |
| Basic Ideas of tbot |
| =================== |
| (see also the figure: |
| https://github.com/hsdenx/tbot/blob/master/doc/tbot_structure.png ) |
| |
| - Virtual laboratory (VL) |
| VL is the basic environment that groups: |
| - [a number of] boards - target devices on which tbot executes testcases. |
| - one Lab PC |
| |
| - Test case (TC): |
| A piece of python code, which uses the tbot class from [1]. |
| Tbot provides functions for sending shell commands and parsing the |
| shell commands output. |
| Tbot waits endless for a shell commands end (detected through reading |
| the consoles prompt). |
| A TC can also call other TC-es. |
| |
| remark: |
| Tbot not really waits endless, for a shell commands end, instead |
| tbot starts a watchdog in the background, and if it triggers, tbot |
| ends the TC as failed. In the tbot beginning there was a lot of |
| timeouts / retry cases, but it turned out, that waiting endless |
| is robust and easy ... |
| |
| - Host PC (where tbot runs, currently only linux host tested) |
| must not a powerful machine (For example [3], I use a |
| raspberry pi for running tbot and buildbot) |
| |
| - Lab PC: |
| - Host PC connects through ssh to the Lab PC |
| -> so it is possible to test boards, which |
| are not at the same place as the Host PC. |
| (Lab PC and Host PC can be the same of course) |
| -> maybe we can setup a Testsystem, which does nightly |
| U-Boot/Linux builds and test from current mainline U-Boot |
| on boards wherever they are accessible. |
| |
| - necessary tasks a Lab PC must deliver: |
| - connect to boards console through a shell command. |
| - power on/off boards through a shell command |
| - detect the current power state of a board through |
| a shell command |
| |
| - optional tasks: |
| - tftp server (for example loading images) |
| - nfs server (used as rootfs for linux kernels) |
| - Internet access for example for downloading |
| U-Boot source with git. |
| - toolchains installed for compiling source code |
| |
| -> a linux machine is preffered. |
| |
| - currently only Lab PC with an installed linux supported/tested. |
| |
| - Boards(s): |
| the boards on which shell commands are executed. |
| |
| - Board state: |
| equals to the software, the board is currently running. |
| |
| Currently tbot supports 2 board states: |
| - "u-boot", if the board is running U-Boot |
| - "linux", if the board is running a linux kernel |
| |
| It should be easy to add other board states to tbot, see |
| https://github.com/hsdenx/tbot/tree/master/src/lab_api/state_[u-boot/linux].py |
| |
| A board state is detected through analysing the boards |
| shell prompt. In linux, tbot sets a special tbot prompt, |
| in U-Boot the prompt is static, and configurable in tbot through |
| a board config file. |
| |
| A TC can say in which board state it want to send shell commands. |
| Tbot tries to detect the current board state, if board is not in |
| the requested board state, tbot tries to switch into the correct |
| state. If this fails, the TC fails. |
| |
| It is possible to switch in a single TC between board states. |
| |
| - tbot cmdline parameters: |
| |
| $ python2.7 src/common/tbot.py --help |
| Usage: tbot.py [options] |
| |
| Options: |
| -h, --help show this help message and exit |
| -c CFGFILE, --cfgfile=CFGFILE |
| the tbot common configfilename |
| -l LOGFILE, --logfile=LOGFILE |
| the tbot logfilename, if default, tbot creates a |
| defaultnamelogfile |
| -t TC, --testcase=TC the testcase which should be run |
| -v, --verbose be verbose, print all read/write to stdout |
| -w WORKDIR, --workdir=WORKDIR |
| set workdir, default os.getcwd() |
| $ |
| |
| tbot needs the following files for proper execution: |
| |
| - tbot board configuration file (option -c): |
| A board configuration file contains settings tbot needs to |
| connect to the Lab PC and board specific variable settings |
| for testcases. |
| |
| - name of the logfile tbot creates (option -l) |
| defaultname: 'log/' + now.strftime("%Y-%m-%d-%H-%M") + '.log' |
| |
| - tbots working directory (option -w) |
| |
| - the testcasename tbot executes (option -t) |
| |
| You are interested and want to use tbot? |
| If so, please read on the file: |
| tools/tbot/README.install |
| |
| If not read [3] ;-) |
| |
| Heiko Schocher <hs@denx.de> |
| v1 2016.01.22 |
| |
| -------------- |
| [1] https://github.com/hsdenx/tbot |
| [2] http://www.denx.de/wiki/DUTS/DUTSDocs |
| [3] automated Testsetup with buildbot and tbot doing cyclic tests |
| (buildbot used for starting tbot TC and web presentation of the |
| results, all testing done through tbot): |
| http://xeidos.ddns.net/buildbot/tgrid |
| Host PC in Letkes/hungary |
| VL in munich/germany |
| |
| Fancy things are done here, for example: |
| - http://xeidos.ddns.net/buildbot/builders/smartweb_dfu/builds/43/steps/shell/logs/tbotlog |
| (I try to cleanup the logfile soon, so it is not so filled with crap ;-) |
| A first step see here: |
| http://xeidos.ddns.net/buildbot/builders/smartweb_dfu/builds/45/steps/shell/logs/tbotlog |
| (same TC now with the new loglevel = 'CON' ... not yet perfect) |
| Executed steps: |
| - clone u-boot.git |
| - set toolchain |
| - get a list of patchwork patches from my U-Boots ToDo list |
| - download all of them, and check them with checkpatch |
| and apply them to u-boot.git |
| - compile U-Boot for the smartweb board |
| - install the resulting images on the smartweb board |
| - boot U-boot |
| - test DFU |
| - more TC should be added here for testing U-Boot |
| |
| - automatic "git bisect" |
| https://github.com/hsdenx/tbot/blob/master/src/tc/tc_board_git_bisect.py |
| http://xeidos.ddns.net/buildbot/builders/tqm5200s/builds/3/steps/shell/logs/tbotlog |
| |
| If a current U-Boot image not works on the tqm5200 board |
| this TC can be started. It starts a "git bisect" session, |
| and compiles for each step U-Boot, install it on the tqm5200 |
| board, and tests if U-Boot works ! |
| |
| At the end, it detects the commit, which breaks the board |
| |
| This TC is not dependend on U-Boot nor on a special board. It |
| needs only 3 variables: |
| tb.board_git_bisect_get_source_tc: TC which gets the source tree, in which |
| "git bisect" should be executed |
| tb.board_git_bisect_call_tc: TC which gets called every "git bisect" step, |
| which executes commands for detecting if current source code is OK or not. |
| This could be a TC which compiles U-Boot, install it on the board and |
| executes TC on the new booted U-Boot image. ! Board maybe gets borken, |
| as not all U-Boot images work, so you must have a TC which install U-Boot |
| image for example through a debugger. |
| tb.board_git_bisect_good_commit: last nown good commit id |