diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/testing/ktest/ktest.pl | 33 | ||||
-rw-r--r-- | tools/testing/ktest/sample.conf | 16 |
2 files changed, 47 insertions, 2 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index c95209bac65a..e55bd52367a6 100755 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
@@ -37,6 +37,7 @@ $default{"POWEROFF_ON_SUCCESS"} = 0; | |||
37 | $default{"BUILD_OPTIONS"} = ""; | 37 | $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{"SUCCESS_LINE"} = "login:"; | 41 | $default{"SUCCESS_LINE"} = "login:"; |
41 | $default{"BOOTED_TIMEOUT"} = 1; | 42 | $default{"BOOTED_TIMEOUT"} = 1; |
42 | $default{"DIE_ON_FAILURE"} = 1; | 43 | $default{"DIE_ON_FAILURE"} = 1; |
@@ -81,6 +82,7 @@ my $addconfig; | |||
81 | my $in_bisect = 0; | 82 | my $in_bisect = 0; |
82 | my $bisect_bad = ""; | 83 | my $bisect_bad = ""; |
83 | my $reverse_bisect; | 84 | my $reverse_bisect; |
85 | my $bisect_manual; | ||
84 | my $in_patchcheck = 0; | 86 | my $in_patchcheck = 0; |
85 | my $run_test; | 87 | my $run_test; |
86 | my $redirect; | 88 | my $redirect; |
@@ -1046,6 +1048,21 @@ sub get_version { | |||
1046 | doprint "$version\n"; | 1048 | doprint "$version\n"; |
1047 | } | 1049 | } |
1048 | 1050 | ||
1051 | sub answer_bisect { | ||
1052 | for (;;) { | ||
1053 | doprint "Pass or fail? [p/f]"; | ||
1054 | my $ans = <STDIN>; | ||
1055 | chomp $ans; | ||
1056 | if ($ans eq "p" || $ans eq "P") { | ||
1057 | return 1; | ||
1058 | } elsif ($ans eq "f" || $ans eq "F") { | ||
1059 | return 0; | ||
1060 | } else { | ||
1061 | print "Please answer 'P' or 'F'\n"; | ||
1062 | } | ||
1063 | } | ||
1064 | } | ||
1065 | |||
1049 | sub child_run_test { | 1066 | sub child_run_test { |
1050 | my $failed = 0; | 1067 | my $failed = 0; |
1051 | 1068 | ||
@@ -1214,6 +1231,9 @@ sub run_bisect { | |||
1214 | 1231 | ||
1215 | my $ret = run_bisect_test $type, $buildtype; | 1232 | my $ret = run_bisect_test $type, $buildtype; |
1216 | 1233 | ||
1234 | if ($bisect_manual) { | ||
1235 | $ret = answer_bisect; | ||
1236 | } | ||
1217 | 1237 | ||
1218 | # Are we looking for where it worked, not failed? | 1238 | # Are we looking for where it worked, not failed? |
1219 | if ($reverse_bisect) { | 1239 | if ($reverse_bisect) { |
@@ -1524,7 +1544,9 @@ sub run_config_bisect { | |||
1524 | } | 1544 | } |
1525 | 1545 | ||
1526 | $ret = run_config_bisect_test $type; | 1546 | $ret = run_config_bisect_test $type; |
1527 | 1547 | if ($bisect_manual) { | |
1548 | $ret = answer_bisect; | ||
1549 | } | ||
1528 | if ($ret) { | 1550 | if ($ret) { |
1529 | process_passed %current_config; | 1551 | process_passed %current_config; |
1530 | return 0; | 1552 | return 0; |
@@ -1555,7 +1577,13 @@ sub run_config_bisect { | |||
1555 | $half = int($#start_list / 2); | 1577 | $half = int($#start_list / 2); |
1556 | } while ($half > 0); | 1578 | } while ($half > 0); |
1557 | 1579 | ||
1558 | # we found a single config, try it again | 1580 | # we found a single config, try it again unless we are running manually |
1581 | |||
1582 | if ($bisect_manual) { | ||
1583 | process_failed $start_list[0]; | ||
1584 | return 1; | ||
1585 | } | ||
1586 | |||
1559 | my @tophalf = @start_list[0 .. 0]; | 1587 | my @tophalf = @start_list[0 .. 0]; |
1560 | 1588 | ||
1561 | $ret = run_config_bisect_test $type; | 1589 | $ret = run_config_bisect_test $type; |
@@ -1925,6 +1953,7 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { | |||
1925 | $poweroff_after_halt = set_test_option("POWEROFF_AFTER_HALT", $i); | 1953 | $poweroff_after_halt = set_test_option("POWEROFF_AFTER_HALT", $i); |
1926 | $sleep_time = set_test_option("SLEEP_TIME", $i); | 1954 | $sleep_time = set_test_option("SLEEP_TIME", $i); |
1927 | $bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i); | 1955 | $bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i); |
1956 | $bisect_manual = set_test_option("BISECT_MANUAL", $i); | ||
1928 | $store_failures = set_test_option("STORE_FAILURES", $i); | 1957 | $store_failures = set_test_option("STORE_FAILURES", $i); |
1929 | $timeout = set_test_option("TIMEOUT", $i); | 1958 | $timeout = set_test_option("TIMEOUT", $i); |
1930 | $booted_timeout = set_test_option("BOOTED_TIMEOUT", $i); | 1959 | $booted_timeout = set_test_option("BOOTED_TIMEOUT", $i); |
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf index 3408c594b2de..af82ac289779 100644 --- a/tools/testing/ktest/sample.conf +++ b/tools/testing/ktest/sample.conf | |||
@@ -528,6 +528,15 @@ | |||
528 | # With BISECT_REVERSE = 1, The test will consider failures as | 528 | # With BISECT_REVERSE = 1, The test will consider failures as |
529 | # good, and success as bad. | 529 | # good, and success as bad. |
530 | # | 530 | # |
531 | # BISECT_MANUAL = 1 (optional, default 0) | ||
532 | # | ||
533 | # In case there's a problem with automating the bisect for | ||
534 | # whatever reason. (Can't reboot, want to inspect each iteration) | ||
535 | # Doing a BISECT_MANUAL will have the test wait for you to | ||
536 | # tell it if the test passed or failed after each iteration. | ||
537 | # This is basicall the same as running git bisect yourself | ||
538 | # but ktest will rebuild and install the kernel for you. | ||
539 | # | ||
531 | # BISECT_CHECK = 1 (optional, default 0) | 540 | # BISECT_CHECK = 1 (optional, default 0) |
532 | # | 541 | # |
533 | # Just to be sure the good is good and bad is bad, setting | 542 | # Just to be sure the good is good and bad is bad, setting |
@@ -613,10 +622,17 @@ | |||
613 | # | 622 | # |
614 | # CONFIG_BISECT is the config that failed to boot | 623 | # CONFIG_BISECT is the config that failed to boot |
615 | # | 624 | # |
625 | # If BISECT_MANUAL is set, it will pause between iterations. | ||
626 | # This is useful to use just ktest.pl just for the config bisect. | ||
627 | # If you set it to build, it will run the bisect and you can | ||
628 | # control what happens in between iterations. It will ask you if | ||
629 | # the test succeeded or not and continue the config bisect. | ||
630 | # | ||
616 | # Example: | 631 | # Example: |
617 | # TEST_START | 632 | # TEST_START |
618 | # TEST_TYPE = config_bisect | 633 | # TEST_TYPE = config_bisect |
619 | # CONFIG_BISECT_TYPE = build | 634 | # CONFIG_BISECT_TYPE = build |
620 | # CONFIG_BISECT = /home/test/˘onfig-bad | 635 | # CONFIG_BISECT = /home/test/˘onfig-bad |
621 | # MIN_CONFIG = /home/test/config-min | 636 | # MIN_CONFIG = /home/test/config-min |
637 | # BISECT_MANUAL = 1 | ||
622 | # | 638 | # |