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