From patchwork Tue Jan 18 23:45:51 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Meneghel Rodrigues X-Patchwork-Id: 487821 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p0INk1iP027896 for ; Tue, 18 Jan 2011 23:46:04 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752953Ab1ARXqA (ORCPT ); Tue, 18 Jan 2011 18:46:00 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39640 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752099Ab1ARXp7 (ORCPT ); Tue, 18 Jan 2011 18:45:59 -0500 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id p0INjw6U014456 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 18 Jan 2011 18:45:58 -0500 Received: from freedom.redhat.com (vpn-9-4.rdu.redhat.com [10.11.9.4]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p0INjsX4014783; Tue, 18 Jan 2011 18:45:57 -0500 From: Lucas Meneghel Rodrigues To: autotest@test.kernel.org Cc: kvm@vger.kernel.org, Lucas Meneghel Rodrigues Subject: [PATCH 1/3] KVM test: Introduce check_image postprocess directive Date: Tue, 18 Jan 2011 21:45:51 -0200 Message-Id: <1295394353-11688-2-git-send-email-lmr@redhat.com> In-Reply-To: <1295394353-11688-1-git-send-email-lmr@redhat.com> References: <1295394353-11688-1-git-send-email-lmr@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Tue, 18 Jan 2011 23:46:04 +0000 (UTC) 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