aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-12 07:32:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-12 07:32:26 -0400
commit6bbcb1d3a2e0a31593e3b7d9bfd112fa7f447141 (patch)
tree557ab55cc4346347f64ec1f3d9d96707aea07b36 /tools/testing
parent8df6be116c87314e35c2ac9de35561b57f87739f (diff)
parentd832d743385dd5e735660951aa9d7d36a6a4176a (diff)
Merge tag 'ktest-v3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest
Pull ktest update from Steven Rostedt: "A fix and a clean up to ktest, as well as two small features. - A way to allow users to skip a manual bisect. - Allowing cherry picked patches to be tested. The cherry pick worked for a test I needed, but stressing it may not have all the desired effects. It doesn't cause any regressions so I kept it in" * tag 'ktest-v3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest: ktest: Don't bother with bisect good or bad on replay ktest: Fix check for new kernel success on rebooting to good kernel ktest: add ability to skip during BISECT_MANUAL ktest: Add PATCHCHECK_CHERRY
Diffstat (limited to 'tools/testing')
-rwxr-xr-xtools/testing/ktest/ktest.pl61
-rw-r--r--tools/testing/ktest/sample.conf10
2 files changed, 57 insertions, 14 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
index 55ab700f6ba5..bf1398180785 100755
--- a/tools/testing/ktest/ktest.pl
+++ b/tools/testing/ktest/ktest.pl
@@ -194,6 +194,7 @@ my $config_bisect_check;
194 194
195my $patchcheck_type; 195my $patchcheck_type;
196my $patchcheck_start; 196my $patchcheck_start;
197my $patchcheck_cherry;
197my $patchcheck_end; 198my $patchcheck_end;
198 199
199# set when a test is something other that just building or install 200# set when a test is something other that just building or install
@@ -320,6 +321,7 @@ my %option_map = (
320 321
321 "PATCHCHECK_TYPE" => \$patchcheck_type, 322 "PATCHCHECK_TYPE" => \$patchcheck_type,
322 "PATCHCHECK_START" => \$patchcheck_start, 323 "PATCHCHECK_START" => \$patchcheck_start,
324 "PATCHCHECK_CHERRY" => \$patchcheck_cherry,
323 "PATCHCHECK_END" => \$patchcheck_end, 325 "PATCHCHECK_END" => \$patchcheck_end,
324); 326);
325 327
@@ -1448,6 +1450,12 @@ sub wait_for_monitor {
1448 } 1450 }
1449 } 1451 }
1450 print "** Monitor flushed **\n"; 1452 print "** Monitor flushed **\n";
1453
1454 # if stop is defined but wasn't hit, return error
1455 # used by reboot (which wants to see a reboot)
1456 if (defined($stop) && !$booted) {
1457 $bug = 1;
1458 }
1451 return $bug; 1459 return $bug;
1452} 1460}
1453 1461
@@ -2336,15 +2344,17 @@ sub success {
2336 2344
2337sub answer_bisect { 2345sub answer_bisect {
2338 for (;;) { 2346 for (;;) {
2339 doprint "Pass or fail? [p/f]"; 2347 doprint "Pass, fail, or skip? [p/f/s]";
2340 my $ans = <STDIN>; 2348 my $ans = <STDIN>;
2341 chomp $ans; 2349 chomp $ans;
2342 if ($ans eq "p" || $ans eq "P") { 2350 if ($ans eq "p" || $ans eq "P") {
2343 return 1; 2351 return 1;
2344 } elsif ($ans eq "f" || $ans eq "F") { 2352 } elsif ($ans eq "f" || $ans eq "F") {
2345 return 0; 2353 return 0;
2354 } elsif ($ans eq "s" || $ans eq "S") {
2355 return -1;
2346 } else { 2356 } else {
2347 print "Please answer 'P' or 'F'\n"; 2357 print "Please answer 'p', 'f', or 's'\n";
2348 } 2358 }
2349 } 2359 }
2350} 2360}
@@ -2726,15 +2736,17 @@ sub bisect {
2726 run_command "git bisect start$start_files" or 2736 run_command "git bisect start$start_files" or
2727 dodie "could not start bisect"; 2737 dodie "could not start bisect";
2728 2738
2729 run_command "git bisect good $good" or
2730 dodie "could not set bisect good to $good";
2731
2732 run_git_bisect "git bisect bad $bad" or
2733 dodie "could not set bisect bad to $bad";
2734
2735 if (defined($replay)) { 2739 if (defined($replay)) {
2736 run_command "git bisect replay $replay" or 2740 run_command "git bisect replay $replay" or
2737 dodie "failed to run replay"; 2741 dodie "failed to run replay";
2742 } else {
2743
2744 run_command "git bisect good $good" or
2745 dodie "could not set bisect good to $good";
2746
2747 run_git_bisect "git bisect bad $bad" or
2748 dodie "could not set bisect bad to $bad";
2749
2738 } 2750 }
2739 2751
2740 if (defined($start)) { 2752 if (defined($start)) {
@@ -3181,9 +3193,16 @@ sub patchcheck {
3181 3193
3182 my $start = $patchcheck_start; 3194 my $start = $patchcheck_start;
3183 3195
3196 my $cherry = $patchcheck_cherry;
3197 if (!defined($cherry)) {
3198 $cherry = 0;
3199 }
3200
3184 my $end = "HEAD"; 3201 my $end = "HEAD";
3185 if (defined($patchcheck_end)) { 3202 if (defined($patchcheck_end)) {
3186 $end = $patchcheck_end; 3203 $end = $patchcheck_end;
3204 } elsif ($cherry) {
3205 die "PATCHCHECK_END must be defined with PATCHCHECK_CHERRY\n";
3187 } 3206 }
3188 3207
3189 # Get the true sha1's since we can use things like HEAD~3 3208 # Get the true sha1's since we can use things like HEAD~3
@@ -3197,24 +3216,38 @@ sub patchcheck {
3197 $type = "boot"; 3216 $type = "boot";
3198 } 3217 }
3199 3218
3200 open (IN, "git log --pretty=oneline $end|") or 3219 if ($cherry) {
3201 dodie "could not get git list"; 3220 open (IN, "git cherry -v $start $end|") or
3221 dodie "could not get git list";
3222 } else {
3223 open (IN, "git log --pretty=oneline $end|") or
3224 dodie "could not get git list";
3225 }
3202 3226
3203 my @list; 3227 my @list;
3204 3228
3205 while (<IN>) { 3229 while (<IN>) {
3206 chomp; 3230 chomp;
3231 # git cherry adds a '+' we want to remove
3232 s/^\+ //;
3207 $list[$#list+1] = $_; 3233 $list[$#list+1] = $_;
3208 last if (/^$start/); 3234 last if (/^$start/);
3209 } 3235 }
3210 close(IN); 3236 close(IN);
3211 3237
3212 if ($list[$#list] !~ /^$start/) { 3238 if (!$cherry) {
3213 fail "SHA1 $start not found"; 3239 if ($list[$#list] !~ /^$start/) {
3240 fail "SHA1 $start not found";
3241 }
3242
3243 # go backwards in the list
3244 @list = reverse @list;
3214 } 3245 }
3215 3246
3216 # go backwards in the list 3247 doprint("Going to test the following commits:\n");
3217 @list = reverse @list; 3248 foreach my $l (@list) {
3249 doprint "$l\n";
3250 }
3218 3251
3219 my $save_clean = $noclean; 3252 my $save_clean = $noclean;
3220 my %ignored_warnings; 3253 my %ignored_warnings;
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf
index 911e45ad657a..6c58cd8bbbae 100644
--- a/tools/testing/ktest/sample.conf
+++ b/tools/testing/ktest/sample.conf
@@ -906,6 +906,16 @@
906# 906#
907# PATCHCHECK_END is the last patch to check (default HEAD) 907# PATCHCHECK_END is the last patch to check (default HEAD)
908# 908#
909# PATCHCHECK_CHERRY if set to non zero, then git cherry will be
910# performed against PATCHCHECK_START and PATCHCHECK_END. That is
911#
912# git cherry ${PATCHCHECK_START} ${PATCHCHECK_END}
913#
914# Then the changes found will be tested.
915#
916# Note, PATCHCHECK_CHERRY requires PATCHCHECK_END to be defined.
917# (default 0)
918#
909# PATCHCHECK_TYPE is required and is the type of test to run: 919# PATCHCHECK_TYPE is required and is the type of test to run:
910# build, boot, test. 920# build, boot, test.
911# 921#