mirror of
https://github.com/qemu/qemu.git
synced 2024-12-01 07:43:35 +08:00
iotests/image-fleecing: add test-case for copy-before-write filter
New fleecing method becomes available: copy-before-write filter. Actually we don't need backup job to setup image fleecing. Add test for new recommended way of image fleecing. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-Id: <20210824083856.17408-34-vsementsov@virtuozzo.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
This commit is contained in:
parent
32f84b40ab
commit
c060598569
@ -48,7 +48,7 @@ remainder = [('0xd5', '0x108000', '32k'), # Right-end of partial-left [1]
|
||||
('0xdc', '32M', '32k'), # Left-end of partial-right [2]
|
||||
('0xcd', '0x3ff0000', '64k')] # patterns[3]
|
||||
|
||||
def do_test(base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
def do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
log('--- Setting up images ---')
|
||||
log('')
|
||||
|
||||
@ -67,6 +67,7 @@ def do_test(base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
|
||||
src_node = 'source'
|
||||
tmp_node = 'temp'
|
||||
qom_path = '/machine/peripheral/sda'
|
||||
vm.add_blockdev(f'driver={iotests.imgfmt},file.driver=file,'
|
||||
f'file.filename={base_img_path},node-name={src_node}')
|
||||
vm.add_device('virtio-scsi')
|
||||
@ -90,12 +91,22 @@ def do_test(base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
'backing': src_node,
|
||||
}))
|
||||
|
||||
# Establish COW from source to fleecing node
|
||||
log(vm.qmp('blockdev-backup',
|
||||
job_id='fleecing',
|
||||
device=src_node,
|
||||
target=tmp_node,
|
||||
sync='none'))
|
||||
# Establish CBW from source to fleecing node
|
||||
if use_cbw:
|
||||
log(vm.qmp('blockdev-add', {
|
||||
'driver': 'copy-before-write',
|
||||
'node-name': 'fl-cbw',
|
||||
'file': src_node,
|
||||
'target': tmp_node
|
||||
}))
|
||||
|
||||
log(vm.qmp('qom-set', path=qom_path, property='drive', value='fl-cbw'))
|
||||
else:
|
||||
log(vm.qmp('blockdev-backup',
|
||||
job_id='fleecing',
|
||||
device=src_node,
|
||||
target=tmp_node,
|
||||
sync='none'))
|
||||
|
||||
log('')
|
||||
log('--- Setting up NBD Export ---')
|
||||
@ -124,7 +135,7 @@ def do_test(base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
for p in overwrite:
|
||||
cmd = 'write -P%s %s %s' % p
|
||||
log(cmd)
|
||||
log(vm.hmp_qemu_io('/machine/peripheral/sda', cmd, qdev=True))
|
||||
log(vm.hmp_qemu_io(qom_path, cmd, qdev=True))
|
||||
|
||||
log('')
|
||||
log('--- Verifying Data ---')
|
||||
@ -139,10 +150,15 @@ def do_test(base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
log('--- Cleanup ---')
|
||||
log('')
|
||||
|
||||
log(vm.qmp('block-job-cancel', device='fleecing'))
|
||||
e = vm.event_wait('BLOCK_JOB_CANCELLED')
|
||||
assert e is not None
|
||||
log(e, filters=[iotests.filter_qmp_event])
|
||||
if use_cbw:
|
||||
log(vm.qmp('qom-set', path=qom_path, property='drive', value=src_node))
|
||||
log(vm.qmp('blockdev-del', node_name='fl-cbw'))
|
||||
else:
|
||||
log(vm.qmp('block-job-cancel', device='fleecing'))
|
||||
e = vm.event_wait('BLOCK_JOB_CANCELLED')
|
||||
assert e is not None
|
||||
log(e, filters=[iotests.filter_qmp_event])
|
||||
|
||||
log(vm.qmp('nbd-server-stop'))
|
||||
log(vm.qmp('blockdev-del', node_name=tmp_node))
|
||||
vm.shutdown()
|
||||
@ -160,13 +176,17 @@ def do_test(base_img_path, fleece_img_path, nbd_sock_path, vm):
|
||||
log('Done')
|
||||
|
||||
|
||||
def test():
|
||||
def test(use_cbw):
|
||||
with iotests.FilePath('base.img') as base_img_path, \
|
||||
iotests.FilePath('fleece.img') as fleece_img_path, \
|
||||
iotests.FilePath('nbd.sock',
|
||||
base_dir=iotests.sock_dir) as nbd_sock_path, \
|
||||
iotests.VM() as vm:
|
||||
do_test(base_img_path, fleece_img_path, nbd_sock_path, vm)
|
||||
do_test(use_cbw, base_img_path, fleece_img_path, nbd_sock_path, vm)
|
||||
|
||||
|
||||
test()
|
||||
log('=== Test backup(sync=none) based fleecing ===\n')
|
||||
test(False)
|
||||
|
||||
log('=== Test filter based fleecing ===\n')
|
||||
test(True)
|
||||
|
@ -1,3 +1,5 @@
|
||||
=== Test backup(sync=none) based fleecing ===
|
||||
|
||||
--- Setting up images ---
|
||||
|
||||
Done
|
||||
@ -65,3 +67,73 @@ read -P0xdc 32M 32k
|
||||
read -P0xcd 0x3ff0000 64k
|
||||
|
||||
Done
|
||||
=== Test filter based fleecing ===
|
||||
|
||||
--- Setting up images ---
|
||||
|
||||
Done
|
||||
|
||||
--- Launching VM ---
|
||||
|
||||
Done
|
||||
|
||||
--- Setting up Fleecing Graph ---
|
||||
|
||||
{"return": {}}
|
||||
{"return": {}}
|
||||
{"return": {}}
|
||||
|
||||
--- Setting up NBD Export ---
|
||||
|
||||
{"return": {}}
|
||||
{"return": {}}
|
||||
|
||||
--- Sanity Check ---
|
||||
|
||||
read -P0x5d 0 64k
|
||||
read -P0xd5 1M 64k
|
||||
read -P0xdc 32M 64k
|
||||
read -P0xcd 0x3ff0000 64k
|
||||
read -P0 0x00f8000 32k
|
||||
read -P0 0x2010000 32k
|
||||
read -P0 0x3fe0000 64k
|
||||
|
||||
--- Testing COW ---
|
||||
|
||||
write -P0xab 0 64k
|
||||
{"return": ""}
|
||||
write -P0xad 0x00f8000 64k
|
||||
{"return": ""}
|
||||
write -P0x1d 0x2008000 64k
|
||||
{"return": ""}
|
||||
write -P0xea 0x3fe0000 64k
|
||||
{"return": ""}
|
||||
|
||||
--- Verifying Data ---
|
||||
|
||||
read -P0x5d 0 64k
|
||||
read -P0xd5 1M 64k
|
||||
read -P0xdc 32M 64k
|
||||
read -P0xcd 0x3ff0000 64k
|
||||
read -P0 0x00f8000 32k
|
||||
read -P0 0x2010000 32k
|
||||
read -P0 0x3fe0000 64k
|
||||
|
||||
--- Cleanup ---
|
||||
|
||||
{"return": {}}
|
||||
{"return": {}}
|
||||
{"return": {}}
|
||||
{"return": {}}
|
||||
|
||||
--- Confirming writes ---
|
||||
|
||||
read -P0xab 0 64k
|
||||
read -P0xad 0x00f8000 64k
|
||||
read -P0x1d 0x2008000 64k
|
||||
read -P0xea 0x3fe0000 64k
|
||||
read -P0xd5 0x108000 32k
|
||||
read -P0xdc 32M 32k
|
||||
read -P0xcd 0x3ff0000 64k
|
||||
|
||||
Done
|
||||
|
Loading…
Reference in New Issue
Block a user