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