ktest: Added force stop after success and failure
authorSteven Rostedt <srostedt@redhat.com>
Tue, 9 Nov 2010 17:55:40 +0000 (12:55 -0500)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 18 Nov 2010 16:23:12 +0000 (11:23 -0500)
Added the options STOP_AFTER_SUCCESS and STOP_AFTER_FAILURE to
allow the user to give a time (in seconds) to stop the monitor
after a stack trace or login has been detected. Sometimes the
kernel constantly prints out to the console and this may cause
the test to run indefinitely.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
tools/testing/ktest/ktest.pl
tools/testing/ktest/sample.conf

index 52e45b8..6e85973 100755 (executable)
@@ -45,6 +45,8 @@ $default{"DIE_ON_FAILURE"}    = 1;
 $default{"SSH_EXEC"}           = "ssh \$SSH_USER\@\$MACHINE \$SSH_COMMAND";
 $default{"SCP_TO_TARGET"}      = "scp \$SRC_FILE \$SSH_USER\@\$MACHINE:\$DST_FILE";
 $default{"REBOOT"}             = "ssh \$SSH_USER\@\$MACHINE reboot";
+$default{"STOP_AFTER_SUCCESS"} = 10;
+$default{"STOP_AFTER_FAILURE"} = 60;
 
 my $version;
 my $machine;
@@ -94,6 +96,8 @@ my $timeout;
 my $booted_timeout;
 my $console;
 my $success_line;
+my $stop_after_success;
+my $stop_after_failure;
 my $build_target;
 my $target_image;
 my $localversion;
@@ -601,6 +605,9 @@ sub monitor {
 
     reboot_to;
 
+    my $success_start;
+    my $failure_start;
+
     for (;;) {
 
        if ($booted) {
@@ -619,6 +626,16 @@ sub monitor {
 
        if ($full_line =~ /$success_line/) {
            $booted = 1;
+           $success_start = time;
+       }
+
+       if ($booted && defined($stop_after_success) &&
+           $stop_after_success >= 0) {
+           my $now = time;
+           if ($now - $success_start >= $stop_after_success) {
+               doprint "Test forced to stop after $stop_after_success seconds after success\n";
+               last;
+           }
        }
 
        if ($full_line =~ /\[ backtrace testing \]/) {
@@ -626,7 +643,19 @@ sub monitor {
        }
 
        if ($full_line =~ /call trace:/i) {
-           $bug = 1 if (!$skip_call_trace);
+           if (!$skip_call_trace) {
+               $bug = 1;
+               $failure_start = time;
+           }
+       }
+
+       if ($bug && defined($stop_after_failure) &&
+           $stop_after_failure >= 0) {
+           my $now = time;
+           if ($now - $failure_start >= $stop_after_failure) {
+               doprint "Test forced to stop after $stop_after_failure seconds after failure\n";
+               last;
+           }
        }
 
        if ($full_line =~ /\[ end of backtrace testing \]/) {
@@ -1687,6 +1716,8 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) {
     $booted_timeout = set_test_option("BOOTED_TIMEOUT", $i);
     $console = set_test_option("CONSOLE", $i);
     $success_line = set_test_option("SUCCESS_LINE", $i);
+    $stop_after_success = set_test_option("STOP_AFTER_SUCCESS", $i);
+    $stop_after_failure = set_test_option("STOP_AFTER_FAILURE", $i);
     $build_target = set_test_option("BUILD_TARGET", $i);
     $ssh_exec = set_test_option("SSH_EXEC", $i);
     $scp_to_target = set_test_option("SCP_TO_TARGET", $i);
index e127274..3408c59 100644 (file)
 # (default "login:")
 #SUCCESS_LINE = login:
 
+# In case the console constantly fills the screen, having
+# a specified time to stop the test after success is recommended.
+# (in seconds)
+# (default 10)
+#STOP_AFTER_SUCCESS = 10
+
+# In case the console constantly fills the screen, having
+# a specified time to stop the test after failure is recommended.
+# (in seconds)
+# (default 60)
+#STOP_AFTER_FAILURE = 60
+
 # Stop testing if a build fails. If set, the script will end if
 # a failure is detected, otherwise it will save off the .config,
 # dmesg and bootlog in a directory called