 70a5ff6bdd
			
		
	
	
		70a5ff6bdd
		
	
	
	
	
		
			
			It should not be happening, but it is possible to truncate an image outside of qemu while qemu is running (or any of the qemu tools using the block layer. raw_co_get_block_status() should not break then. While touching this test, replace the existing "truncate" invocation by "$QEMU_IMG convert -f raw". Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 1414148280-17949-4-git-send-email-mreitz@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Test case for qemu-io -c map and qemu-img map
 | |
| #
 | |
| # Copyright (C) 2014 Red Hat, Inc.
 | |
| #
 | |
| # 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/>.
 | |
| #
 | |
| 
 | |
| # creator
 | |
| owner=mreitz@redhat.com
 | |
| 
 | |
| seq=$(basename $0)
 | |
| echo "QA output created by $seq"
 | |
| 
 | |
| here=$PWD
 | |
| tmp=/tmp/$$
 | |
| status=1	# failure is the default!
 | |
| 
 | |
| _cleanup()
 | |
| {
 | |
| 	_cleanup_test_img
 | |
| }
 | |
| trap "_cleanup; exit \$status" 0 1 2 3 15
 | |
| 
 | |
| # get standard environment, filters and qemu instance handling
 | |
| . ./common.rc
 | |
| . ./common.filter
 | |
| . ./common.qemu
 | |
| 
 | |
| _supported_fmt qcow2
 | |
| _supported_proto file
 | |
| _supported_os Linux
 | |
| 
 | |
| IMG_SIZE=64K
 | |
| 
 | |
| echo
 | |
| echo '=== Testing map command on truncated image ==='
 | |
| echo
 | |
| 
 | |
| _make_test_img $IMG_SIZE
 | |
| # Create cluster
 | |
| $QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io
 | |
| # Remove data cluster from image (first cluster: image header, second: reftable,
 | |
| # third: refblock, fourth: L1 table, fifth: L2 table)
 | |
| $QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024))
 | |
| 
 | |
| $QEMU_IO -c map "$TEST_IMG"
 | |
| $QEMU_IMG map "$TEST_IMG"
 | |
| 
 | |
| echo
 | |
| echo '=== Testing map on an image file truncated outside of qemu ==='
 | |
| echo
 | |
| 
 | |
| # Same as above, only now we concurrently truncate and map the image
 | |
| _make_test_img $IMG_SIZE
 | |
| $QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io
 | |
| 
 | |
| qemu_comm_method=monitor _launch_qemu -drive if=none,file="$TEST_IMG",id=drv0
 | |
| 
 | |
| $QEMU_IMG resize -f raw "$TEST_IMG" $((5 * 64 * 1024))
 | |
| 
 | |
| _send_qemu_cmd $QEMU_HANDLE 'qemu-io drv0 map' 'allocated' \
 | |
|     | sed -e 's/^(qemu).*qemu-io drv0 map...$/(qemu) qemu-io drv0 map/'
 | |
| _send_qemu_cmd $QEMU_HANDLE 'quit' ''
 | |
| 
 | |
| # success, all done
 | |
| echo '*** done'
 | |
| rm -f $seq.full
 | |
| status=0
 |