xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/kselftest/module.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
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