diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-11-02 14:58:38 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-11-18 11:23:09 -0500 |
| commit | 576f627c817dff0b7081374287a77247325b9cc0 (patch) | |
| tree | 9c1c4a1a00ce62a4781d219c0d0561b80576e367 /tools | |
| parent | 8b37ca8cac46b2c108386e3901cc8611dc81c7aa (diff) | |
ktest: Add poweroff after halt and powercycle after reboot
Added the options POWEROFF_AFTER_HALT to handle boxes that do not
really shut off after a halt is called.
Added POWERCYCLE_AFTER_REBOOT to force a power cycle for boxes that
don't reboot but get stuck during the reboot.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/testing/ktest/ktest.pl | 63 | ||||
| -rw-r--r-- | tools/testing/ktest/sample.conf | 18 |
2 files changed, 66 insertions, 15 deletions
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl index 687a85475af..ef978171ecb 100644 --- a/tools/testing/ktest/ktest.pl +++ b/tools/testing/ktest/ktest.pl | |||
| @@ -53,6 +53,8 @@ my $power_cycle; | |||
| 53 | my $reboot_on_error; | 53 | my $reboot_on_error; |
| 54 | my $poweroff_on_error; | 54 | my $poweroff_on_error; |
| 55 | my $die_on_failure; | 55 | my $die_on_failure; |
| 56 | my $powercycle_after_reboot; | ||
| 57 | my $poweroff_after_halt; | ||
| 56 | my $power_off; | 58 | my $power_off; |
| 57 | my $grub_menu; | 59 | my $grub_menu; |
| 58 | my $grub_number; | 60 | my $grub_number; |
| @@ -83,6 +85,7 @@ my $success_line; | |||
| 83 | my $build_target; | 85 | my $build_target; |
| 84 | my $target_image; | 86 | my $target_image; |
| 85 | my $localversion; | 87 | my $localversion; |
| 88 | my $iteration = 0; | ||
| 86 | 89 | ||
| 87 | sub read_config { | 90 | sub read_config { |
| 88 | my ($config) = @_; | 91 | my ($config) = @_; |
| @@ -133,16 +136,32 @@ sub run_command; | |||
| 133 | 136 | ||
| 134 | sub reboot { | 137 | sub reboot { |
| 135 | # try to reboot normally | 138 | # try to reboot normally |
| 136 | if (!run_command "ssh $target reboot") { | 139 | if (run_command "ssh $target reboot") { |
| 140 | if (defined($powercycle_after_reboot)) { | ||
| 141 | sleep $powercycle_after_reboot; | ||
| 142 | run_command "$power_cycle"; | ||
| 143 | } | ||
| 144 | } else { | ||
| 137 | # nope? power cycle it. | 145 | # nope? power cycle it. |
| 138 | run_command "$power_cycle"; | 146 | run_command "$power_cycle"; |
| 139 | } | 147 | } |
| 140 | } | 148 | } |
| 141 | 149 | ||
| 150 | sub do_not_reboot { | ||
| 151 | my $i = $iteration; | ||
| 152 | |||
| 153 | return $test_type eq "build" || | ||
| 154 | ($test_type eq "patchcheck" && $opt{"PATCHCHECK_TYPE[$i]"} eq "build") || | ||
| 155 | ($test_type eq "bisect" && $opt{"BISECT_TYPE[$i]"} eq "build"); | ||
| 156 | } | ||
| 157 | |||
| 142 | sub dodie { | 158 | sub dodie { |
| 143 | doprint "CRITICAL FAILURE... ", @_, "\n"; | 159 | doprint "CRITICAL FAILURE... ", @_, "\n"; |
| 144 | 160 | ||
| 145 | if ($reboot_on_error && $test_type ne "build") { | 161 | my $i = $iteration; |
| 162 | |||
| 163 | if ($reboot_on_error && !do_not_reboot) { | ||
| 164 | |||
| 146 | doprint "REBOOTING\n"; | 165 | doprint "REBOOTING\n"; |
| 147 | reboot; | 166 | reboot; |
| 148 | 167 | ||
| @@ -151,7 +170,7 @@ sub dodie { | |||
| 151 | `$power_off`; | 170 | `$power_off`; |
| 152 | } | 171 | } |
| 153 | 172 | ||
| 154 | die @_; | 173 | die @_, "\n"; |
| 155 | } | 174 | } |
| 156 | 175 | ||
| 157 | sub open_console { | 176 | sub open_console { |
| @@ -163,9 +182,9 @@ sub open_console { | |||
| 163 | dodie "Can't open console $console"; | 182 | dodie "Can't open console $console"; |
| 164 | 183 | ||
| 165 | $flags = fcntl($fp, F_GETFL, 0) or | 184 | $flags = fcntl($fp, F_GETFL, 0) or |
| 166 | dodie "Can't get flags for the socket: $!\n"; | 185 | dodie "Can't get flags for the socket: $!"; |
| 167 | $flags = fcntl($fp, F_SETFL, $flags | O_NONBLOCK) or | 186 | $flags = fcntl($fp, F_SETFL, $flags | O_NONBLOCK) or |
| 168 | dodie "Can't set flags for the socket: $!\n"; | 187 | dodie "Can't set flags for the socket: $!"; |
| 169 | 188 | ||
| 170 | return $pid; | 189 | return $pid; |
| 171 | } | 190 | } |
| @@ -221,8 +240,10 @@ sub fail { | |||
| 221 | 240 | ||
| 222 | doprint "FAILED\n"; | 241 | doprint "FAILED\n"; |
| 223 | 242 | ||
| 243 | my $i = $iteration; | ||
| 244 | |||
| 224 | # no need to reboot for just building. | 245 | # no need to reboot for just building. |
| 225 | if ($test_type ne "build") { | 246 | if (!do_not_reboot) { |
| 226 | doprint "REBOOTING\n"; | 247 | doprint "REBOOTING\n"; |
| 227 | reboot; | 248 | reboot; |
| 228 | start_monitor; | 249 | start_monitor; |
| @@ -230,7 +251,11 @@ sub fail { | |||
| 230 | end_monitor; | 251 | end_monitor; |
| 231 | } | 252 | } |
| 232 | 253 | ||
| 254 | doprint "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; | ||
| 255 | doprint "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; | ||
| 233 | doprint "**** Failed: ", @_, " ****\n"; | 256 | doprint "**** Failed: ", @_, " ****\n"; |
| 257 | doprint "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; | ||
| 258 | doprint "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"; | ||
| 234 | 259 | ||
| 235 | return 1 if (!defined($store_failures)); | 260 | return 1 if (!defined($store_failures)); |
| 236 | 261 | ||
| @@ -434,12 +459,12 @@ sub monitor { | |||
| 434 | 459 | ||
| 435 | if ($bug) { | 460 | if ($bug) { |
| 436 | return 0 if ($in_bisect); | 461 | return 0 if ($in_bisect); |
| 437 | fail "failed - got a bug report\n" and return 0; | 462 | fail "failed - got a bug report" and return 0; |
| 438 | } | 463 | } |
| 439 | 464 | ||
| 440 | if (!$booted) { | 465 | if (!$booted) { |
| 441 | return 0 if ($in_bisect); | 466 | return 0 if ($in_bisect); |
| 442 | fail "failed - never got a boot prompt.\n" and return 0; | 467 | fail "failed - never got a boot prompt." and return 0; |
| 443 | } | 468 | } |
| 444 | 469 | ||
| 445 | return 1; | 470 | return 1; |
| @@ -496,7 +521,8 @@ sub install { | |||
| 496 | my $save_env = $ENV{KERNEL_VERSION}; | 521 | my $save_env = $ENV{KERNEL_VERSION}; |
| 497 | 522 | ||
| 498 | $ENV{KERNEL_VERSION} = $version; | 523 | $ENV{KERNEL_VERSION} = $version; |
| 499 | run_command "$post_install"; | 524 | run_command "$post_install" or |
| 525 | dodie "Failed to run post install"; | ||
| 500 | 526 | ||
| 501 | $ENV{KERNEL_VERSION} = $save_env; | 527 | $ENV{KERNEL_VERSION} = $save_env; |
| 502 | } | 528 | } |
| @@ -596,6 +622,11 @@ sub build { | |||
| 596 | 622 | ||
| 597 | sub halt { | 623 | sub halt { |
| 598 | if (!run_command "ssh $target halt" or defined($power_off)) { | 624 | if (!run_command "ssh $target halt" or defined($power_off)) { |
| 625 | if (defined($poweroff_after_halt)) { | ||
| 626 | sleep $poweroff_after_halt; | ||
| 627 | run_command "$power_off"; | ||
| 628 | } | ||
| 629 | } else { | ||
| 599 | # nope? the zap it! | 630 | # nope? the zap it! |
| 600 | run_command "$power_off"; | 631 | run_command "$power_off"; |
| 601 | } | 632 | } |
| @@ -610,9 +641,7 @@ sub success { | |||
| 610 | doprint "*******************************************\n"; | 641 | doprint "*******************************************\n"; |
| 611 | doprint "*******************************************\n"; | 642 | doprint "*******************************************\n"; |
| 612 | 643 | ||
| 613 | if ($i != $opt{"NUM_TESTS"} && $test_type ne "build" && | 644 | if ($i != $opt{"NUM_TESTS"} && !do_not_reboot) { |
| 614 | !($test_type eq "patchcheck" && $opt{"PATCHCHECK_TYPE[$i]"} eq "build") && | ||
| 615 | !($test_type eq "bisect" && $opt{"BISECT_TYPE[$i]"} eq "build")) { | ||
| 616 | doprint "Reboot and wait $sleep_time seconds\n"; | 645 | doprint "Reboot and wait $sleep_time seconds\n"; |
| 617 | reboot; | 646 | reboot; |
| 618 | start_monitor; | 647 | start_monitor; |
| @@ -1048,6 +1077,8 @@ sub set_test_option { | |||
| 1048 | # First we need to do is the builds | 1077 | # First we need to do is the builds |
| 1049 | for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { | 1078 | for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { |
| 1050 | 1079 | ||
| 1080 | $iteration = $i; | ||
| 1081 | |||
| 1051 | my $ssh_user = set_test_option("SSH_USER", $i); | 1082 | my $ssh_user = set_test_option("SSH_USER", $i); |
| 1052 | my $makecmd = set_test_option("MAKE_CMD", $i); | 1083 | my $makecmd = set_test_option("MAKE_CMD", $i); |
| 1053 | 1084 | ||
| @@ -1071,6 +1102,8 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { | |||
| 1071 | $poweroff_on_error = set_test_option("POWEROFF_ON_ERROR", $i); | 1102 | $poweroff_on_error = set_test_option("POWEROFF_ON_ERROR", $i); |
| 1072 | $die_on_failure = set_test_option("DIE_ON_FAILURE", $i); | 1103 | $die_on_failure = set_test_option("DIE_ON_FAILURE", $i); |
| 1073 | $power_off = set_test_option("POWER_OFF", $i); | 1104 | $power_off = set_test_option("POWER_OFF", $i); |
| 1105 | $powercycle_after_reboot = set_test_option("POWERCYCLE_AFTER_REBOOT", $i); | ||
| 1106 | $poweroff_after_halt = set_test_option("POWEROFF_AFTER_HALT", $i); | ||
| 1074 | $sleep_time = set_test_option("SLEEP_TIME", $i); | 1107 | $sleep_time = set_test_option("SLEEP_TIME", $i); |
| 1075 | $bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i); | 1108 | $bisect_sleep_time = set_test_option("BISECT_SLEEP_TIME", $i); |
| 1076 | $store_failures = set_test_option("STORE_FAILURES", $i); | 1109 | $store_failures = set_test_option("STORE_FAILURES", $i); |
| @@ -1096,9 +1129,9 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { | |||
| 1096 | $make = "$makecmd O=$outputdir"; | 1129 | $make = "$makecmd O=$outputdir"; |
| 1097 | 1130 | ||
| 1098 | if ($reboot_type eq "grub") { | 1131 | if ($reboot_type eq "grub") { |
| 1099 | dodie "GRUB_MENU not defined\n" if (!defined($grub_menu)); | 1132 | dodie "GRUB_MENU not defined" if (!defined($grub_menu)); |
| 1100 | } elsif (!defined($reboot_script)) { | 1133 | } elsif (!defined($reboot_script)) { |
| 1101 | dodie "REBOOT_SCRIPT not defined\n" | 1134 | dodie "REBOOT_SCRIPT not defined" |
| 1102 | } | 1135 | } |
| 1103 | 1136 | ||
| 1104 | my $run_type = $build_type; | 1137 | my $run_type = $build_type; |
| @@ -1167,7 +1200,7 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) { | |||
| 1167 | 1200 | ||
| 1168 | if ($opt{"POWEROFF_ON_SUCCESS"}) { | 1201 | if ($opt{"POWEROFF_ON_SUCCESS"}) { |
| 1169 | halt; | 1202 | halt; |
| 1170 | } elsif ($opt{"REBOOT_ON_SUCCESS"} && $test_type ne "build") { | 1203 | } elsif ($opt{"REBOOT_ON_SUCCESS"} && !do_not_reboot) { |
| 1171 | reboot; | 1204 | reboot; |
| 1172 | } | 1205 | } |
| 1173 | 1206 | ||
diff --git a/tools/testing/ktest/sample.conf b/tools/testing/ktest/sample.conf index 0115a6762a6..546014a6bb0 100644 --- a/tools/testing/ktest/sample.conf +++ b/tools/testing/ktest/sample.conf | |||
| @@ -160,6 +160,24 @@ | |||
| 160 | # (ignored if POWEROFF_ON_SUCCESS is set) | 160 | # (ignored if POWEROFF_ON_SUCCESS is set) |
| 161 | #REBOOT_ON_SUCCESS = 1 | 161 | #REBOOT_ON_SUCCESS = 1 |
| 162 | 162 | ||
| 163 | # In case there's isses with rebooting, you can specify this | ||
| 164 | # to always powercycle after this amount of time after calling | ||
| 165 | # reboot. | ||
| 166 | # Note, POWERCYCLE_AFTER_REBOOT = 0 does NOT disable it. It just | ||
| 167 | # makes it powercycle immediately after rebooting. Do not define | ||
| 168 | # it if you do not want it. | ||
| 169 | # (default undefined) | ||
| 170 | #POWERCYCLE_AFTER_REBOOT = 5 | ||
| 171 | |||
| 172 | # In case there's isses with halting, you can specify this | ||
| 173 | # to always poweroff after this amount of time after calling | ||
| 174 | # halt. | ||
| 175 | # Note, POWEROFF_AFTER_HALT = 0 does NOT disable it. It just | ||
| 176 | # makes it poweroff immediately after halting. Do not define | ||
| 177 | # it if you do not want it. | ||
| 178 | # (default undefined) | ||
| 179 | #POWEROFF_AFTER_HALT = 20 | ||
| 180 | |||
| 163 | # Stop testing if a build fails. If set, the script will end if | 181 | # Stop testing if a build fails. If set, the script will end if |
| 164 | # a failure is detected, otherwise it will save off the .config, | 182 | # a failure is detected, otherwise it will save off the .config, |
| 165 | # dmesg and bootlog in a directory called | 183 | # dmesg and bootlog in a directory called |
