diff options
author | Tobin C. Harding <tobin@kernel.org> | 2019-04-05 12:58:55 +1100 |
---|---|---|
committer | Shuah Khan <shuah@kernel.org> | 2019-04-08 16:44:11 -0600 |
commit | d3460527706eaacae0b24889885570d85cc0869a (patch) | |
tree | 061225c589db873ee463400bd684a4ec7b0edddb /tools/testing/selftests/kselftest_module.sh | |
parent | 6989808ee7636188cc091224bc76ab8e1696088a (diff) | |
download | blackbird-op-linux-d3460527706eaacae0b24889885570d85cc0869a.tar.gz blackbird-op-linux-d3460527706eaacae0b24889885570d85cc0869a.zip |
kselftest: Add test runner creation script
Currently if we wish to use kselftest to run tests within a kernel
module we write a small script to load/unload and do error reporting.
There are a bunch of these under tools/testing/selftests/lib/ that are
all identical except for the test name. We can reduce code duplication
and improve maintainability if we have one version of this. However
kselftest requires an executable for each test. We can move all the
script logic to a central script then have each individual test script
call the main script.
Oneliner to call kselftest_module.sh courtesy of Kees, thanks!
Add test runner creation script. Convert
tools/testing/selftests/lib/*.sh to use new test creation script.
Testing
-------
Configure kselftests for lib/ then build and boot kernel. Then run
kselftests as follows:
$ cd /path/to/kernel/tree
$ sudo make O=$output_path -C tools/testing/selftests TARGETS="lib" run_tests
and also
$ cd /path/to/kernel/tree
$ cd tools/testing/selftests
$ sudo make O=$output_path TARGETS="lib" run_tests
and also
$ cd /path/to/kernel/tree
$ cd tools/testing/selftests
$ sudo make TARGETS="lib" run_tests
Acked-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Tobin C. Harding <tobin@kernel.org>
Signed-off-by: Shuah Khan <shuah@kernel.org>
Diffstat (limited to 'tools/testing/selftests/kselftest_module.sh')
-rwxr-xr-x | tools/testing/selftests/kselftest_module.sh | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tools/testing/selftests/kselftest_module.sh b/tools/testing/selftests/kselftest_module.sh new file mode 100755 index 000000000000..18e1c7992d30 --- /dev/null +++ b/tools/testing/selftests/kselftest_module.sh @@ -0,0 +1,84 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0+ + +# +# Runs an individual test module. +# +# kselftest expects a separate executable for each test, this can be +# created by adding a script like this: +# +# #!/bin/sh +# SPDX-License-Identifier: GPL-2.0+ +# $(dirname $0)/../kselftest_module.sh "description" module_name +# +# Example: tools/testing/selftests/lib/printf.sh + +desc="" # Output prefix. +module="" # Filename (without the .ko). +args="" # modprobe arguments. + +modprobe="/sbin/modprobe" + +main() { + parse_args "$@" + assert_root + assert_have_module + run_module +} + +parse_args() { + script=${0##*/} + + if [ $# -lt 2 ]; then + echo "Usage: $script <description> <module_name> [FAIL]" + exit 1 + fi + + desc="$1" + shift || true + module="$1" + shift || true + args="$@" +} + +assert_root() { + if [ ! -w /dev ]; then + skip "please run as root" + fi +} + +assert_have_module() { + if ! $modprobe -q -n $module; then + skip "module $module is not found" + fi +} + +run_module() { + if $modprobe -q $module $args; then + $modprobe -q -r $module + say "ok" + else + fail "" + fi +} + +say() { + echo "$desc: $1" +} + + +fail() { + say "$1 [FAIL]" >&2 + exit 1 +} + +skip() { + say "$1 [SKIP]" >&2 + # Kselftest framework requirement - SKIP code is 4. + exit 4 +} + +# +# Main script +# +main "$@" |