Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3460527 authored by Tobin C. Harding's avatar Tobin C. Harding Committed by Shuah Khan
Browse files

kselftest: Add test runner creation script



Currently if we wish to use kselftest to run tests within a kernel
module we write a small script to load/unload and do error reporting.
There are a bunch of these under tools/testing/selftests/lib/ that are
all identical except for the test name.  We can reduce code duplication
and improve maintainability if we have one version of this.  However
kselftest requires an executable for each test.  We can move all the
script logic to a central script then have each individual test script
call the main script.

Oneliner to call kselftest_module.sh courtesy of Kees, thanks!

Add test runner creation script.  Convert
tools/testing/selftests/lib/*.sh to use new test creation script.

Testing
-------

Configure kselftests for lib/ then build and boot kernel.  Then run
kselftests as follows:

  $ cd /path/to/kernel/tree
  $ sudo make O=$output_path -C tools/testing/selftests TARGETS="lib" run_tests

and also

  $ cd /path/to/kernel/tree
  $ cd tools/testing/selftests
  $ sudo make O=$output_path TARGETS="lib" run_tests

and also

  $ cd /path/to/kernel/tree
  $ cd tools/testing/selftests
  $ sudo make TARGETS="lib" run_tests

Acked-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarTobin C. Harding <tobin@kernel.org>
Signed-off-by: default avatarShuah Khan <shuah@kernel.org>
parent 6989808e
Loading
Loading
Loading
Loading
+84 −0
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0+

#
# Runs an individual test module.
#
# kselftest expects a separate executable for each test, this can be
# created by adding a script like this:
#
#   #!/bin/sh
#   SPDX-License-Identifier: GPL-2.0+
#   $(dirname $0)/../kselftest_module.sh "description" module_name
#
# Example: tools/testing/selftests/lib/printf.sh

desc=""				# Output prefix.
module=""			# Filename (without the .ko).
args=""				# modprobe arguments.

modprobe="/sbin/modprobe"

main() {
    parse_args "$@"
    assert_root
    assert_have_module
    run_module
}

parse_args() {
    script=${0##*/}

    if [ $# -lt 2 ]; then
	echo "Usage: $script <description> <module_name> [FAIL]"
	exit 1
    fi

    desc="$1"
    shift || true
    module="$1"
    shift || true
    args="$@"
}

assert_root() {
    if [ ! -w /dev ]; then
	skip "please run as root"
    fi
}

assert_have_module() {
    if ! $modprobe -q -n $module; then
	skip "module $module is not found"
    fi
}

run_module() {
    if $modprobe -q $module $args; then
	$modprobe -q -r $module
	say "ok"
    else
	fail ""
    fi
}

say() {
    echo "$desc: $1"
}


fail() {
    say "$1 [FAIL]" >&2
    exit 1
}

skip() {
    say "$1 [SKIP]" >&2
    # Kselftest framework requirement - SKIP code is 4.
    exit 4
}

#
# Main script
#
main "$@"
+1 −17
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0

# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4

# Runs bitmap infrastructure tests using test_bitmap kernel module
if ! /sbin/modprobe -q -n test_bitmap; then
	echo "bitmap: module test_bitmap is not found [SKIP]"
	exit $ksft_skip
fi

if /sbin/modprobe -q test_bitmap; then
	/sbin/modprobe -q -r test_bitmap
	echo "bitmap: ok"
else
	echo "bitmap: [FAIL]"
	exit 1
fi
$(dirname $0)/../kselftest_module.sh "bitmap" test_bitmap
+1 −16
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Checks fast/slow prime_number generation for inconsistencies

# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4

if ! /sbin/modprobe -q -n prime_numbers; then
	echo "prime_numbers: module prime_numbers is not found [SKIP]"
	exit $ksft_skip
fi

if /sbin/modprobe -q prime_numbers selftest=65536; then
	/sbin/modprobe -q -r prime_numbers
	echo "prime_numbers: ok"
else
	echo "prime_numbers: [FAIL]"
	exit 1
fi
$(dirname $0)/../kselftest_module.sh "prime numbers" prime_numbers selftest=65536
+2 −17
Original line number Diff line number Diff line
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Runs printf infrastructure using test_printf kernel module

# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4

if ! /sbin/modprobe -q -n test_printf; then
	echo "printf: module test_printf is not found [SKIP]"
	exit $ksft_skip
fi

if /sbin/modprobe -q test_printf; then
	/sbin/modprobe -q -r test_printf
	echo "printf: ok"
else
	echo "printf: [FAIL]"
	exit 1
fi
# Tests the printf infrastructure using test_printf kernel module.
$(dirname $0)/../kselftest_module.sh "printf" test_printf