 e86e869770
			
		
	
	
		e86e869770
		
	
	
	
	
		
			
			The new functionality of common.qemu implements the QEMU control and communication functionality that was originally in test 085. This removes that now-duplicate functionality, and uses the common.qemu functions. The QEMU commandline changes slightly due to this; in addition to monitor and qmp i/o options, the new QEMU commandline from inside common.qemu now introduces -machine accel=qtest. Reviewed-by: Benoit Canet <benoit@irqsave.net> Reviewed-by: Fam Zheng <famz@redhat.com> Signed-off-by: Jeff Cody <jcody@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
		
			
				
	
	
		
			144 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| #
 | |
| # Live snapshot tests
 | |
| #
 | |
| # This tests live snapshots of images on a running QEMU instance, using
 | |
| # QMP commands.  Both single disk snapshots, and transactional group
 | |
| # snapshots are performed.
 | |
| #
 | |
| # 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=jcody@redhat.com
 | |
| 
 | |
| seq=`basename $0`
 | |
| echo "QA output created by $seq"
 | |
| 
 | |
| here=`pwd`
 | |
| status=1	# failure is the default!
 | |
| 
 | |
| snapshot_virt0="snapshot-v0.qcow2"
 | |
| snapshot_virt1="snapshot-v1.qcow2"
 | |
| 
 | |
| MAX_SNAPSHOTS=10
 | |
| 
 | |
| _cleanup()
 | |
| {
 | |
|     _cleanup_qemu
 | |
|     for i in $(seq 1 ${MAX_SNAPSHOTS})
 | |
|     do
 | |
|         rm -f "${TEST_DIR}/${i}-${snapshot_virt0}"
 | |
|         rm -f "${TEST_DIR}/${i}-${snapshot_virt1}"
 | |
|     done
 | |
| 	_cleanup_test_img
 | |
| 
 | |
| }
 | |
| trap "_cleanup; exit \$status" 0 1 2 3 15
 | |
| 
 | |
| # get standard environment, filters and checks
 | |
| . ./common.rc
 | |
| . ./common.filter
 | |
| . ./common.qemu
 | |
| 
 | |
| _supported_fmt qcow2
 | |
| _supported_proto file
 | |
| _supported_os Linux
 | |
| 
 | |
| 
 | |
| # ${1}: unique identifier for the snapshot filename
 | |
| function create_single_snapshot()
 | |
| {
 | |
|     cmd="{ 'execute': 'blockdev-snapshot-sync',
 | |
|                       'arguments': { 'device': 'virtio0',
 | |
|                                      'snapshot-file':'"${TEST_DIR}/${1}-${snapshot_virt0}"',
 | |
|                                      'format': 'qcow2' } }"
 | |
|     _send_qemu_cmd $h "${cmd}" "return"
 | |
| }
 | |
| 
 | |
| # ${1}: unique identifier for the snapshot filename
 | |
| function create_group_snapshot()
 | |
| {
 | |
|     cmd="{ 'execute': 'transaction', 'arguments':
 | |
|            {'actions': [
 | |
|                { 'type': 'blockdev-snapshot-sync', 'data' :
 | |
|                    { 'device': 'virtio0',
 | |
|                       'snapshot-file': '"${TEST_DIR}/${1}-${snapshot_virt0}"' } },
 | |
|                { 'type': 'blockdev-snapshot-sync', 'data' :
 | |
|                    { 'device': 'virtio1',
 | |
|                        'snapshot-file': '"${TEST_DIR}/${1}-${snapshot_virt1}"' } } ]
 | |
|              } }"
 | |
| 
 | |
|     _send_qemu_cmd $h "${cmd}" "return"
 | |
| }
 | |
| 
 | |
| size=128M
 | |
| 
 | |
| _make_test_img $size
 | |
| mv "${TEST_IMG}" "${TEST_IMG}.orig"
 | |
| _make_test_img $size
 | |
| 
 | |
| echo
 | |
| echo === Running QEMU ===
 | |
| echo
 | |
| 
 | |
| qemu_comm_method="qmp"
 | |
| _launch_qemu -drive file="${TEST_IMG}.orig",if=virtio -drive file="${TEST_IMG}",if=virtio
 | |
| h=$QEMU_HANDLE
 | |
| 
 | |
| echo
 | |
| echo === Sending capabilities ===
 | |
| echo
 | |
| 
 | |
| _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" "return"
 | |
| 
 | |
| echo
 | |
| echo === Create a single snapshot on virtio0 ===
 | |
| echo
 | |
| 
 | |
| create_single_snapshot 1
 | |
| 
 | |
| 
 | |
| echo
 | |
| echo === Invalid command - missing device and nodename ===
 | |
| echo
 | |
| 
 | |
| _send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot-sync',
 | |
|                          'arguments': { 'snapshot-file':'"${TEST_DIR}/1-${snapshot_virt0}"',
 | |
|                                      'format': 'qcow2' } }" "error"
 | |
| 
 | |
| echo
 | |
| echo === Invalid command - missing snapshot-file ===
 | |
| echo
 | |
| 
 | |
| _send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot-sync',
 | |
|                          'arguments': { 'device': 'virtio0',
 | |
|                                      'format': 'qcow2' } }" "error"
 | |
| echo
 | |
| echo
 | |
| echo === Create several transactional group snapshots ===
 | |
| echo
 | |
| 
 | |
| for i in $(seq 2 ${MAX_SNAPSHOTS})
 | |
| do
 | |
|     create_group_snapshot ${i}
 | |
| done
 | |
| 
 | |
| # success, all done
 | |
| echo "*** done"
 | |
| rm -f $seq.full
 | |
| status=0
 |