1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0+ 3 4# 5# Runs an individual test module. 6# 7# kselftest expects a separate executable for each test, this can be 8# created by adding a script like this: 9# 10# #!/bin/sh 11# SPDX-License-Identifier: GPL-2.0+ 12# $(dirname $0)/../kselftest/module.sh "description" module_name 13# 14# Example: tools/testing/selftests/lib/printf.sh 15 16desc="" # Output prefix. 17module="" # Filename (without the .ko). 18args="" # modprobe arguments. 19 20modprobe="/sbin/modprobe" 21 22main() { 23 parse_args "$@" 24 assert_root 25 assert_have_module 26 run_module 27} 28 29parse_args() { 30 script=${0##*/} 31 32 if [ $# -lt 2 ]; then 33 echo "Usage: $script <description> <module_name> [FAIL]" 34 exit 1 35 fi 36 37 desc="$1" 38 shift || true 39 module="$1" 40 shift || true 41 args="$@" 42} 43 44assert_root() { 45 if [ ! -w /dev ]; then 46 skip "please run as root" 47 fi 48} 49 50assert_have_module() { 51 if ! $modprobe -q -n $module; then 52 skip "module $module is not found" 53 fi 54} 55 56run_module() { 57 if $modprobe -q $module $args; then 58 $modprobe -q -r $module 59 say "ok" 60 else 61 fail "" 62 fi 63} 64 65say() { 66 echo "$desc: $1" 67} 68 69 70fail() { 71 say "$1 [FAIL]" >&2 72 exit 1 73} 74 75skip() { 76 say "$1 [SKIP]" >&2 77 # Kselftest framework requirement - SKIP code is 4. 78 exit 4 79} 80 81# 82# Main script 83# 84main "$@" 85