162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci# 562306a36Sopenharmony_ci# Runs an individual test module. 662306a36Sopenharmony_ci# 762306a36Sopenharmony_ci# kselftest expects a separate executable for each test, this can be 862306a36Sopenharmony_ci# created by adding a script like this: 962306a36Sopenharmony_ci# 1062306a36Sopenharmony_ci# #!/bin/sh 1162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ 1262306a36Sopenharmony_ci# $(dirname $0)/../kselftest/module.sh "description" module_name 1362306a36Sopenharmony_ci# 1462306a36Sopenharmony_ci# Example: tools/testing/selftests/lib/printf.sh 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cidesc="" # Output prefix. 1762306a36Sopenharmony_cimodule="" # Filename (without the .ko). 1862306a36Sopenharmony_ciargs="" # modprobe arguments. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cimodprobe="/sbin/modprobe" 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cimain() { 2362306a36Sopenharmony_ci parse_args "$@" 2462306a36Sopenharmony_ci assert_root 2562306a36Sopenharmony_ci assert_have_module 2662306a36Sopenharmony_ci run_module 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciparse_args() { 3062306a36Sopenharmony_ci script=${0##*/} 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci if [ $# -lt 2 ]; then 3362306a36Sopenharmony_ci echo "Usage: $script <description> <module_name> [FAIL]" 3462306a36Sopenharmony_ci exit 1 3562306a36Sopenharmony_ci fi 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci desc="$1" 3862306a36Sopenharmony_ci shift || true 3962306a36Sopenharmony_ci module="$1" 4062306a36Sopenharmony_ci shift || true 4162306a36Sopenharmony_ci args="$@" 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ciassert_root() { 4562306a36Sopenharmony_ci if [ ! -w /dev ]; then 4662306a36Sopenharmony_ci skip "please run as root" 4762306a36Sopenharmony_ci fi 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciassert_have_module() { 5162306a36Sopenharmony_ci if ! $modprobe -q -n $module; then 5262306a36Sopenharmony_ci skip "module $module is not found" 5362306a36Sopenharmony_ci fi 5462306a36Sopenharmony_ci} 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_cirun_module() { 5762306a36Sopenharmony_ci if $modprobe -q $module $args; then 5862306a36Sopenharmony_ci $modprobe -q -r $module 5962306a36Sopenharmony_ci say "ok" 6062306a36Sopenharmony_ci else 6162306a36Sopenharmony_ci fail "" 6262306a36Sopenharmony_ci fi 6362306a36Sopenharmony_ci} 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cisay() { 6662306a36Sopenharmony_ci echo "$desc: $1" 6762306a36Sopenharmony_ci} 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cifail() { 7162306a36Sopenharmony_ci say "$1 [FAIL]" >&2 7262306a36Sopenharmony_ci exit 1 7362306a36Sopenharmony_ci} 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciskip() { 7662306a36Sopenharmony_ci say "$1 [SKIP]" >&2 7762306a36Sopenharmony_ci # Kselftest framework requirement - SKIP code is 4. 7862306a36Sopenharmony_ci exit 4 7962306a36Sopenharmony_ci} 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci# 8262306a36Sopenharmony_ci# Main script 8362306a36Sopenharmony_ci# 8462306a36Sopenharmony_cimain "$@" 85