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