提交 75c3fda7 编写于 作者: S Steven Rostedt 提交者: Steven Rostedt

ktest: New features reboot on error, make options

REBOOT_ON_ERROR to reboot the box on error

BUILD_OPTIONS to add options to the make build (like -j40)

Added "useconfig:<config>".
Signed-off-by: NSteven Rostedt <rostedt@goodmis.org>
上级 5c42fc5b
...@@ -19,8 +19,10 @@ $opt{"TIMEOUT"} = 50; ...@@ -19,8 +19,10 @@ $opt{"TIMEOUT"} = 50;
$opt{"TMP_DIR"} = "/tmp/autotest"; $opt{"TMP_DIR"} = "/tmp/autotest";
$opt{"SLEEP_TIME"} = 60; # sleep time between tests $opt{"SLEEP_TIME"} = 60; # sleep time between tests
$opt{"BUILD_NOCLEAN"} = 0; $opt{"BUILD_NOCLEAN"} = 0;
$opt{"REBOOT_ON_ERROR"} = 0;
$opt{"POWEROFF_ON_ERROR"} = 0; $opt{"POWEROFF_ON_ERROR"} = 0;
$opt{"POWEROFF_ON_SUCCESS"} = 0; $opt{"POWEROFF_ON_SUCCESS"} = 0;
$opt{"BUILD_OPTIONS"} = "";
my $version; my $version;
my $install_mods; my $install_mods;
...@@ -63,10 +65,15 @@ sub doprint { ...@@ -63,10 +65,15 @@ sub doprint {
sub dodie { sub dodie {
doprint "CRITICAL FAILURE... ", @_; doprint "CRITICAL FAILURE... ", @_;
if ($opt{"POWEROFF_ON_ERROR"} && defined($opt{"POWER_OFF"})) { if ($opt{"REBOOT_ON_ERROR"}) {
doprint "REBOOTING\n";
`$opt{"POWER_CYCLE"}`;
} elsif ($opt{"POWEROFF_ON_ERROR"} && defined($opt{"POWER_OFF"})) {
doprint "POWERING OFF\n"; doprint "POWERING OFF\n";
`$opt{"POWER_OFF"}`; `$opt{"POWER_OFF"}`;
} }
die @_; die @_;
} }
...@@ -125,7 +132,7 @@ sub wait_for_input ...@@ -125,7 +132,7 @@ sub wait_for_input
return $line; return $line;
} }
sub reboot { sub reboot_to {
run_command "ssh $target '(echo \"savedefault --default=$grub_number --once\" | grub --batch; reboot)'"; run_command "ssh $target '(echo \"savedefault --default=$grub_number --once\" | grub --batch; reboot)'";
} }
...@@ -138,7 +145,7 @@ sub monitor { ...@@ -138,7 +145,7 @@ sub monitor {
my $skip_call_trace = 0; my $skip_call_trace = 0;
if ($doopen2) { if ($doopen2) {
$pid = open2(\*IN, \*OUT, $opt{CONSOLE}); $pid = open2(\*IN, \*OUT, $opt{"CONSOLE"});
if ($pid < 0) { if ($pid < 0) {
dodie "Failed to connect to the console"; dodie "Failed to connect to the console";
} }
...@@ -161,7 +168,7 @@ sub monitor { ...@@ -161,7 +168,7 @@ sub monitor {
$line = wait_for_input(\*IN, 5); $line = wait_for_input(\*IN, 5);
} while (defined($line)); } while (defined($line));
reboot; reboot_to;
for (;;) { for (;;) {
...@@ -229,7 +236,7 @@ sub install { ...@@ -229,7 +236,7 @@ sub install {
} }
# would be nice if scp -r did not follow symbolic links # would be nice if scp -r did not follow symbolic links
if (run_command "cd $opt{TMP_DIR}; tar -cjf $modtar lib/modules/$version") { if (run_command "cd $opt{TMP_DIR} && tar -cjf $modtar lib/modules/$version") {
dodie "making tarball"; dodie "making tarball";
} }
...@@ -253,9 +260,20 @@ sub build { ...@@ -253,9 +260,20 @@ sub build {
my $defconfig = ""; my $defconfig = "";
my $append = ""; my $append = "";
if ($type =~ /^useconfig:(.*)/) {
if (run_command "cp $1 $opt{OUTPUT_DIR}/.config") {
dodie "could not copy $1 to .config";
}
$type = "oldconfig";
}
# old config can ask questions # old config can ask questions
if ($type eq "oldconfig") { if ($type eq "oldconfig") {
$append = "yes ''|"; $append = "yes ''|";
# allow for empty configs
run_command "touch $opt{OUTPUT_DIR}/.config";
if (run_command "mv $opt{OUTPUT_DIR}/.config $opt{OUTPUT_DIR}/config_temp") { if (run_command "mv $opt{OUTPUT_DIR}/.config $opt{OUTPUT_DIR}/config_temp") {
dodie "moving .config"; dodie "moving .config";
} }
...@@ -293,6 +311,21 @@ sub build { ...@@ -293,6 +311,21 @@ sub build {
} }
} }
sub reboot {
# try to reboot normally
if (run_command "ssh $target reboot") {
# nope? power cycle it.
run_command "$opt{POWER_CYCLE}";
}
}
sub halt {
if ((run_command "ssh $target halt") or defined($opt{"POWER_OFF"})) {
# nope? the zap it!
run_command "$opt{POWER_OFF}";
}
}
read_config $ARGV[0]; read_config $ARGV[0];
# mandatory configs # mandatory configs
...@@ -301,6 +334,7 @@ die "SSH_USER not defined\n" if (!defined($opt{"SSH_USER"})); ...@@ -301,6 +334,7 @@ die "SSH_USER not defined\n" if (!defined($opt{"SSH_USER"}));
die "BUILD_DIR not defined\n" if (!defined($opt{"BUILD_DIR"})); die "BUILD_DIR not defined\n" if (!defined($opt{"BUILD_DIR"}));
die "OUTPUT_DIR not defined\n" if (!defined($opt{"OUTPUT_DIR"})); die "OUTPUT_DIR not defined\n" if (!defined($opt{"OUTPUT_DIR"}));
die "BUILD_TARGET not defined\n" if (!defined($opt{"BUILD_TARGET"})); die "BUILD_TARGET not defined\n" if (!defined($opt{"BUILD_TARGET"}));
die "TARGET_IMAGE not defined\n" if (!defined($opt{"TARGET_IMAGE"}));
die "POWER_CYCLE not defined\n" if (!defined($opt{"POWER_CYCLE"})); die "POWER_CYCLE not defined\n" if (!defined($opt{"POWER_CYCLE"}));
die "CONSOLE not defined\n" if (!defined($opt{"CONSOLE"})); die "CONSOLE not defined\n" if (!defined($opt{"CONSOLE"}));
die "LOCALVERSION not defined\n" if (!defined($opt{"LOCALVERSION"})); die "LOCALVERSION not defined\n" if (!defined($opt{"LOCALVERSION"}));
...@@ -388,20 +422,16 @@ for (my $i = 1; $i <= $opt{"NUM_BUILDS"}; $i++) { ...@@ -388,20 +422,16 @@ for (my $i = 1; $i <= $opt{"NUM_BUILDS"}; $i++) {
doprint "*******************************************\n"; doprint "*******************************************\n";
doprint "*******************************************\n"; doprint "*******************************************\n";
# try to reboot normally if ($i != $opt{"NUM_BUILDS"}) {
reboot;
if (run_command "ssh $target reboot") { sleep "$opt{SLEEP_TIME}";
# nope? power cycle it.
run_command "$opt{POWER_CYCLE}";
} }
sleep "$opt{SLEEP_TIME}";
} }
if ($opt{"POWEROFF_ON_SUCCESS"}) { if ($opt{"POWEROFF_ON_SUCCESS"}) {
if (run_command "ssh $target halt" && defined($opt{"POWER_OFF"})) { halt;
# nope? the zap it! } else {
run_command "$opt{POWER_OFF}"; reboot;
}
} }
exit 0; exit 0;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册