Skip to content

Commit

Permalink
selftests: allow runners to override the timeout
Browse files Browse the repository at this point in the history
The default timeout for selftests tests is 45 seconds. Although
we already have 13 settings for tests of about 96 sefltests which
use a timeout greater than this, we want to try to avoid encouraging
more tests to forcing a higher test timeout as selftests strives to
run all tests quickly. Selftests also uses the timeout as a non-fatal
error. Only tests runners which have control over a system would know
if to treat a timeout as fatal or not.

To help with all this:

  o Enhance documentation to avoid future increases of insane timeouts
  o Add the option to allow overriding the default timeout with test
    runners with a command line option

Suggested-by: Shuah Khan <[email protected]>
Signed-off-by: Luis Chamberlain <[email protected]>
Reviewed-by: Muhammad Usama Anjum <[email protected]>
Tested-by:Muhammad Usama Anjum <[email protected]>
Signed-off-by: Shuah Khan <[email protected]>
  • Loading branch information
mcgrof authored and shuahkh committed Jun 12, 2023
1 parent 1977ece commit f6a0121
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
22 changes: 22 additions & 0 deletions Documentation/dev-tools/kselftest.rst
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,28 @@ the `-t` option for specific single tests. Either can be used multiple times::

For other features see the script usage output, seen with the `-h` option.

Timeout for selftests
=====================

Selftests are designed to be quick and so a default timeout is used of 45
seconds for each test. Tests can override the default timeout by adding
a settings file in their directory and set a timeout variable there to the
configured a desired upper timeout for the test. Only a few tests override
the timeout with a value higher than 45 seconds, selftests strives to keep
it that way. Timeouts in selftests are not considered fatal because the
system under which a test runs may change and this can also modify the
expected time it takes to run a test. If you have control over the systems
which will run the tests you can configure a test runner on those systems to
use a greater or lower timeout on the command line as with the `-o` or
the `--override-timeout` argument. For example to use 165 seconds instead
one would use:

$ ./run_kselftest.sh --override-timeout 165

You can look at the TAP output to see if you ran into the timeout. Test
runners which know a test must run under a specific time can then optionally
treat these timeouts then as fatal.

Packaging selftests
===================

Expand Down
11 changes: 10 additions & 1 deletion tools/testing/selftests/kselftest/runner.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ export logfile=/dev/stdout
export per_test_logging=

# Defaults for "settings" file fields:
# "timeout" how many seconds to let each test run before failing.
# "timeout" how many seconds to let each test run before running
# over our soft timeout limit.
export kselftest_default_timeout=45

# There isn't a shell-agnostic way to find the path of a sourced file,
Expand Down Expand Up @@ -90,6 +91,14 @@ run_one()
done < "$settings"
fi

# Command line timeout overrides the settings file
if [ -n "$kselftest_override_timeout" ]; then
kselftest_timeout="$kselftest_override_timeout"
echo "# overriding timeout to $kselftest_timeout" >> "$logfile"
else
echo "# timeout set to $kselftest_timeout" >> "$logfile"
fi

TEST_HDR_MSG="selftests: $DIR: $BASENAME_TEST"
echo "# $TEST_HDR_MSG"
if [ ! -e "$TEST" ]; then
Expand Down
5 changes: 5 additions & 0 deletions tools/testing/selftests/run_kselftest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ Usage: $0 [OPTIONS]
-l | --list List the available collection:test entries
-d | --dry-run Don't actually run any tests
-h | --help Show this usage info
-o | --override-timeout Number of seconds after which we timeout
EOF
exit $1
}

COLLECTIONS=""
TESTS=""
dryrun=""
kselftest_override_timeout=""
while true; do
case "$1" in
-s | --summary)
Expand All @@ -51,6 +53,9 @@ while true; do
-d | --dry-run)
dryrun="echo"
shift ;;
-o | --override-timeout)
kselftest_override_timeout="$2"
shift 2 ;;
-h | --help)
usage 0 ;;
"")
Expand Down

0 comments on commit f6a0121

Please sign in to comment.