Skip to content

Commit 5b4d868

Browse files
committed
blockdev_commit_cancel:add a new case
New case:checking backing file status after canceling commit operations Signed-off-by: Aihua Liang <[email protected]>
1 parent 37e435b commit 5b4d868

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

qemu/tests/blockdev_commit_cancel.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from avocado.utils import process
2+
3+
from provider import backup_utils, job_utils
4+
from provider.blockdev_commit_base import BlockDevCommitTest
5+
6+
7+
class BlockDevCommitCancel(BlockDevCommitTest):
8+
def generate_tempfile(self, root_dir, filename="data", size="1500M", timeout=360):
9+
backup_utils.generate_tempfile(self.main_vm, root_dir, filename, size, timeout)
10+
self.files_info.append([root_dir, filename])
11+
12+
def commit_snapshot(self):
13+
device = self.params.get_list("device_tag")[0]
14+
device_params = self.params.object_params(device)
15+
snapshot_tags = device_params["snapshot_tags"].split()
16+
self.device_node = self.get_node_name(device)
17+
options = ["base-node", "top-node", "speed"]
18+
arguments = self.params.copy_from_keys(options)
19+
arguments["base-node"] = self.get_node_name(device)
20+
arguments["top-node"] = self.get_node_name(snapshot_tags[-1])
21+
arguments["speed"] = self.params["speed"]
22+
device = self.get_node_name(snapshot_tags[-1])
23+
commit_cmd = backup_utils.block_commit_qmp_cmd
24+
cmd, args = commit_cmd(device, **arguments)
25+
backup_utils.set_default_block_job_options(self.main_vm, args)
26+
job_id = args.get("job-id", device)
27+
self.main_vm.monitor.cmd(cmd, args)
28+
if job_utils.is_block_job_running(self.main_vm, job_id):
29+
self.main_vm.monitor.cmd("block-job-cancel", {"device": job_id})
30+
event = job_utils.get_event_by_condition(
31+
self.main_vm,
32+
"BLOCK_JOB_CANCELLED",
33+
self.params.get_numeric("job_cancelled_timeout", 60),
34+
device=job_id,
35+
)
36+
if event is None:
37+
self.test.fail("Commit job failed to cancel")
38+
39+
def check_backing_rw(self):
40+
base_image = self.get_image_by_tag(self.params["device_tag"])
41+
cmd = "lsof %s" % base_image.image_filename
42+
if "nbd" in base_image.image_filename:
43+
cmd = "lsof -i:%s" % self.params["nbd_port_%s" % self.params["device_tag"]]
44+
elif "rbd" in base_image.image_filename:
45+
cmd = "lsof -i:6800"
46+
output = process.run(cmd, verbose=True).stdout_text.split("\n")[1].split()
47+
pid, fd = (output[1], output[3][:-1])
48+
cmd = "cat /proc/%s/fdinfo/%s" % (pid, fd)
49+
output = process.run(cmd, verbose=True).stdout_text.split("\n")[1].split()[1]
50+
if output[-1] == "2":
51+
self.test.fail("backing image in rw status, should be in ro satus")
52+
53+
def run_test(self):
54+
self.pre_test()
55+
try:
56+
self.commit_snapshot()
57+
self.check_backing_rw()
58+
finally:
59+
self.post_test()
60+
61+
62+
def run(test, params, env):
63+
"""
64+
Block commit base Test
65+
66+
1. boot guest with data disk
67+
2. create 4 snapshots and save file in each snapshot
68+
3. commit snapshot 3 to snapshot 4
69+
4. verify files's md5
70+
"""
71+
72+
block_test = BlockDevCommitCancel(test, params, env)
73+
block_test.run_test()
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
- blockdev_commit_cancel:
2+
type = blockdev_commit_cancel
3+
virt_test_type = qemu
4+
only Linux
5+
images += " data"
6+
force_create_image = yes
7+
force_remove_image = yes
8+
force_create_image_image1 = no
9+
force_remove_image_image1 = no
10+
start_vm = yes
11+
kill_vm = yes
12+
storage_pools = default
13+
storage_type_default = "directory"
14+
storage_pool = default
15+
image_size_data = 2G
16+
image_name_data = data
17+
snapshot_tags = sn1
18+
19+
image_name_sn1 = sn1
20+
backing_sn1 = data
21+
backing_null = yes
22+
image_format_sn1 = qcow2
23+
24+
device_tag = "data"
25+
format = qcow2
26+
speed = 10000000
27+
ceph:
28+
image_format_data = raw
29+
enable_ceph_sn1 = no
30+
nbd:
31+
image_format_data = raw
32+
image_size_data = 2G
33+
nbd_port_data = 10831
34+
enable_nbd_sn1 = no
35+
force_create_image_data = no
36+
remove_image_data = no
37+
image_size_sn1 = ${image_size_data}

0 commit comments

Comments
 (0)