util-linux/Documentation/howto-tests.txt

158 lines
4.1 KiB
Plaintext

util-linux regression tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~
It's expected that for each invasive change or important bugfix you will
include a test to your patch.
Compile binaries, libs, extra test programs and run the basic tests:
$ make check
Compile extra test programs only:
$ make check-programs
Note that the configure option --disable-static disables many of libmount and
libblkid unit tests.
Run all tests including tests that require root permissions:
# cd tests
# ./run.sh [options, see --help]
Alternatively using sudo and make:
$ make check-programs
$ sudo -E make check TS_OPTS="--parallel=1"
note that as root you have to manually remove output and diff directories
# rm -rf output diff
or run 'make clean' as root.
Run subset of tests:
$ cd tests
$ ./run.sh <test_directory-name>
for example:
$ ./run.sh blkid
$ ./run.sh libmount
or individual test script, for example:
$ ./ts/cal/year
The tests is possible to exclude by ./run.sh --exclude=<list> where the
<list> is blank separated test names in format "testdir/testname", for example:
$ ./run.sh --exclude="mount/move"
The --exclude is evaluated by the ./run.sh script only. See below
TS_OPT_testdir_[testscript_]fake=
environment variable which provides more powerful functionality to skip tests.
*** WARNING for root users ***
The tests touch your /etc/fstab, initialize loop devices or scsi_debug devices
if executed with root permissions.
Please, be careful and use these tests only for development and never on
production system.
fuzz targets
------------
The fuzz targets can be built and run along with the other tests (after installing
clang):
$ ./tools/config-gen fuzz
$ make check
environment variables
---------------------
TS_COMMAND
Evaluated by "make check" to override the default command (run.sh).
Example:
- build all test dependencies, but skip the actual test
$ make check TS_COMMAND="true"
TS_OPTS
Evaluated by "make check" to pass options.to run.sh (see ./run.sh --help).
Examples:
- run utmp tests only
$ make check TS_OPTS="--parallel=1 utmp"
TS_OPT_testdir_[testscript_]fake="<yes|no>"
Evaluated by any test script to skip certain tests.
Examples:
- skip all the tests within "fdisk" test-directory:
$ make check TS_OPT_fdisk_fake="yes"
- skip only "fdisk/bsd" test:
$ make check TS_OPT_fdisk_bsd_fake="yes"
- skip all "fdisk" tests except fdisk/bsd:
$ make check TS_OPT_fdisk_fake="yes" TS_OPT_fdisk_bsd_fake="no"
TS_OPT_testdir_[testscript_]known_fail="<yes|no>"
Similar usage like TS_OPT_*_fake above. "known_fail" means that the given
test will run but (negative) results will be ignored. The build log and test
diffs will still remind you about the issue.
TS_OPT_testdir_[testscript_]verbose="<yes|no>"
Set verbosity for certain tests. Similar usage like TS_OPT_*_fake above.
TS_OPT_testdir_[testscript_]memcheck="<yes|no>"
Run certain tests with valgrind. Similar usage like TS_OPT_*_fake above.
External services
-----------------
Travis CI - automatically executed for all github commits.
URL: https://travis-ci.org/karelzak/util-linux/
See .travis.yml for more details.
We require "sudo" to install additional stuff and to run the tests with
UID=0, it means that tests are executed on travis "legacy infrastructure".
lgtm CI - automatically executed security code analysis
URL: https://lgtm.com/projects/g/karelzak/util-linux/
Coverity Scan
URL: https://scan.coverity.com/projects/karelzak-util-linux
Fossies codespell report
URL: https://fossies.org/linux/test/util-linux-master.tar.gz/codespell.html
OSS-Fuzz
URL: https://google.github.io/oss-fuzz/
URL: https://oss-fuzz-build-logs.storage.googleapis.com/index.html#util-linux
URL: https://oss-fuzz.com/coverage-report/job/libfuzzer_asan_util-linux/latest
CIFuzz
URL: https://google.github.io/oss-fuzz/getting-started/continuous-integration/
URL: https://github.com/karelzak/util-linux/actions?query=workflow%3ACIFuzz