Re: [PATCH 1/3] KVM test: Introduce check_image postprocess directive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01/19/2011 01:45 AM, Lucas Meneghel Rodrigues wrote:
> With check_image_foo = yes, KVM autotest will use
> qemu-img to perform checks on the qcow2 image.
> 
> This new functionality intends to replace the
> script check_image.py. The plan is to supersede most
> of the pre/post scripts in place throughout KVM
> autotest.
> 
> Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
> ---
>  client/tests/kvm/kvm_preprocessing.py  |    3 +-
>  client/tests/kvm/kvm_vm.py             |   62 ++++++++++++++++++++++++++++++++
>  client/tests/kvm/tests_base.cfg.sample |    7 ++--
>  3 files changed, 67 insertions(+), 5 deletions(-)
> 
> diff --git a/client/tests/kvm/kvm_preprocessing.py b/client/tests/kvm/kvm_preprocessing.py
> index 56acf0c..4a6e0f8 100644
> --- a/client/tests/kvm/kvm_preprocessing.py
> +++ b/client/tests/kvm/kvm_preprocessing.py
> @@ -93,11 +93,12 @@ def preprocess_vm(test, params, env, name):
>  def postprocess_image(test, params):
>      """
>      Postprocess a single QEMU image according to the instructions in params.
> -    Currently this function just removes an image if requested.
>  
>      @param test: An Autotest test object.
>      @param params: A dict containing image postprocessing parameters.
>      """
> +    if params.get("check_image") == "yes":
> +        kvm_vm.check_image(params, test.bindir)
>      if params.get("remove_image") == "yes":
>          kvm_vm.remove_image(params, test.bindir)
>  
> diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
> index 18d10ef..767c6d4 100755
> --- a/client/tests/kvm/kvm_vm.py
> +++ b/client/tests/kvm/kvm_vm.py
> @@ -47,6 +47,15 @@ class VMImageMissingError(VMError):
>          return "CD image file not found: %r" % self.filename
>  
>  
> +class VMImageCheckError(VMError):
> +    def __init__(self, filename):
> +        VMError.__init__(self, filename)
> +        self.filename = filename
> +
> +    def __str__(self):
> +        return "Errors found on image: %r" % self.filename
> +
> +
>  class VMBadPATypeError(VMError):
>      def __init__(self, pa_type):
>          VMError.__init__(self, pa_type)
> @@ -239,6 +248,59 @@ def remove_image(params, root_dir):
>          logging.debug("Image file %s not found")
>  
>  
> +def check_image(params, root_dir):
> +    """
> +    Check an image using qemu-img.
> +
> +    @param params: Dictionary containing the test parameters.
> +    @param root_dir: Base directory for relative filenames.
> +
> +    @note: params should contain:
> +           image_name -- the name of the image file, without extension
> +           image_format -- the format of the image (qcow2, raw etc)
> +    """
> +    image_filename = get_image_filename(params, root_dir)
> +    logging.debug("Checking image file %s..." % image_filename)
> +    qemu_img_cmd = kvm_utils.get_path(root_dir,
> +                                      params.get("qemu_img_binary", "qemu-img"))
> +    check_critical = params.get("check_image_critical") == 'yes'
> +    image_is_qcow2 = params.get("image_format") == 'qcow2'
> +    if os.path.exists(image_filename) and image_is_qcow2:
> +        # Verifying if qemu-img supports 'check'
> +        q_result = utils.run(qemu_img_cmd, ignore_status=True)
> +        q_output = q_result.stdout
> +        check_img = True
> +        if not "check" in q_output:
> +            logging.error("qemu-img does not support 'check', "
> +                          "skipping check...")
> +            check_img = False
> +        if not "info" in q_output:
> +            logging.error("qemu-img does not support 'info', "
> +                          "skipping check...")
> +            check_img = False
> +        if check_img:
> +            try:
> +                utils.system("%s info %s" % (qemu_img_cmd, image_filename))
> +            except error.CmdError:
> +                logging.error("Error getting info from image %s",
> +                              image_filename)
> +            try:
> +                utils.system("%s check %s" % (qemu_img_cmd, image_filename))
> +            except error.CmdError:
> +                if check_critical:
> +                    raise VMImageCheckError(image_filename)
> +                else:
> +                    logging.error("Error checking image %s", image_filename)
> +
> +    else:
> +        if not os.path.exists(image_filename):
> +            logging.debug("Image file %s not found, skipping check...",
> +                          image_filename)
> +        elif not image_is_qcow2:
> +            logging.debug("Image file %s not qcow2, skipping check...",
> +                          image_filename)
> +
> +
>  class VM:
>      """
>      This class handles all basic VM operations.
> diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
> index 28064a8..8b67256 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -2357,11 +2357,10 @@ kdump:
>  variants:
>      - @qcow2:
>          image_format = qcow2
> -        post_command += " python scripts/check_image.py;"
> -        post_command_timeout = 600
> -        post_command_noncritical = yes
> +        check_image = yes
> +        check_image_critical = no
>          ioquit:
> -            post_command_noncritical = no
> +            check_image_critical = yes
>      - vmdk:
>          no ioquit
>          only Fedora Ubuntu Windows

I know it's always been this way, but why is image_check noncritical?

If we just don't want the image_check exception to override the test's
failure exception, we can either set

image_check_critical = yes
image_check_critical_on_error = no

or, better yet, we can ignore all exceptions raised during
postprocessing after test failure (in kvm.py).
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux