| #!/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() { |
| echo "Checking for $module" |
| if ! $modprobe -n $module; then |
| skip "module $module is not found" |
| fi |
| } |
| |
| run_module() { |
| if $modprobe $module $args; then |
| $modprobe -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 "$@" |