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