diff --git a/qemu/tests/cfg/qemu_disk_img.cfg b/qemu/tests/cfg/qemu_disk_img.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b96a448700a2b02ca342ca423a597d78aafab3eb --- /dev/null +++ b/qemu/tests/cfg/qemu_disk_img.cfg @@ -0,0 +1,38 @@ +# Notes: +# For windows guest, you can download md5sum.exe from http://www.brothersoft.com/md5sum-81781.html, +# then add parents dir to $PATH or config md5sum in share/cfg/guest-os/Windows.cfg; +- qemu_disk_img: + only qcow2 + virt_test_type = qemu + type = qemu_disk_img + image_chain= "image1" + kill_vm = yes + start_vm = no + image_size = 20G + # md5sum binary path + md5sum = "md5sum" + force_create_image = no + backup_image_before_testing = yes + restore_image_before_testing = yes + tmp_file_name = /tmp/test.img + file_create_cmd = "dd if=/dev/urandom of=%s bs=4k count=250" + variants: + - convert: + type = qemu_disk_img_convert + guest_file_name = /tmp/test.img + variants: + - base_to_qcow2: + image_convert = "image1" + convert_name_image1 = "images/image1_to_qcow2" + convert_format_image1 = "qcow2" + - base_to_raw: + image_convert = "image1" + convert_name_image1 = "images/image1_to_raw" + convert_format_image1 = "raw" + - snapshot_to_qcow2: + image_convert = "sn1" + image_chain += " sn1" + image_name_sn1 = "images/sn1" + image_format_sn1 = "qcow2" + convert_name_sn1 = "images/sn1_to_qcow2" + convert_format_sn1 = "qcow2" diff --git a/qemu/tests/qemu_disk_img_convert.py b/qemu/tests/qemu_disk_img_convert.py new file mode 100644 index 0000000000000000000000000000000000000000..e4f557f94fc93e486485cd7d082d588c10874a9b --- /dev/null +++ b/qemu/tests/qemu_disk_img_convert.py @@ -0,0 +1,62 @@ +import logging +from autotest.client import utils +from autotest.client.shared import error +from virttest import storage +from qemu.tests import qemu_disk_img + + +class ConvertTest(qemu_disk_img.QemuImgTest): + + def __init__(self, test, params, env): + self.tag = params["image_convert"] + t_params = params.object_params(self.tag) + super(ConvertTest, self).__init__(test, t_params, env, self.tag) + + @error.context_aware + def convert(self, t_params={}): + """ + create image file from one format to another format + """ + error.context("convert image file", logging.info) + params = self.params.object_params(self.tag) + params.update(t_params) + cache_mode = params.get("cache_mode") + super(ConvertTest, self).convert(params, self.data_dir, cache_mode) + params["image_name"] = params["convert_name"] + params["image_format"] = params["convert_format"] + converted = storage.get_image_filename(params, self.data_dir) + utils.run("sync") + self.trash.append(converted) + return params + +def run_qemu_disk_img_convert(test, params, env): + """ + 'qemu-img' convert functions test: + + @param test: Qemu test object + @param params: Dictionary with the test parameters + @param env: Dictionary with test environment. + """ + + base_image = params.get("images", "image1").split()[0] + params.update( + {"image_name_%s" % base_image: params["image_name"], + "image_format_%s" % base_image: params["image_format"]}) + t_file = params["guest_file_name"] + convert_test = ConvertTest(test, params, env) + n_params = convert_test.create_snapshot() + convert_test.start_vm(n_params) + + # save file md5sum before conversion + ret = convert_test.save_file(t_file) + if not ret: + raise error.TestError("Fail to save tmp file") + convert_test.destroy_vm() + n_params = convert_test.convert() + convert_test.start_vm(n_params) + + # check md5sum after conversion + ret = convert_test.check_file(t_file) + if not ret: + raise error.TestError("image content changed after convert") + convert_test.clean()