Like qemu-img, qemu-io returning 0 should be the norm and not the exception. Remove all calls to qemu_io_silent that just assert the return code is zero (That's every last call, as it turns out), and replace them with a normal qemu_io() call. qemu_io_silent_check() appeared to have been unused already. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Hanna Reitz <hreitz@redhat.com> Message-Id: <20220418211504.943969-12-jsnow@redhat.com> Signed-off-by: Hanna Reitz <hreitz@redhat.com>
		
			
				
	
	
		
			117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
# group: rw quick
 | 
						|
#
 | 
						|
# Copy-on-read tests using a COR filter with a bottom node
 | 
						|
#
 | 
						|
# Copyright (C) 2018 Red Hat, Inc.
 | 
						|
# Copyright (c) 2020 Virtuozzo International GmbH
 | 
						|
#
 | 
						|
# This program is free software; you can redistribute it and/or modify
 | 
						|
# it under the terms of the GNU General Public License as published by
 | 
						|
# the Free Software Foundation; either version 2 of the License, or
 | 
						|
# (at your option) any later version.
 | 
						|
#
 | 
						|
# This program is distributed in the hope that it will be useful,
 | 
						|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
# GNU General Public License for more details.
 | 
						|
#
 | 
						|
# You should have received a copy of the GNU General Public License
 | 
						|
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
#
 | 
						|
 | 
						|
import iotests
 | 
						|
from iotests import log, qemu_img, qemu_io
 | 
						|
 | 
						|
# Need backing file support
 | 
						|
iotests.script_initialize(supported_fmts=['qcow2'],
 | 
						|
                          supported_platforms=['linux'])
 | 
						|
 | 
						|
log('')
 | 
						|
log('=== Copy-on-read across nodes ===')
 | 
						|
log('')
 | 
						|
 | 
						|
# This test is similar to the 216 one by Hanna Reitz <hreitz@redhat.com>
 | 
						|
# The difference is that this test case involves a bottom node to the
 | 
						|
# COR filter driver.
 | 
						|
 | 
						|
with iotests.FilePath('base.img') as base_img_path, \
 | 
						|
     iotests.FilePath('mid.img') as mid_img_path, \
 | 
						|
     iotests.FilePath('top.img') as top_img_path, \
 | 
						|
     iotests.VM() as vm:
 | 
						|
 | 
						|
    log('--- Setting up images ---')
 | 
						|
    log('')
 | 
						|
 | 
						|
    qemu_img('create', '-f', iotests.imgfmt, base_img_path, '64M')
 | 
						|
    qemu_io(base_img_path, '-c', 'write -P 1 0M 1M')
 | 
						|
    qemu_io(base_img_path, '-c', 'write -P 1 3M 1M')
 | 
						|
    qemu_img('create', '-f', iotests.imgfmt, '-b', base_img_path,
 | 
						|
             '-F', iotests.imgfmt, mid_img_path)
 | 
						|
    qemu_io(mid_img_path, '-c', 'write -P 3 2M 1M')
 | 
						|
    qemu_io(mid_img_path, '-c', 'write -P 3 4M 1M')
 | 
						|
    qemu_img('create', '-f', iotests.imgfmt, '-b', mid_img_path,
 | 
						|
             '-F', iotests.imgfmt, top_img_path)
 | 
						|
    qemu_io(top_img_path, '-c', 'write -P 2 1M 1M')
 | 
						|
 | 
						|
#      0 1 2 3 4
 | 
						|
# top    2
 | 
						|
# mid      3   3
 | 
						|
# base 1     1
 | 
						|
 | 
						|
    log('Done')
 | 
						|
 | 
						|
    log('')
 | 
						|
    log('--- Doing COR ---')
 | 
						|
    log('')
 | 
						|
 | 
						|
    vm.launch()
 | 
						|
 | 
						|
    log(vm.qmp('blockdev-add',
 | 
						|
               node_name='node0',
 | 
						|
               driver='copy-on-read',
 | 
						|
               bottom='node2',
 | 
						|
               file={
 | 
						|
                   'driver': iotests.imgfmt,
 | 
						|
                   'file': {
 | 
						|
                       'driver': 'file',
 | 
						|
                       'filename': top_img_path
 | 
						|
                   },
 | 
						|
                   'backing': {
 | 
						|
                       'node-name': 'node2',
 | 
						|
                       'driver': iotests.imgfmt,
 | 
						|
                       'file': {
 | 
						|
                           'driver': 'file',
 | 
						|
                           'filename': mid_img_path
 | 
						|
                       },
 | 
						|
                       'backing': {
 | 
						|
                           'driver': iotests.imgfmt,
 | 
						|
                           'file': {
 | 
						|
                               'driver': 'file',
 | 
						|
                               'filename': base_img_path
 | 
						|
                           }
 | 
						|
                       },
 | 
						|
                   }
 | 
						|
               }))
 | 
						|
 | 
						|
    # Trigger COR
 | 
						|
    log(vm.qmp('human-monitor-command',
 | 
						|
               command_line='qemu-io node0 "read 0 5M"'))
 | 
						|
 | 
						|
    vm.shutdown()
 | 
						|
 | 
						|
    log('')
 | 
						|
    log('--- Checking COR result ---')
 | 
						|
    log('')
 | 
						|
 | 
						|
    # Detach backing to check that we can read the data from the top level now
 | 
						|
    qemu_img('rebase', '-u', '-b', '', '-f', iotests.imgfmt, top_img_path)
 | 
						|
 | 
						|
    qemu_io(top_img_path, '-c', 'read -P 0 0 1M')
 | 
						|
    qemu_io(top_img_path, '-c', 'read -P 2 1M 1M')
 | 
						|
    qemu_io(top_img_path, '-c', 'read -P 3 2M 1M')
 | 
						|
    qemu_io(top_img_path, '-c', 'read -P 0 3M 1M')
 | 
						|
    qemu_io(top_img_path, '-c', 'read -P 3 4M 1M')
 | 
						|
 | 
						|
    log('Done')
 |