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>
This commit is contained in:
parent
6989808ee7
commit
d346052770
|
@ -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 "$@"
|
|
@ -1,19 +1,3 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
|
||||
# Runs bitmap infrastructure tests using test_bitmap kernel module
|
||||
if ! /sbin/modprobe -q -n test_bitmap; then
|
||||
echo "bitmap: module test_bitmap is not found [SKIP]"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
if /sbin/modprobe -q test_bitmap; then
|
||||
/sbin/modprobe -q -r test_bitmap
|
||||
echo "bitmap: ok"
|
||||
else
|
||||
echo "bitmap: [FAIL]"
|
||||
exit 1
|
||||
fi
|
||||
$(dirname $0)/../kselftest_module.sh "bitmap" test_bitmap
|
||||
|
|
|
@ -1,19 +1,4 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Checks fast/slow prime_number generation for inconsistencies
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
|
||||
if ! /sbin/modprobe -q -n prime_numbers; then
|
||||
echo "prime_numbers: module prime_numbers is not found [SKIP]"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
if /sbin/modprobe -q prime_numbers selftest=65536; then
|
||||
/sbin/modprobe -q -r prime_numbers
|
||||
echo "prime_numbers: ok"
|
||||
else
|
||||
echo "prime_numbers: [FAIL]"
|
||||
exit 1
|
||||
fi
|
||||
$(dirname $0)/../kselftest_module.sh "prime numbers" prime_numbers selftest=65536
|
||||
|
|
|
@ -1,19 +1,4 @@
|
|||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# Runs printf infrastructure using test_printf kernel module
|
||||
|
||||
# Kselftest framework requirement - SKIP code is 4.
|
||||
ksft_skip=4
|
||||
|
||||
if ! /sbin/modprobe -q -n test_printf; then
|
||||
echo "printf: module test_printf is not found [SKIP]"
|
||||
exit $ksft_skip
|
||||
fi
|
||||
|
||||
if /sbin/modprobe -q test_printf; then
|
||||
/sbin/modprobe -q -r test_printf
|
||||
echo "printf: ok"
|
||||
else
|
||||
echo "printf: [FAIL]"
|
||||
exit 1
|
||||
fi
|
||||
# Tests the printf infrastructure using test_printf kernel module.
|
||||
$(dirname $0)/../kselftest_module.sh "printf" test_printf
|
||||
|
|
Loading…
Reference in New Issue