Commit a2de57a3 authored by Ricardo B. Marlière's avatar Ricardo B. Marlière Committed by Steven Rostedt
Browse files

ktest: Honor empty per-test option overrides

A per-test override can clear an inherited default option by assigning an
empty value, but __set_test_option() still used option_defined() to decide
whether a per-test key existed. That turned an empty per-test assignment
back into "fall back to the default", so tests still could not clear
inherited settings.

For example:

  DEFAULTS
  (...)
  LOG_FILE = /tmp/ktest-empty-override.log
  CLEAR_LOG = 1
  ADD_CONFIG = /tmp/.config

  TEST_START
  TEST_TYPE = build
  BUILD_TYPE = nobuild
  ADD_CONFIG =

This would run the test with ADD_CONFIG[1] = /tmp/.config

Fix by checking whether the per-test key exists before falling back. If it
does exist but is empty, treat it as unset for that test and stop the
fallback chain there.

Cc: John Hawley <warthog9@eaglescrag.net>
Cc: Andrea Righi <arighi@nvidia.com>
Cc: Marcos Paulo de Souza <mpdesouza@suse.com>
Cc: Matthieu Baerts <matttbe@kernel.org>
Cc: Fernando Fernandez Mancera <fmancera@suse.de>
Cc: Pedro Falcato <pfalcato@suse.de>
Link: https://patch.msgid.link/20260307-ktest-fixes-v1-4-565d412f4925@suse.com


Fixes: 22c37a9a ("ktest: Allow tests to undefine default options")
Signed-off-by: default avatarRicardo B. Marlière <rbm@suse.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent a2706c6c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -4191,7 +4191,8 @@ sub __set_test_option {

    my $option = "$name\[$i\]";

    if (option_defined($option)) {
    if (exists($opt{$option})) {
	return undef if (!option_defined($option));
	return $opt{$option};
    }

@@ -4199,7 +4200,8 @@ sub __set_test_option {
	if ($i >= $test &&
	    $i < $test + $repeat_tests{$test}) {
	    $option = "$name\[$test\]";
	    if (option_defined($option)) {
	    if (exists($opt{$option})) {
		return undef if (!option_defined($option));
		return $opt{$option};
	    }
	}