| #!/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 "$@" |