From patchwork Tue Dec 21 19:43:52 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Meneghel Rodrigues X-Patchwork-Id: 424951 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 oBLJi4TJ007283 for ; Tue, 21 Dec 2010 19:44:05 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751917Ab0LUToA (ORCPT ); Tue, 21 Dec 2010 14:44:00 -0500 Received: from mx1.redhat.com ([209.132.183.28]:28325 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751223Ab0LUTn7 (ORCPT ); Tue, 21 Dec 2010 14:43:59 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oBLJhu9X001424 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 21 Dec 2010 14:43:57 -0500 Received: from freedom.redhat.com (vpn-10-239.rdu.redhat.com [10.11.10.239]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id oBLJhsSc012615; Tue, 21 Dec 2010 14:43:55 -0500 From: Lucas Meneghel Rodrigues To: autotest@test.kernel.org Cc: kvm@vger.kernel.org, Lucas Meneghel Rodrigues , Tang Chen Subject: [PATCH] KVM-test: Add a qemu-img commit test Date: Tue, 21 Dec 2010 17:43:52 -0200 Message-Id: <1292960632-22705-1-git-send-email-lmr@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 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.3 (demeter1.kernel.org [140.211.167.41]); Tue, 21 Dec 2010 19:44:05 +0000 (UTC) diff --git a/client/tests/kvm/tests/qemu_img.py b/client/tests/kvm/tests/qemu_img.py index d3f7ff1..39b7427 100644 --- a/client/tests/kvm/tests/qemu_img.py +++ b/client/tests/kvm/tests/qemu_img.py @@ -1,6 +1,6 @@ -import re, os, logging, commands +import re, os, logging, commands, string from autotest_lib.client.common_lib import utils, error -import kvm_vm, kvm_utils +import kvm_vm, kvm_utils, kvm_test_utils, kvm_preprocessing def run_qemu_img(test, params, env): @@ -243,10 +243,124 @@ def run_qemu_img(test, params, env): def commit_test(cmd): """ Subcommand 'qemu-img commit' test. + 1) Create a backing file of the qemu harddisk specified by image_name. + 2) Start a VM using the backing file as its harddisk. + 3) Touch a file "commit_testfile" in the backing_file, and shutdown the + VM. + 4) Make sure touching the file does not affect the original harddisk. + 5) Commit the change to the original harddisk by executing + "qemu-img commit" command. + 6) Start the VM using the original harddisk. + 7) Check if the file "commit_testfile" exists. @param cmd: qemu-img base command. """ - pass + cmd += " commit" + + logging.info("Commit testing started!") + image_name = params.get("image_name", "image") + image_format = params.get("image_format", "qcow2") + backing_file_name = "%s_bak" % (image_name) + + try: + # Remove the existing backing file + backing_file = "%s.%s" % (backing_file_name, image_format) + if os.path.isfile(backing_file): + os.remove(backing_file) + + # Create the new backing file + create_cmd = "qemu-img create -b %s.%s -f %s %s.%s" % (image_name, + image_format, + image_format, + backing_file_name, + image_format) + try: + utils.system(create_cmd) + except error.CmdError, e: + raise error.TestFail("Could not create a backing file!") + logging.info("backing_file created!") + + # Set the qemu harddisk to the backing file + logging.info("Original image_name is: %s", params.get('image_name')) + params['image_name'] = backing_file_name + logging.info("Param image_name changed to: %s", + params.get('image_name')) + + # Start a new VM, using backing file as its harddisk + vm_name = params.get('main_vm') + kvm_preprocessing.preprocess_vm(test, params, env, vm_name) + vm = kvm_utils.env_get_vm(env, vm_name) + vm.create() + timeout = int(params.get("login_timeout", 360)) + session = kvm_test_utils.wait_for_login(vm, timeout=timeout) + + # Do some changes to the backing_file harddisk + try: + output = session.cmd("touch /commit_testfile") + logging.info("Output of touch /commit_testfile: %s", output) + output = session.cmd("ls / | grep commit_testfile") + logging.info("Output of ls / | grep commit_testfile: %s", + output) + except Exception, e: + raise error.TestFail("Could not create commit_testfile in the " + "backing file %s", e) + vm.destroy() + + # Make sure there is no effect on the original harddisk + # First, set the harddisk back to the original one + logging.info("Current image_name is: %s", params.get('image_name')) + params['image_name'] = image_name + logging.info("Param image_name reverted to: %s", + params.get('image_name')) + + # Second, Start a new VM, using image_name as its harddisk + # Here, the commit_testfile should not exist + vm_name = params.get('main_vm') + kvm_preprocessing.preprocess_vm(test, params, env, vm_name) + vm = kvm_utils.env_get_vm(env, vm_name) + vm.create() + timeout = int(params.get("login_timeout", 360)) + session = kvm_test_utils.wait_for_login(vm, timeout=timeout) + try: + output = session.cmd("[ ! -e /commit_testfile ] && echo $?") + logging.info("Output of [ ! -e /commit_testfile ] && echo $?: " + "%s", output) + except: + output = session.cmd("rm -f /commit_testfile") + raise error.TestFail("The commit_testfile exists on the " + "original file") + vm.destroy() + + # Excecute the commit command + logging.info("Commiting image") + cmitcmd = "%s -f %s %s.%s" % (cmd, image_format, backing_file_name, + image_format) + try: + utils.system(cmitcmd) + except error.CmdError, e: + raise error.TestFail("Could not commit the backing file") + + # Start a new VM, using image_name as its harddisk + vm_name = params.get('main_vm') + kvm_preprocessing.preprocess_vm(test, params, env, vm_name) + vm = kvm_utils.env_get_vm(env, vm_name) + vm.create() + timeout = int(params.get("login_timeout", 360)) + session = kvm_test_utils.wait_for_login(vm, timeout=timeout) + try: + output = session.cmd("[ -e /commit_testfile ] && echo $?") + logging.info("Output of [ -e /commit_testfile ] && echo $?: %s", + output) + session.cmd("rm -f /commit_testfile") + except: + raise error.TestFail("Could not find commit_testfile after a " + "commit") + vm.destroy() + + finally: + # Remove the backing file + if os.path.isfile(backing_file): + os.remove(backing_file) def _rebase(cmd, img_name, base_img, backing_fmt, mode="unsafe"):