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