| Index: client/tests/kvm/tests/qemu_img.py
|
| diff --git a/client/tests/kvm/tests/qemu_img.py b/client/tests/kvm/tests/qemu_img.py
|
| index d3f7ff10523cc46eb4a6ccbcf481fff92b8392bc..c3449f4f7a0ac2767d945668b315504c2b08a51d 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
|
| from autotest_lib.client.common_lib import utils, error
|
| -import kvm_vm, kvm_utils
|
| +import kvm_vm, kvm_utils, kvm_preprocessing
|
|
|
|
|
| def run_qemu_img(test, params, env):
|
| @@ -162,13 +162,13 @@ def run_qemu_img(test, params, env):
|
| os.remove(output_filename)
|
|
|
|
|
| - def _info(cmd, img, string=None, fmt=None):
|
| + def _info(cmd, img, sub_info=None, fmt=None):
|
| """
|
| Simple wrapper of 'qemu-img info'.
|
|
|
| @param cmd: qemu-img base command.
|
| @param img: image file
|
| - @param string: sub info, say 'backing file'
|
| + @param sub_info: sub info, say 'backing file'
|
| @param fmt: image format
|
| """
|
| cmd += " info"
|
| @@ -182,11 +182,11 @@ def run_qemu_img(test, params, env):
|
| logging.error("Get info of image '%s' failed: %s", img, str(e))
|
| return None
|
|
|
| - if not string:
|
| + if not sub_info:
|
| return output
|
|
|
| - string += ": (.*)"
|
| - matches = re.findall(string, output)
|
| + sub_info += ": (.*)"
|
| + matches = re.findall(sub_info, output)
|
| if matches:
|
| return matches[0]
|
| return None
|
| @@ -223,7 +223,7 @@ def run_qemu_img(test, params, env):
|
| if s != 0:
|
| raise error.TestFail("Create snapshot failed via command: %s;"
|
| "Output is: %s" % (crtcmd, o))
|
| - logging.info("Created snapshot '%s' in '%s'" % (sn_name,image_name))
|
| + logging.info("Created snapshot '%s' in '%s'", sn_name, image_name)
|
| listcmd = cmd
|
| listcmd += " -l %s" % image_name
|
| s, o = commands.getstatusoutput(listcmd)
|
| @@ -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 = env.get_vm(vm_name)
|
| + vm.create()
|
| + timeout = int(params.get("login_timeout", 360))
|
| + session = vm.wait_for_login(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 = env.get_vm(vm_name)
|
| + vm.create()
|
| + timeout = int(params.get("login_timeout", 360))
|
| + session = vm.wait_for_login(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 = env.get_vm(vm_name)
|
| + vm.create()
|
| + timeout = int(params.get("login_timeout", 360))
|
| + session = vm.wait_for_login(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"):
|
| @@ -263,7 +377,7 @@ def run_qemu_img(test, params, env):
|
| if mode == "unsafe":
|
| cmd += " -u"
|
| cmd += " -b %s -F %s %s" % (base_img, backing_fmt, img_name)
|
| - logging.info("Trying to rebase '%s' to '%s'..." % (img_name, base_img))
|
| + logging.info("Trying to rebase '%s' to '%s'...", img_name, base_img)
|
| s, o = commands.getstatusoutput(cmd)
|
| if s != 0:
|
| raise error.TestError("Failed to rebase '%s' to '%s': %s" %
|
|
|