public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: David Huff <dhuff@redhat.com>
To: autotest@test.kernel.org
Cc: kvm@vger.kernel.org, David Huff <dhuff@redhat.com>
Subject: [KVM_AUTOTEST PATCH] repost: Added functionality to the preprocessor to run scripts
Date: Mon, 15 Jun 2009 16:28:19 -0400	[thread overview]
Message-ID: <1245097699-5244-1-git-send-email-dhuff@redhat.com> (raw)
In-Reply-To: <4A36514C.4060707@redhat.com>

This patch adds the processes_command function to the preprocessor which
will run custom scripts before and after a test is executed.

processes_command will export all test parameters as environmental variables
for passing parameters to a custom script.

processes_command uses parameters defined in the config file:
pre_command, pre_command_timeout, pre_command_noncritical
post_command, post_command_timeout, post_commmand_noncritical

command - just defines the script to be run
timeout - timeout to kill script if hung
noncritical - if yes do not fail test if command fails, default no

Currently it is still using the returned status from kvm_utils.run_bg If
kvm_utils.run_bg is changed to throw an exception, process_command will
have to be updated at that time.
---
 client/tests/kvm/kvm_preprocessing.py |   51 ++++++++++++++++++++++++++++++++-
 1 files changed, 50 insertions(+), 1 deletions(-)

diff --git a/client/tests/kvm/kvm_preprocessing.py b/client/tests/kvm/kvm_preprocessing.py
index f60cfe8..c9e941b 100644
--- a/client/tests/kvm/kvm_preprocessing.py
+++ b/client/tests/kvm/kvm_preprocessing.py
@@ -1,4 +1,4 @@
-import sys, os, time, commands, re, logging
+import sys, os, time, commands, re, logging, signal
 from autotest_lib.client.bin import test
 from autotest_lib.client.common_lib import error
 import kvm_vm, kvm_utils
@@ -133,6 +133,43 @@ def postprocess_vm(test, params, env, name):
         vm.destroy(gracefully = params.get("kill_vm_gracefully") == "yes")
 
 
+def process_command(test, params, env, command, command_timeout,
+                    command_noncritical):
+    """
+    Pre- or post- custom commands to be executed before/after a test is run
+
+    @param test: An Autotest test object.
+    @param params: A dict containing all VM and image parameters.
+    @param env: The environment (a dict-like object).
+    @param command: Script containing the command to be run.
+    @param commmand_timeout: Timeout for command execution.
+    @param command_noncritical: if 'yes' test will not fail if command fails.
+    """
+    if command_timeout is None:
+        command_timeout = "600"
+
+    if command_noncritical is None:
+        command_noncritical = "no"
+
+    # export environment vars
+    for k in params.keys():
+        logging.debug("Adding KVM_TEST_%s to Environment" % (k))
+        os.putenv("KVM_TEST_%s" % (k), str(params[k]))
+    # execute command
+    logging.info("Executing custom command '%s'..." % command)
+    timeout = int(command_timeout)
+    (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir, command),
+                                             None,
+                                             logging.debug, 
+                                             "(%s) " % os.path.basename(command),
+                                             timeout = timeout)
+    if status != 0:
+        kvm_utils.safe_kill(pid, signal.SIGTERM)
+        logging.warn("Executing custom  command failed: '%s'..." % command)
+        if command_noncritical != "yes":
+            raise error.TestError, "Executing custom command failed"
+
+
 def process(test, params, env, image_func, vm_func):
     """
     Pre- or post-process VMs and images according to the instructions in params.
@@ -190,6 +227,12 @@ def preprocess(test, params, env):
             vm.destroy()
             del env[key]
 
+    #execute any pre_commands
+    if params.get("pre_command"):
+       process_command(test, params, env, params.get("pre_command"),
+                       params.get("pre_command_timeout"),
+                       params.get("pre_command_noncritical"))
+
     # Preprocess all VMs and images
     process(test, params, env, preprocess_image, preprocess_vm)
 
@@ -242,6 +285,12 @@ def postprocess(test, params, env):
         kvm_utils.run_bg("rm -vf %s" % os.path.join(test.debugdir, "*.ppm"),
                           None, logging.debug, "(rm) ", timeout=5.0)
 
+    #execute any post_commands
+    if params.get("post_command"):
+       process_command(test, params, env, params.get("post_command"),
+                       params.get("post_command_timeout"),
+                       params.get("post_command_noncritical"))
+
 
 def postprocess_on_error(test, params, env):
     """
-- 
1.6.0.6


           reply	other threads:[~2009-06-15 20:28 UTC|newest]

Thread overview: expand[flat|nested]  mbox.gz  Atom feed
 [parent not found: <4A36514C.4060707@redhat.com>]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1245097699-5244-1-git-send-email-dhuff@redhat.com \
    --to=dhuff@redhat.com \
    --cc=autotest@test.kernel.org \
    --cc=kvm@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox