diff mbox

[KVM_AUTOTEST] Added functionality to the preprocessor to run scripts

Message ID 1243372101-11455-1-git-send-email-dhuff@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

David Huff May 26, 2009, 9:08 p.m. UTC
This patch will run pre and post scripts
defined in config file with the parameter pre_command
and post_command post_command.

Also exports all the prameters in preprocess for passing
arguments to the script.
---
 client/tests/kvm_runtest_2/kvm_preprocessing.py |   34 +++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

Comments

Avi Kivity May 31, 2009, 11:23 a.m. UTC | #1
David Huff wrote:
> This patch will run pre and post scripts
> defined in config file with the parameter pre_command
> and post_command post_command.
>
> Also exports all the prameters in preprocess for passing
> arguments to the script.
>  
> +   #execute any pre_commands
> +    pre_command = params.get("pre_command")
> +    if pre_command:
> +        # export environment vars
> +        for k in params.keys():
> +            kvm_log.info("Adding KVM_TEST_%s to Environment" % (k))
> +            os.putenv("KVM_TEST_%s" % (k), str(params[k]))
> +        # execute command
> +        kvm_log.info("Executing command '%s'..." % pre_command)
> +        timeout = int(params.get("pre_commmand_timeout", "600"))
> +        (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir, pre_command),
> +                                                 None, kvm_log.debug, "(pre_command) ", timeout=timeout)
> +        if status != 0:
> +            kvm_utils.safe_kill(pid, signal.SIGTERM)
> +            raise error.TestError, "Custom processing pre_command failed"
>   

kvm_utils.run_bg should throw an exception instead of returning status.

But if status != 0, will there actually be a pid to kill?
diff mbox

Patch

diff --git a/client/tests/kvm_runtest_2/kvm_preprocessing.py b/client/tests/kvm_runtest_2/kvm_preprocessing.py
index c9eb35d..07bfdeb 100644
--- a/client/tests/kvm_runtest_2/kvm_preprocessing.py
+++ b/client/tests/kvm_runtest_2/kvm_preprocessing.py
@@ -169,6 +169,7 @@  def preprocess(test, params, env):
     params -- a dict containing all VM and image parameters
     env -- the environment (a dict-like object)
 
+    Also, runs any setup command defined in the parameter pre_command
     Also, collect some host information, such as the KVM version.
     """
     # Verify the identities of all living VMs
@@ -192,6 +193,22 @@  def preprocess(test, params, env):
             vm.destroy()
             del env[key]
 
+   #execute any pre_commands
+    pre_command = params.get("pre_command")
+    if pre_command:
+        # export environment vars
+        for k in params.keys():
+            kvm_log.info("Adding KVM_TEST_%s to Environment" % (k))
+            os.putenv("KVM_TEST_%s" % (k), str(params[k]))
+        # execute command
+        kvm_log.info("Executing command '%s'..." % pre_command)
+        timeout = int(params.get("pre_commmand_timeout", "600"))
+        (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir, pre_command),
+                                                 None, kvm_log.debug, "(pre_command) ", timeout=timeout)
+        if status != 0:
+            kvm_utils.safe_kill(pid, signal.SIGTERM)
+            raise error.TestError, "Custom processing pre_command failed"
+
     # Preprocess all VMs and images
     process(test, params, env, preprocess_image, preprocess_vm)
 
@@ -232,6 +249,8 @@  def postprocess(test, params, env):
     test -- an Autotest test object
     params -- a dict containing all VM and image parameters
     env -- the environment (a dict-like object)
+
+    Also, runs any command defined in the parameter post_command
     """
     process(test, params, env, postprocess_image, postprocess_vm)
 
@@ -241,6 +260,21 @@  def postprocess(test, params, env):
         kvm_log.debug("'keep_ppm_files' not specified; removing all PPM files from results dir...")
         kvm_utils.run_bg("rm -vf %s" % os.path.join(test.debugdir, "*.ppm"), None, kvm_log.debug, "(rm) ", timeout=5.0)
 
+    #execute any post_commands
+    post_command = params.get("post_command")
+    if post_command:
+        # export environment vars
+        for k in params.keys():
+            kvm_log.info("Adding KVM_TEST_%s to Environment" % (k))
+            os.putenv("KVM_TEST_%s" % (k), str(params[k]))
+        #execute command
+        kvm_log.info("Executing command '%s'..." % post_command)
+        timeout = int(params.get("post_commmand_timeout", "600"))
+        (status, pid, output) = kvm_utils.run_bg("cd %s; %s" % (test.bindir, post_command),
+                                                 None, kvm_log.debug, "(pre_command) ", timeout=timeout)
+        if status != 0:
+            kvm_utils.safe_kill(pid, signal.SIGTERM)
+            raise error.TestError, "Custom processing command failed"
 
 def postprocess_on_error(test, params, env):
     """Perform postprocessing operations required only if the test failed.