diff options
author | Steven Rostedt <srostedt@redhat.com> | 2011-03-08 09:26:31 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2011-03-08 09:52:58 -0500 |
commit | c23dca7cd28eb1bf90053ce4ba30d65d22d2a81e (patch) | |
tree | 3c782d80130cb5921911e105a57491afc1af332c | |
parent | c960bb9f59c0ed2aded535222cfe461ec6c22c95 (diff) |
ktest: Add BISECT_SKIP
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 <rostedt@goodmis.org>
-rwxr-xr-x | tools/testing/ktest/ktest.pl | 36 | ||||
-rw-r--r-- | tools/testing/ktest/sample.conf | 9 |
2 files changed, 37 insertions, 8 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index e55bd52367a6..0f62916a43f7 100755 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
@@ -38,6 +38,7 @@ $default{"BUILD_OPTIONS"} = ""; | |||
38 | $default{"BISECT_SLEEP_TIME"} = 60; # sleep time between bisects | 38 | $default{"BISECT_SLEEP_TIME"} = 60; # sleep time between bisects |
39 | $default{"CLEAR_LOG"} = 0; | 39 | $default{"CLEAR_LOG"} = 0; |
40 | $default{"BISECT_MANUAL"} = 0; | 40 | $default{"BISECT_MANUAL"} = 0; |
41 | $default{"BISECT_SKIP"} = 1; | ||
41 | $default{"SUCCESS_LINE"} = "login:"; | 42 | $default{"SUCCESS_LINE"} = "login:"; |
42 | $default{"BOOTED_TIMEOUT"} = 1; | 43 | $default{"BOOTED_TIMEOUT"} = 1; |
43 | $default{"DIE_ON_FAILURE"} = 1; | 44 | $default{"DIE_ON_FAILURE"} = 1; |
@@ -83,6 +84,7 @@ my $in_bisect = 0; | |||
83 | my $bisect_bad = ""; | 84 | my $bisect_bad = ""; |
84 | my $reverse_bisect; | 85 | my $reverse_bisect; |
85 | my $bisect_manual; | 86 | my $bisect_manual; |
87 | my $bisect_skip; | ||
86 | my $in_patchcheck = 0; | 88 | my $in_patchcheck = 0; |
87 | my $run_test; | 89 | my $run_test; |
88 | my $redirect; | 90 | my $redirect; |
@@ -1169,7 +1171,15 @@ sub run_git_bisect { | |||
1169 | return 1; | 1171 | return 1; |
1170 | } | 1172 | } |
1171 | 1173 | ||
1172 | # returns 1 on success, 0 on failure | 1174 | sub bisect_reboot { |
1175 | doprint "Reboot and sleep $bisect_sleep_time seconds\n"; | ||
1176 | reboot; | ||
1177 | start_monitor; | ||
1178 | wait_for_monitor $bisect_sleep_time; | ||
1179 | end_monitor; | ||
1180 | } | ||
1181 | |||
1182 | # returns 1 on success, 0 on failure, -1 on skip | ||
1173 | sub run_bisect_test { | 1183 | sub run_bisect_test { |
1174 | my ($type, $buildtype) = @_; | 1184 | my ($type, $buildtype) = @_; |
1175 | 1185 | ||
@@ -1183,6 +1193,10 @@ sub run_bisect_test { | |||
1183 | build $buildtype or $failed = 1; | 1193 | build $buildtype or $failed = 1; |
1184 | 1194 | ||
1185 | if ($type ne "build") { | 1195 | if ($type ne "build") { |
1196 | if ($failed && $bisect_skip) { | ||
1197 | $in_bisect = 0; | ||
1198 | return -1; | ||
1199 | } | ||
1186 | dodie "Failed on build" if $failed; | 1200 | dodie "Failed on build" if $failed; |
1187 | 1201 | ||
1188 | # Now boot the box | 1202 | # Now boot the box |
@@ -1194,6 +1208,12 @@ sub run_bisect_test { | |||
1194 | monitor or $failed = 1; | 1208 | monitor or $failed = 1; |
1195 | 1209 | ||
1196 | if ($type ne "boot") { | 1210 | if ($type ne "boot") { |
1211 | if ($failed && $bisect_skip) { | ||
1212 | end_monitor; | ||
1213 | bisect_reboot; | ||
1214 | $in_bisect = 0; | ||
1215 | return -1; | ||
1216 | } | ||
1197 | dodie "Failed on boot" if $failed; | 1217 | dodie "Failed on boot" if $failed; |
1198 | 1218 | ||
1199 | do_run_test or $failed = 1; | 1219 | do_run_test or $failed = 1; |
@@ -1206,11 +1226,7 @@ sub run_bisect_test { | |||
1206 | 1226 | ||
1207 | # reboot the box to a good kernel | 1227 | # reboot the box to a good kernel |
1208 | if ($type ne "build") { | 1228 | if ($type ne "build") { |
1209 | doprint "Reboot and sleep $bisect_sleep_time seconds\n"; | 1229 | bisect_reboot; |
1210 | reboot; | ||
1211 | start_monitor; | ||
1212 | wait_for_monitor $bisect_sleep_time; | ||
1213 | end_monitor; | ||
1214 | } | 1230 | } |
1215 | } else { | 1231 | } else { |
1216 | $result = 1; | 1232 | $result = 1; |
@@ -1240,10 +1256,13 @@ sub run_bisect { | |||
1240 | $ret = !$ret; | 1256 | $ret = !$ret; |
1241 | } | 1257 | } |
1242 | 1258 | ||
1243 | if ($ret) { | 1259 | if ($ret > 0) { |
1244 | return "good"; | 1260 | return "good"; |
1245 | } else { | 1261 | } elsif ($ret == 0) { |
1246 | return "bad"; | 1262 | return "bad"; |
1263 | } elsif ($bisect_skip) { | ||
1264 | doprint "HIT A BAD COMMIT ... SKIPPING\n"; | ||
1265 | return "skip"; | ||
1247 | } | 1266 | } |
1248 | } | 1267 | } |
1249 | 1268 | ||
@@ -1954,6 +1973,7 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { | |||
1954 | $sleep_time = set_test_option("SLEEP_TIME", $i); | 1973 | $sleep_time = set_test_option("SLEEP_TIME", $i); |
1955 | $bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i); | 1974 | $bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i); |
1956 | $bisect_manual = set_test_option("BISECT_MANUAL", $i); | 1975 | $bisect_manual = set_test_option("BISECT_MANUAL", $i); |
1976 | $bisect_skip = set_test_option("BISECT_SKIP", $i); | ||
1957 | $store_failures = set_test_option("STORE_FAILURES", $i); | 1977 | $store_failures = set_test_option("STORE_FAILURES", $i); |
1958 | $timeout = set_test_option("TIMEOUT", $i); | 1978 | $timeout = set_test_option("TIMEOUT", $i); |
1959 | $booted_timeout = set_test_option("BOOTED_TIMEOUT", $i); | 1979 | $booted_timeout = set_test_option("BOOTED_TIMEOUT", $i); |
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf index af82ac289779..4c46b7ef8e46 100644 --- a/tools/testing/ktest/sample.conf +++ b/tools/testing/ktest/sample.conf | |||
@@ -519,6 +519,15 @@ | |||
519 | # git bisect good, git bisect bad, and running the git bisect replay | 519 | # git bisect good, git bisect bad, and running the git bisect replay |
520 | # if the BISECT_REPLAY is set. | 520 | # if the BISECT_REPLAY is set. |
521 | # | 521 | # |
522 | # BISECT_SKIP = 1 (optional, default 0) | ||
523 | # | ||
524 | # If BISECT_TYPE is set to test but the build fails, ktest will | ||
525 | # simply fail the test and end their. You could use BISECT_REPLAY | ||
526 | # and BISECT_START to resume after you found a new starting point, | ||
527 | # or you could set BISECT_SKIP to 1. If BISECT_SKIP is set to 1, | ||
528 | # when something other than the BISECT_TYPE fails, ktest.pl will | ||
529 | # run "git bisect skip" and try again. | ||
530 | # | ||
522 | # BISECT_REVERSE = 1 (optional, default 0) | 531 | # BISECT_REVERSE = 1 (optional, default 0) |
523 | # | 532 | # |
524 | # In those strange instances where it was broken forever | 533 | # In those strange instances where it was broken forever |