Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) #!/bin/bash
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) # Copyright (C) 2017 Luis R. Rodriguez <mcgrof@kernel.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) # This program is free software; you can redistribute it and/or modify it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) # under the terms of the GNU General Public License as published by the Free
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) # Software Foundation; either version 2 of the License, or at your option any
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) # later version; or, when distributed separately from the Linux kernel or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) # when incorporated into other software packages, subject to the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) # license:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) # This program is free software; you can redistribute it and/or modify it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) # under the terms of copyleft-next (version 0.3.1 or later) as published
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) # at http://copyleft-next.org/.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) # This is a stress test script for kmod, the kernel module loader. It uses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) # test_kmod which exposes a series of knobs for the API for us so we can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) # tweak each test in userspace rather than in kernelspace.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) # The way kmod works is it uses the kernel's usermode helper API to eventually
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) # call /sbin/modprobe. It has a limit of the number of concurrent calls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) # possible. The kernel interface to load modules is request_module(), however
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) # mount uses get_fs_type(). Both behave slightly differently, but the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) # differences are important enough to test each call separately. For this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) # reason test_kmod starts by providing tests for both calls.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) # The test driver test_kmod assumes a series of defaults which you can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) # override by exporting to your environment prior running this script.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) # For instance this script assumes you do not have xfs loaded upon boot.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) # If this is false, export DEFAULT_KMOD_FS="ext4" prior to running this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) # script if the filesystem module you don't have loaded upon bootup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) # is ext4 instead. Refer to allow_user_defaults() for a list of user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) # override variables possible.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) # You'll want at least 4 GiB of RAM to expect to run these tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) # without running out of memory on them. For other requirements refer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) # to test_reqs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) set -e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) TEST_NAME="kmod"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) TEST_DRIVER="test_${TEST_NAME}"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) TEST_DIR=$(dirname $0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) # This represents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) # TEST_ID:TEST_COUNT:ENABLED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) # TEST_ID: is the test id number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) # TEST_COUNT: number of times we should run the test
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) # ENABLED: 1 if enabled, 0 otherwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) # Once these are enabled please leave them as-is. Write your own test,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) # we have tons of space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) ALL_TESTS="0001:3:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) ALL_TESTS="$ALL_TESTS 0002:3:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) ALL_TESTS="$ALL_TESTS 0003:1:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) ALL_TESTS="$ALL_TESTS 0004:1:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) ALL_TESTS="$ALL_TESTS 0005:10:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) ALL_TESTS="$ALL_TESTS 0006:10:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) ALL_TESTS="$ALL_TESTS 0007:5:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) ALL_TESTS="$ALL_TESTS 0008:150:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) ALL_TESTS="$ALL_TESTS 0009:150:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) ALL_TESTS="$ALL_TESTS 0010:1:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) ALL_TESTS="$ALL_TESTS 0011:1:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) ALL_TESTS="$ALL_TESTS 0012:1:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) ALL_TESTS="$ALL_TESTS 0013:1:1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) # Kselftest framework requirement - SKIP code is 4.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) ksft_skip=4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) test_modprobe()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)        if [ ! -d $DIR ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75)                echo "$0: $DIR not present" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76)                echo "You must have the following enabled in your kernel:" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)                cat $TEST_DIR/config >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)                exit $ksft_skip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79)        fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) function allow_user_defaults()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	if [ -z $DEFAULT_KMOD_DRIVER ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 		DEFAULT_KMOD_DRIVER="test_module"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	if [ -z $DEFAULT_KMOD_FS ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 		DEFAULT_KMOD_FS="xfs"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	if [ -z $PROC_DIR ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 		PROC_DIR="/proc/sys/kernel/"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	if [ -z $MODPROBE_LIMIT ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 		MODPROBE_LIMIT=50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	if [ -z $DIR ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		DIR="/sys/devices/virtual/misc/${TEST_DRIVER}0/"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	if [ -z $DEFAULT_NUM_TESTS ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 		DEFAULT_NUM_TESTS=150
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	MODPROBE_LIMIT_FILE="${PROC_DIR}/kmod-limit"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) test_reqs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	if ! which modprobe 2> /dev/null > /dev/null; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 		echo "$0: You need modprobe installed" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 		exit $ksft_skip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	if ! which kmod 2> /dev/null > /dev/null; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 		echo "$0: You need kmod installed" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 		exit $ksft_skip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	# kmod 19 has a bad bug where it returns 0 when modprobe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	# gets called *even* if the module was not loaded due to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	# some bad heuristics. For details see:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	# A work around is possible in-kernel but its rather
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	# complex.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	KMOD_VERSION=$(kmod --version | awk '{print $3}')
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	if [[ $KMOD_VERSION  -le 19 ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 		echo "$0: You need at least kmod 20" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 		echo "kmod <= 19 is buggy, for details see:" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 		echo "https://git.kernel.org/cgit/utils/kernel/kmod/kmod.git/commit/libkmod/libkmod-module.c?id=fd44a98ae2eb5eb32161088954ab21e58e19dfc4" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 		exit $ksft_skip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	uid=$(id -u)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	if [ $uid -ne 0 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 		echo $msg must be run as root >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 		exit $ksft_skip
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) function load_req_mod()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	trap "test_modprobe" EXIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	if [ ! -d $DIR ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 		# Alanis: "Oh isn't it ironic?"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 		modprobe $TEST_DRIVER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) test_finish()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	echo "$MODPROBE" > /proc/sys/kernel/modprobe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	echo "Test completed"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) errno_name_to_val()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	case "$1" in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	# kmod calls modprobe and upon of a module not found
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	# modprobe returns just 1... However in the kernel we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	# *sometimes* see 256...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	MODULE_NOT_FOUND)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 		echo 256;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	SUCCESS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 		echo 0;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	-EPERM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 		echo -1;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	-ENOENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 		echo -2;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	-EINVAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 		echo -22;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	-ERR_ANY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 		echo -123456;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 		echo invalid;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) errno_val_to_name()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	case "$1" in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 		echo MODULE_NOT_FOUND;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 		echo SUCCESS;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 		echo -EPERM;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	-2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 		echo -ENOENT;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	-22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 		echo -EINVAL;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	-123456)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 		echo -ERR_ANY;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	*)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		echo invalid;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	esac
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) config_set_test_case_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	if ! echo -n 1 >$DIR/config_test_case; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 		echo "$0: Unable to set to test case to driver" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) config_set_test_case_fs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	if ! echo -n 2 >$DIR/config_test_case; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 		echo "$0: Unable to set to test case to fs" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) config_num_threads()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	if ! echo -n $1 >$DIR/config_num_threads; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 		echo "$0: Unable to set to number of threads" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) config_get_modprobe_limit()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	if [[ -f ${MODPROBE_LIMIT_FILE} ]] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 		MODPROBE_LIMIT=$(cat $MODPROBE_LIMIT_FILE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	echo $MODPROBE_LIMIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) config_num_thread_limit_extra()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	MODPROBE_LIMIT=$(config_get_modprobe_limit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	let EXTRA_LIMIT=$MODPROBE_LIMIT+$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	config_num_threads $EXTRA_LIMIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) # For special characters use printf directly,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) # refer to kmod_test_0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) config_set_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	if ! echo -n $1 >$DIR/config_test_driver; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 		echo "$0: Unable to set driver" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) config_set_fs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	if ! echo -n $1 >$DIR/config_test_fs; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 		echo "$0: Unable to set driver" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) config_get_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	cat $DIR/config_test_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) config_get_test_result()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	cat $DIR/test_result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) config_reset()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	if ! echo -n "1" >"$DIR"/reset; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 		echo "$0: reset should have worked" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) config_show_config()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	echo "----------------------------------------------------"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	cat "$DIR"/config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	echo "----------------------------------------------------"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) config_trigger()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	if ! echo -n "1" >"$DIR"/trigger_config 2>/dev/null; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 		echo "$1: FAIL - loading should have worked"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 		config_show_config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	echo "$1: OK! - loading kmod test"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) config_trigger_want_fail()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	if echo "1" > $DIR/trigger_config 2>/dev/null; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 		echo "$1: FAIL - test case was expected to fail"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 		config_show_config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	echo "$1: OK! - kmod test case failed as expected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) config_expect_result()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	RC=$(config_get_test_result)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	RC_NAME=$(errno_val_to_name $RC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	ERRNO_NAME=$2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 	ERRNO=$(errno_name_to_val $ERRNO_NAME)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	if [[ $ERRNO_NAME = "-ERR_ANY" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 		if [[ $RC -ge 0 ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 			echo "$1: FAIL, test expects $ERRNO_NAME - got $RC_NAME ($RC)" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 			config_show_config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 			exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 		fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	elif [[ $RC != $ERRNO ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 		echo "$1: FAIL, test expects $ERRNO_NAME ($ERRNO) - got $RC_NAME ($RC)" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 		config_show_config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	echo "$1: OK! - Return value: $RC ($RC_NAME), expected $ERRNO_NAME"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) kmod_defaults_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	config_reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	modprobe -r $DEFAULT_KMOD_DRIVER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	config_set_driver $DEFAULT_KMOD_DRIVER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) kmod_defaults_fs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	config_reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	modprobe -r $DEFAULT_KMOD_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	config_set_fs $DEFAULT_KMOD_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	config_set_test_case_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) kmod_test_0001_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	NAME='\000'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	kmod_defaults_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	config_num_threads 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	printf $NAME >"$DIR"/config_test_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	config_expect_result ${FUNCNAME[0]} MODULE_NOT_FOUND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) kmod_test_0001_fs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	NAME='\000'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	kmod_defaults_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	config_num_threads 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	printf $NAME >"$DIR"/config_test_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	config_expect_result ${FUNCNAME[0]} -EINVAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) kmod_test_0001()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	kmod_test_0001_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	kmod_test_0001_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) kmod_test_0002_driver()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	NAME="nope-$DEFAULT_KMOD_DRIVER"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	kmod_defaults_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	config_set_driver $NAME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	config_num_threads 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	config_expect_result ${FUNCNAME[0]} MODULE_NOT_FOUND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) kmod_test_0002_fs()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	NAME="nope-$DEFAULT_KMOD_FS"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	kmod_defaults_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	config_set_fs $NAME
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	config_expect_result ${FUNCNAME[0]} -EINVAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) kmod_test_0002()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	kmod_test_0002_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	kmod_test_0002_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) kmod_test_0003()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	kmod_defaults_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	config_num_threads 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	config_expect_result ${FUNCNAME[0]} SUCCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) kmod_test_0004()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	kmod_defaults_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	config_num_threads 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	config_expect_result ${FUNCNAME[0]} SUCCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) kmod_test_0005()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	kmod_defaults_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 	config_expect_result ${FUNCNAME[0]} SUCCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) kmod_test_0006()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	kmod_defaults_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 	config_expect_result ${FUNCNAME[0]} SUCCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) kmod_test_0007()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	kmod_test_0005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	kmod_test_0006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) kmod_test_0008()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	kmod_defaults_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	MODPROBE_LIMIT=$(config_get_modprobe_limit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	let EXTRA=$MODPROBE_LIMIT/6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 	config_num_thread_limit_extra $EXTRA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	config_expect_result ${FUNCNAME[0]} SUCCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) kmod_test_0009()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	kmod_defaults_fs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	MODPROBE_LIMIT=$(config_get_modprobe_limit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	let EXTRA=$MODPROBE_LIMIT/4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	config_num_thread_limit_extra $EXTRA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	config_expect_result ${FUNCNAME[0]} SUCCESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) kmod_test_0010()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	kmod_defaults_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	config_num_threads 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	echo "/KMOD_TEST_NONEXISTENT" > /proc/sys/kernel/modprobe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 	config_expect_result ${FUNCNAME[0]} -ENOENT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	echo "$MODPROBE" > /proc/sys/kernel/modprobe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) kmod_test_0011()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	kmod_defaults_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	config_num_threads 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	# This causes the kernel to not even try executing modprobe.  The error
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	# code is still -ENOENT like when modprobe doesn't exist, so we can't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	# easily test for the exact difference.  But this still is a useful test
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	# since there was a bug where request_module() returned 0 in this case.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	echo > /proc/sys/kernel/modprobe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	config_trigger ${FUNCNAME[0]}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	config_expect_result ${FUNCNAME[0]} -ENOENT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	echo "$MODPROBE" > /proc/sys/kernel/modprobe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) kmod_check_visibility()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	local name="$1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 	local cmd="$2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	modprobe $DEFAULT_KMOD_DRIVER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 	local priv=$(eval $cmd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	local unpriv=$(capsh --drop=CAP_SYSLOG -- -c "$cmd")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	if [ "$priv" = "$unpriv" ] || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	   [ "${priv:0:3}" = "0x0" ] || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	   [ "${unpriv:0:3}" != "0x0" ] ; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 		echo "${FUNCNAME[0]}: FAIL, $name visible to unpriv: '$priv' vs '$unpriv'" >&2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 		exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 		echo "${FUNCNAME[0]}: OK!"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) kmod_test_0012()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 	kmod_check_visibility /proc/modules \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 		"grep '^${DEFAULT_KMOD_DRIVER}\b' /proc/modules | awk '{print \$NF}'"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) kmod_test_0013()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 	kmod_check_visibility '/sys/module/*/sections/*' \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 		"cat /sys/module/${DEFAULT_KMOD_DRIVER}/sections/.*text | head -n1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) list_tests()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 	echo "Test ID list:"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 	echo "TEST_ID x NUM_TEST"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	echo "TEST_ID:   Test ID"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	echo "NUM_TESTS: Number of recommended times to run the test"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 	echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	echo "0001 x $(get_test_count 0001) - Simple test - 1 thread  for empty string"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 	echo "0002 x $(get_test_count 0002) - Simple test - 1 thread  for modules/filesystems that do not exist"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	echo "0003 x $(get_test_count 0003) - Simple test - 1 thread  for get_fs_type() only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	echo "0004 x $(get_test_count 0004) - Simple test - 2 threads for get_fs_type() only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 	echo "0005 x $(get_test_count 0005) - multithreaded tests with default setup - request_module() only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	echo "0006 x $(get_test_count 0006) - multithreaded tests with default setup - get_fs_type() only"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	echo "0007 x $(get_test_count 0007) - multithreaded tests with default setup test request_module() and get_fs_type()"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	echo "0008 x $(get_test_count 0008) - multithreaded - push kmod_concurrent over max_modprobes for request_module()"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 	echo "0009 x $(get_test_count 0009) - multithreaded - push kmod_concurrent over max_modprobes for get_fs_type()"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 	echo "0010 x $(get_test_count 0010) - test nonexistent modprobe path"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	echo "0011 x $(get_test_count 0011) - test completely disabling module autoloading"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 	echo "0012 x $(get_test_count 0012) - test /proc/modules address visibility under CAP_SYSLOG"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) 	echo "0013 x $(get_test_count 0013) - test /sys/module/*/sections/* visibility under CAP_SYSLOG"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) usage()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 	NUM_TESTS=$(grep -o ' ' <<<"$ALL_TESTS" | grep -c .)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 	let NUM_TESTS=$NUM_TESTS+1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	MAX_TEST=$(printf "%04d\n" $NUM_TESTS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	echo "Usage: $0 [ -t <4-number-digit> ] | [ -w <4-number-digit> ] |"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 	echo "		 [ -s <4-number-digit> ] | [ -c <4-number-digit> <test- count>"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 	echo "           [ all ] [ -h | --help ] [ -l ]"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	echo "Valid tests: 0001-$MAX_TEST"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	echo ""
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 	echo "    all     Runs all tests (default)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 	echo "    -t      Run test ID the number amount of times is recommended"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	echo "    -w      Watch test ID run until it runs into an error"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 	echo "    -s      Run test ID once"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 	echo "    -c      Run test ID x test-count number of times"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	echo "    -l      List all test ID list"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	echo " -h|--help  Help"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 	echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	echo "If an error every occurs execution will immediately terminate."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) 	echo "If you are adding a new test try using -w <test-ID> first to"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 	echo "make sure the test passes a series of tests."
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 	echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 	echo Example uses:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	echo "${TEST_NAME}.sh		-- executes all tests"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 	echo "${TEST_NAME}.sh -t 0008	-- Executes test ID 0008 number of times is recommended"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 	echo "${TEST_NAME}.sh -w 0008	-- Watch test ID 0008 run until an error occurs"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	echo "${TEST_NAME}.sh -s 0008	-- Run test ID 0008 once"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 	echo "${TEST_NAME}.sh -c 0008 3	-- Run test ID 0008 three times"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 	echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 	list_tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 	exit 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) function test_num()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 	re='^[0-9]+$'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 	if ! [[ $1 =~ $re ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 		usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) function get_test_data()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 	test_num $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 	local field_num=$(echo $1 | sed 's/^0*//')
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 	echo $ALL_TESTS | awk '{print $'$field_num'}'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) function get_test_count()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	TEST_DATA=$(get_test_data $1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 	LAST_TWO=${TEST_DATA#*:*}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	echo ${LAST_TWO%:*}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) function get_test_enabled()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 	TEST_DATA=$(get_test_data $1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	echo ${TEST_DATA#*:*:}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) function run_all_tests()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 	for i in $ALL_TESTS ; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 		TEST_ID=${i%:*:*}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 		ENABLED=$(get_test_enabled $TEST_ID)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 		TEST_COUNT=$(get_test_count $TEST_ID)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 		if [[ $ENABLED -eq "1" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 			test_case $TEST_ID $TEST_COUNT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 		fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 	done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) function watch_log()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 	if [ $# -ne 3 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 		clear
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	date
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 	echo "Running test: $2 - run #$1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) function watch_case()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	i=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 	while [ 1 ]; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 		if [ $# -eq 1 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 			test_num $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 			watch_log $i ${TEST_NAME}_test_$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 			${TEST_NAME}_test_$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 			watch_log $i all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 			run_all_tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 		fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 		let i=$i+1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 	done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) function test_case()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) 	NUM_TESTS=$DEFAULT_NUM_TESTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) 	if [ $# -eq 2 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) 		NUM_TESTS=$2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) 	i=0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) 	while [ $i -lt $NUM_TESTS ]; do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) 		test_num $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) 		watch_log $i ${TEST_NAME}_test_$1 noclear
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) 		RUN_TEST=${TEST_NAME}_test_$1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) 		$RUN_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) 		let i=$i+1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 	done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) function parse_args()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) 	if [ $# -eq 0 ]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 		run_all_tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 		if [[ "$1" = "all" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 			run_all_tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 		elif [[ "$1" = "-w" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 			shift
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) 			watch_case $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 		elif [[ "$1" = "-t" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 			shift
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 			test_num $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) 			test_case $1 $(get_test_count $1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 		elif [[ "$1" = "-c" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 			shift
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 			test_num $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 			test_num $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 			test_case $1 $2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 		elif [[ "$1" = "-s" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 			shift
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 			test_case $1 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 		elif [[ "$1" = "-l" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) 			list_tests
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 		elif [[ "$1" = "-h" || "$1" = "--help" ]]; then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 			usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) 			usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 		fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) test_reqs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) allow_user_defaults
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) load_req_mod
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) MODPROBE=$(</proc/sys/kernel/modprobe)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) trap "test_finish" EXIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) parse_args $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) exit 0