|
|
|
# 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.
|
|
|
|
|
|
|
|
- Events
|
|
|
|
tbot creates while executing testcases so called events.
|
|
|
|
After tbot ended with the testcase it can call event_backends,
|
|
|
|
which convert the events to different formats. more info:
|
|
|
|
|
|
|
|
https://github.com/hsdenx/tbot/blob/master/doc/README.event
|
|
|
|
|
|
|
|
demo for a event backend:
|
|
|
|
http://xeidos.ddns.net/tests/test_db_auslesen.php
|
|
|
|
|
|
|
|
- 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
|