David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 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 "$@" |