Test Definition Project
The Test Definition Project is consists of work to categorize and harmonize the attribute of open source tests, so that tests and test artifacts can more easily be shared between different test projects.
Tim Bird is working on a "Test Definition Standards" document, to be presented and discussed at various meetings in the Fall of 2019.
This page has information that is being retained on this wiki as resources for this work.
- 1 Presentations
- 2 Resources
- 3 Test definition elements
- 4 Things that are NOT test part of a test definition
- 5 element expression
- 6 APIs
- See Harmonizing Open Source test definitions by Tim Bird, at Linaro Connect 2019 in Bangkok, Thailand, April 2019
Test definition elements
- Information about a test
- Output format
- Test variables
- Results analysis
- Visualization control
For individual elements of the above:
- field or item name
- language (C, Python, sh, etc.)
- file format (json, xml, etc.)
- allowed values
- including APIs, for code items
Information about a test (meta-data)
Also known as test meta-data. Does not affect the test execution, but provides information about it.
- test program version
- test wrapper version
- Test format version
- Package manifest
- required machine attributes
- (specific hardware - for scheduling)
- network, bus, device
- required kernel attributes
- config value (= kernel feature)
- kernel module
- required distribution attributes
- distro version
- logging system
- init system
- installed package
- installed program
- installed file
- test environment
- root permissions
- file system type
Things that can be installed or modified
- kernel configuration (eg. kselftest config fragments)
- how does each test handle skiplists
- Tests that are know to handle skiplists:
- xfstests also has a mechanism for selecting individual tests (which Fuego does for LTP with LTP_one_test)
- (does kselftest? - they have a skip mechanism based on CONFIG fragments, is it generalized)
expected duration (timeout)
Expected duration is something a test needs to communicate to the test harness (test manager and scheduler), so that the harness can automatically detect if the test or machine has hung.
The difficulty here is that actual duration may be affected by a lot of factors. So coming up with a value that will work in all circumstances is difficult.
Some systems, like Jenkins, measure the duration of previous runs, but (to my knowledge), do not use that information to stop an instance of a test.
- source location
- build instructions
- run instructions
- setup instructions
- teardown/cleanup instructions
The test library is a set of functions or capabilities that are available to a test to perform utility operations on a target device.
A category of library functions is a set of programs that a test may utilize on a target, to perform operations.
Fuego has a list of core programs that it tries to constrain itself to. All other programs must be specified in as dependencies in the test_pre_check function, or in NEED_ variables.
Here is Fuego's minimal Linux command list:
- cat, df, find, free, grep, head, (logger or logread), mkdir, mount, ps, rm, rmdir, sync, tail, tee, touch, true, umount, uname, uptime, xargs, [
- /sbin/reboot, /sbin/true, /sbin/logread
Depending on the distribution, certain files must be present:
- /var/log/syslog (optional)
Certain psuedo-files are required by the Fuego core:
- /proc/interrupts, /proc/sys/vm/drop_caches, /proc/$$/oom_score_adj
Certain commands have required minimum arguments that must be supported:
- mkdir -p, rm -rf, grep -Fv
One program to consider for characterizing the hardware on a platform is 'lshw'. This may be something that a test manager runs, to characterize a DUT (the information might be used for scheduling, or test selection, or to modify the parameters to a test). Or, it could be something a test itself runs, to alter its own execution.
- results output API
- pass criteria
- ignore lists
- pass/fail counts
- expected values
- key fields
- chart types
Things that are NOT test part of a test definition
- build artifact
- results artifact
- board scheduling API
- lab management API (unless test performs board reboot, provision, hardware control, etc.)
- trigger API
- scheduling API
- file formats
- file names
- data format
- API between test and test framework
- API between test and target system
- API between test and external equipment
What languages are supported?
There are candidates for libraries that libraries that have test APIs:
- beakerlib (Beaker)
- fuego_board_function_lib.sh (Fuego)
- sh_test_lib (LAVA? or LKFT?)