Linux-libre 5.4.48-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / kselftest_module.sh
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
16 desc=""                         # Output prefix.
17 module=""                       # Filename (without the .ko).
18 args=""                         # modprobe arguments.
19
20 modprobe="/sbin/modprobe"
21
22 main() {
23     parse_args "$@"
24     assert_root
25     assert_have_module
26     run_module
27 }
28
29 parse_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
44 assert_root() {
45     if [ ! -w /dev ]; then
46         skip "please run as root"
47     fi
48 }
49
50 assert_have_module() {
51     if ! $modprobe -q -n $module; then
52         skip "module $module is not found"
53     fi
54 }
55
56 run_module() {
57     if $modprobe -q $module $args; then
58         $modprobe -q -r $module
59         say "ok"
60     else
61         fail ""
62     fi
63 }
64
65 say() {
66     echo "$desc: $1"
67 }
68
69
70 fail() {
71     say "$1 [FAIL]" >&2
72     exit 1
73 }
74
75 skip() {
76     say "$1 [SKIP]" >&2
77     # Kselftest framework requirement - SKIP code is 4.
78     exit 4
79 }
80
81 #
82 # Main script
83 #
84 main "$@"