OSDN Git Service

ktest: Add PRE/POST_KTEST and TEST options
authorSteven Rostedt <srostedt@redhat.com>
Thu, 19 Jul 2012 19:18:27 +0000 (15:18 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 19 Jul 2012 19:18:27 +0000 (15:18 -0400)
In order to let the user add commands before and after ktest runs, the
PRE_KTEST and POST_KTEST options are defined. They hold shell commands
that will execute befor ktest runs its first test, as well as when it
completed its last test.

The PRE_TEST and POST_TEST will be run befor and after (respectively)
for a given test. They can either be global (done for all tests) or
defined by a single test.

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

index a40af07..31b9416 100755 (executable)
@@ -77,6 +77,11 @@ my $output_config;
 my $test_type;
 my $build_type;
 my $build_options;
+my $final_post_ktest;
+my $pre_ktest;
+my $post_ktest;
+my $pre_test;
+my $post_test;
 my $pre_build;
 my $post_build;
 my $pre_build_die;
@@ -197,6 +202,10 @@ my %option_map = (
     "OUTPUT_DIR"               => \$outputdir,
     "BUILD_DIR"                        => \$builddir,
     "TEST_TYPE"                        => \$test_type,
+    "PRE_KTEST"                        => \$pre_ktest,
+    "POST_KTEST"               => \$post_ktest,
+    "PRE_TEST"                 => \$pre_test,
+    "POST_TEST"                        => \$post_test,
     "BUILD_TYPE"               => \$build_type,
     "BUILD_OPTIONS"            => \$build_options,
     "PRE_BUILD"                        => \$pre_build,
@@ -1273,6 +1282,10 @@ sub save_logs {
 
 sub fail {
 
+       if (defined($post_test)) {
+               run_command $post_test;
+       }
+
        if ($die_on_failure) {
                dodie @_;
        }
@@ -1937,6 +1950,10 @@ sub halt {
 sub success {
     my ($i) = @_;
 
+    if (defined($post_test)) {
+       run_command $post_test;
+    }
+
     $successes++;
 
     my $name = "";
@@ -3518,6 +3535,18 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) {
 
     $start_minconfig_defined = 1;
 
+    # The first test may override the PRE_KTEST option
+    if (defined($pre_ktest) && $i == 1) {
+       doprint "\n";
+       run_command $pre_ktest;
+    }
+
+    # Any test can override the POST_KTEST option
+    # The last test takes precedence.
+    if (defined($post_ktest)) {
+       $final_post_ktest = $post_ktest;
+    }
+
     if (!defined($start_minconfig)) {
        $start_minconfig_defined = 0;
        $start_minconfig = $minconfig;
@@ -3572,6 +3601,10 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) {
     doprint "\n\n";
     doprint "RUNNING TEST $i of $opt{NUM_TESTS} with option $test_type $run_type$installme\n\n";
 
+    if (defined($pre_test)) {
+       run_command $pre_test;
+    }
+
     unlink $dmesg;
     unlink $buildlog;
     unlink $testlog;
@@ -3637,6 +3670,10 @@ for (my $i = 1; $i <= $opt{"NUM_TESTS"}; $i++) {
     success $i;
 }
 
+if (defined($final_post_ktest)) {
+    run_command $final_post_ktest;
+}
+
 if ($opt{"POWEROFF_ON_SUCCESS"}) {
     halt;
 } elsif ($opt{"REBOOT_ON_SUCCESS"} && !do_not_reboot && $reboot_success) {
index cf362b3..4472452 100644 (file)
 # DEFAULTS
 # DEFAULTS SKIP
 
+# If you want to execute some command before the first test runs
+# you can set this option. Note, it can be set as a default option
+# or an option in the first test case. All other test cases will
+# ignore it. If both the default and first test have this option
+# set, then the first test will take precedence.
+#
+# default (undefined)
+#PRE_KTEST = ${SSH} ~/set_up_test
+
+# If you want to execute some command after all the tests have
+# completed, you can set this option. Note, it can be set as a
+# default or any test case can override it. If multiple test cases
+# set this option, then the last test case that set it will take
+# precedence
+#
+# default (undefined)
+#POST_KTEST = ${SSH} ~/dismantle_test
+
 # The default test type (default test)
 # The test types may be:
 #   build   - only build the kernel, do nothing else
 # (default 0)
 #NO_INSTALL = 1
 
+# If there is a command that you want to run before the individual test
+# case executes, then you can set this option
+#
+# default (undefined)
+#PRE_TEST = ${SSH} reboot_to_special_kernel
+
+# If there is a command you want to run after the individual test case
+# completes, then you can set this option.
+#
+# default (undefined)
+#POST_TEST = cd ${BUILD_DIR}; git reset --hard
+
 # If there is a script that you require to run before the build is done
 # you can specify it with PRE_BUILD.
 #