From: "Ricardo B. Marlière" <rbm@suse.com>
To: Steven Rostedt <rostedt@goodmis.org>,
John Hawley <warthog9@eaglescrag.net>
Cc: "Andrea Righi" <arighi@nvidia.com>,
"Marcos Paulo de Souza" <mpdesouza@suse.com>,
"Matthieu Baerts" <matttbe@kernel.org>,
"Fernando Fernandez Mancera" <fmancera@suse.de>,
"Pedro Falcato" <pfalcato@suse.de>,
linux-kernel@vger.kernel.org,
"Steven Rostedt" <srostedt@redhat.com>,
"Ricardo B. Marlière" <rbm@suse.com>
Subject: [PATCH 9/9] ktest: Add a --dry-run mode
Date: Sat, 07 Mar 2026 19:08:04 -0300 [thread overview]
Message-ID: <20260307-ktest-fixes-v1-9-565d412f4925@suse.com> (raw)
In-Reply-To: <20260307-ktest-fixes-v1-0-565d412f4925@suse.com>
When working on a ktest configuration, it is often useful to inspect the
final option values after includes, defaults, per-test overrides, and
variable expansion have been applied, without actually starting a test run.
Add a --dry-run option that reads the configuration, prints the test
preamble using resolved option values, and exits before opening LOG_FILE or
executing any test logic.
This is useful for debugging ktest configurations and for scripts that need
to validate the final resolved settings without triggering side effects.
Signed-off-by: Ricardo B. Marlière <rbm@suse.com>
---
tools/testing/ktest/ktest.pl | 89 +++++++++++++++++++++++++++++++-------------
1 file changed, 63 insertions(+), 26 deletions(-)
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
index 8962857ce4a6..de99b82d16ad 100755
--- a/tools/testing/ktest/ktest.pl
+++ b/tools/testing/ktest/ktest.pl
@@ -85,6 +85,7 @@ my %default = (
);
my $test_log_start = 0;
+my $dry_run = 0;
my $ktest_config = "ktest.conf";
my $version;
@@ -587,7 +588,7 @@ sub end_monitor;
sub wait_for_monitor;
sub _logit {
- if (defined($opt{"LOG_FILE"})) {
+ if (defined($opt{"LOG_FILE"}) && defined(fileno(LOG))) {
print LOG @_;
}
}
@@ -1365,6 +1366,9 @@ sub read_config {
print "$option\n";
}
print "Set IGNORE_UNUSED = 1 to have ktest ignore unused variables\n";
+ if ($dry_run) {
+ return;
+ }
if (!read_yn "Do you want to continue?") {
exit -1;
}
@@ -4249,6 +4253,53 @@ sub set_test_option {
return eval_option($name, $option, $i);
}
+sub print_test_preamble {
+ my ($resolved) = @_;
+
+ doprint "\n\nSTARTING AUTOMATED TESTS\n\n";
+
+ for (my $i = 0, my $repeat = 1; $i <= $opt{"NUM_TESTS"}; $i += $repeat) {
+
+ if (!$i) {
+ doprint "DEFAULT OPTIONS:\n";
+ } else {
+ doprint "\nTEST $i OPTIONS";
+ if (defined($repeat_tests{$i})) {
+ $repeat = $repeat_tests{$i};
+ doprint " ITERATE $repeat";
+ }
+ doprint "\n";
+ }
+
+ foreach my $option (sort keys %opt) {
+ my $value;
+
+ if ($option =~ /\[(\d+)\]$/) {
+ next if ($i != $1);
+
+ if ($resolved) {
+ my $name = $option;
+ $name =~ s/\[\d+\]$//;
+ $value = set_test_option($name, $i);
+ } else {
+ $value = $opt{$option};
+ }
+ } else {
+ next if ($i);
+
+ if ($resolved) {
+ $value = set_test_option($option, 0);
+ } else {
+ $value = $opt{$option};
+ }
+ }
+
+ $value = "" if (!defined($value));
+ doprint "$option = $value\n";
+ }
+ }
+}
+
sub find_mailer {
my ($mailer) = @_;
@@ -4348,6 +4399,8 @@ ktest.pl version: $VERSION
Sets global BUILD_NOCLEAN to 1
-D TEST_TYPE[2]=build
Sets TEST_TYPE of test 2 to "build"
+ --dry-run
+ Print resolved test options and exit without running tests.
It can also override all temp variables.
-D USE_TEMP_DIR:=1
@@ -4379,6 +4432,9 @@ while ( $#ARGV >= 0 ) {
} else {
$command_vars[$#command_vars + 1] = $val;
}
+ } elsif ( $ARGV[0] eq "--dry-run" ) {
+ $dry_run = 1;
+ shift;
} elsif ( $ARGV[0] eq "-h" ) {
die_usage;
} else {
@@ -4427,6 +4483,11 @@ EOF
}
read_config $ktest_config;
+if ($dry_run) {
+ print_test_preamble 1;
+ exit 0;
+}
+
if (defined($opt{"LOG_FILE"})) {
$opt{"LOG_FILE"} = set_test_option("LOG_FILE", 1);
}
@@ -4458,31 +4519,7 @@ if (defined($opt{"LOG_FILE"})) {
LOG->autoflush(1);
}
-doprint "\n\nSTARTING AUTOMATED TESTS\n\n";
-
-for (my $i = 0, my $repeat = 1; $i <= $opt{"NUM_TESTS"}; $i += $repeat) {
-
- if (!$i) {
- doprint "DEFAULT OPTIONS:\n";
- } else {
- doprint "\nTEST $i OPTIONS";
- if (defined($repeat_tests{$i})) {
- $repeat = $repeat_tests{$i};
- doprint " ITERATE $repeat";
- }
- doprint "\n";
- }
-
- foreach my $option (sort keys %opt) {
- if ($option =~ /\[(\d+)\]$/) {
- next if ($i != $1);
- } else {
- next if ($i);
- }
-
- doprint "$option = $opt{$option}\n";
- }
-}
+print_test_preamble 0;
$SIG{INT} = qw(cancel_test);
--
2.53.0
next prev parent reply other threads:[~2026-03-07 22:08 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-07 22:07 [PATCH 0/9] tools/testing/ktest: Fixes and a new --dry-run Ricardo B. Marlière
2026-03-07 22:07 ` [PATCH 1/9] ktest: Avoid undef warning when WARNINGS_FILE is unset Ricardo B. Marlière
2026-03-07 22:07 ` [PATCH 2/9] ktest: Resolve LOG_FILE in test option context Ricardo B. Marlière
2026-03-07 22:07 ` [PATCH 3/9] ktest: Treat undefined self-reference as empty Ricardo B. Marlière
2026-03-09 14:40 ` Steven Rostedt
2026-03-07 22:07 ` [PATCH 4/9] ktest: Honor empty per-test option overrides Ricardo B. Marlière
2026-03-07 22:08 ` [PATCH 5/9] ktest: Run commands through list-form shell open Ricardo B. Marlière
2026-03-07 22:08 ` [PATCH 6/9] ktest: Stop dropping console output during power-cycle reboot Ricardo B. Marlière
2026-03-07 22:08 ` [PATCH 7/9] ktest: Add PRE_KTEST_DIE for PRE_KTEST failures Ricardo B. Marlière
2026-03-09 15:00 ` Steven Rostedt
2026-03-10 10:25 ` Ricardo B. Marlière
2026-03-07 22:08 ` [PATCH 8/9] ktest: Run POST_KTEST hooks on failure and cancellation Ricardo B. Marlière
2026-03-07 22:08 ` Ricardo B. Marlière [this message]
2026-03-09 14:21 ` [PATCH 0/9] tools/testing/ktest: Fixes and a new --dry-run Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260307-ktest-fixes-v1-9-565d412f4925@suse.com \
--to=rbm@suse.com \
--cc=arighi@nvidia.com \
--cc=fmancera@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=matttbe@kernel.org \
--cc=mpdesouza@suse.com \
--cc=pfalcato@suse.de \
--cc=rostedt@goodmis.org \
--cc=srostedt@redhat.com \
--cc=warthog9@eaglescrag.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome