Skip to content

Commit

Permalink
ktest: Add BISECT_SKIP
Browse files Browse the repository at this point in the history
If a during a git bisect, ktest fails on something other than
what it is testing (if BISECT_TYPE is test but it fails on build),
if BISECT_SKIP is set, then it will do a "git bisect skip" instead
of just failing the bisect and letting the user find a good commit
to test.

Signed-off-by: Steven Rostedt <[email protected]>
  • Loading branch information
Steven Rostedt authored and rostedt committed Mar 8, 2011
1 parent c960bb9 commit c23dca7
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 8 deletions.
36 changes: 28 additions & 8 deletions tools/testing/ktest/ktest.pl
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
$default{"BISECT_SLEEP_TIME"} = 60; # sleep time between bisects
$default{"CLEAR_LOG"} = 0;
$default{"BISECT_MANUAL"} = 0;
$default{"BISECT_SKIP"} = 1;
$default{"SUCCESS_LINE"} = "login:";
$default{"BOOTED_TIMEOUT"} = 1;
$default{"DIE_ON_FAILURE"} = 1;
Expand Down Expand Up @@ -83,6 +84,7 @@
my $bisect_bad = "";
my $reverse_bisect;
my $bisect_manual;
my $bisect_skip;
my $in_patchcheck = 0;
my $run_test;
my $redirect;
Expand Down Expand Up @@ -1169,7 +1171,15 @@ sub run_git_bisect {
return 1;
}

# returns 1 on success, 0 on failure
sub bisect_reboot {
doprint "Reboot and sleep $bisect_sleep_time seconds\n";
reboot;
start_monitor;
wait_for_monitor $bisect_sleep_time;
end_monitor;
}

# returns 1 on success, 0 on failure, -1 on skip
sub run_bisect_test {
my ($type, $buildtype) = @_;

Expand All @@ -1183,6 +1193,10 @@ sub run_bisect_test {
build $buildtype or $failed = 1;

if ($type ne "build") {
if ($failed && $bisect_skip) {
$in_bisect = 0;
return -1;
}
dodie "Failed on build" if $failed;

# Now boot the box
Expand All @@ -1194,6 +1208,12 @@ sub run_bisect_test {
monitor or $failed = 1;

if ($type ne "boot") {
if ($failed && $bisect_skip) {
end_monitor;
bisect_reboot;
$in_bisect = 0;
return -1;
}
dodie "Failed on boot" if $failed;

do_run_test or $failed = 1;
Expand All @@ -1206,11 +1226,7 @@ sub run_bisect_test {

# reboot the box to a good kernel
if ($type ne "build") {
doprint "Reboot and sleep $bisect_sleep_time seconds\n";
reboot;
start_monitor;
wait_for_monitor $bisect_sleep_time;
end_monitor;
bisect_reboot;
}
} else {
$result = 1;
Expand Down Expand Up @@ -1240,10 +1256,13 @@ sub run_bisect {
$ret = !$ret;
}

if ($ret) {
if ($ret > 0) {
return "good";
} else {
} elsif ($ret == 0) {
return "bad";
} elsif ($bisect_skip) {
doprint "HIT A BAD COMMIT ... SKIPPING\n";
return "skip";
}
}

Expand Down Expand Up @@ -1954,6 +1973,7 @@ sub set_test_option {
$sleep_time = set_test_option("SLEEP_TIME", $i);
$bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i);
$bisect_manual = set_test_option("BISECT_MANUAL", $i);
$bisect_skip = set_test_option("BISECT_SKIP", $i);
$store_failures = set_test_option("STORE_FAILURES", $i);
$timeout = set_test_option("TIMEOUT", $i);
$booted_timeout = set_test_option("BOOTED_TIMEOUT", $i);
Expand Down
9 changes: 9 additions & 0 deletions tools/testing/ktest/sample.conf
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,15 @@
# git bisect good, git bisect bad, and running the git bisect replay
# if the BISECT_REPLAY is set.
#
# BISECT_SKIP = 1 (optional, default 0)
#
# If BISECT_TYPE is set to test but the build fails, ktest will
# simply fail the test and end their. You could use BISECT_REPLAY
# and BISECT_START to resume after you found a new starting point,
# or you could set BISECT_SKIP to 1. If BISECT_SKIP is set to 1,
# when something other than the BISECT_TYPE fails, ktest.pl will
# run "git bisect skip" and try again.
#
# BISECT_REVERSE = 1 (optional, default 0)
#
# In those strange instances where it was broken forever
Expand Down

0 comments on commit c23dca7

Please sign in to comment.