]> git.ipfire.org Git - thirdparty/linux.git/commit
selftests: drv-net: add ability to schedule cleanup with defer()
authorJakub Kicinski <kuba@kernel.org>
Thu, 27 Jun 2024 18:55:01 +0000 (11:55 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 29 Jun 2024 01:39:39 +0000 (18:39 -0700)
commit8510801a9dbd9f0d64079d7061d3452efc752550
treea17ac2873b55ec5b1668bffe830950cd811c55fb
parent147997afaad0ce4835233e7fddacc9e2be7eb087
selftests: drv-net: add ability to schedule cleanup with defer()

This implements what I was describing in [1]. When writing a test
author can schedule cleanup / undo actions right after the creation
completes, eg:

  cmd("touch /tmp/file")
  defer(cmd, "rm /tmp/file")

defer() takes the function name as first argument, and the rest are
arguments for that function. defer()red functions are called in
inverse order after test exits. It's also possible to capture them
and execute earlier (in which case they get automatically de-queued).

  undo = defer(cmd, "rm /tmp/file")
  # ... some unsafe code ...
  undo.exec()

As a nice safety all exceptions from defer()ed calls are captured,
printed, and ignored (they do make the test fail, however).
This addresses the common problem of exceptions in cleanup paths
often being unhandled, leading to potential leaks.

There is a global action queue, flushed by ksft_run(). We could support
function level defers too, I guess, but there's no immediate need..

Link: https://lore.kernel.org/all/877cedb2ki.fsf@nvidia.com/
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Link: https://patch.msgid.link/20240627185502.3069139-3-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/lib/py/ksft.py
tools/testing/selftests/net/lib/py/utils.py