gtk: add support for the Pause key
[qemu.git] / tests / qemu-iotests / 085
blob56cd6f89b7387b5fe01107b8c74549c6288da7db
1 #!/bin/bash
3 # Live snapshot tests
5 # This tests live snapshots of images on a running QEMU instance, using
6 # QMP commands. Both single disk snapshots, and transactional group
7 # snapshots are performed.
9 # Copyright (C) 2014 Red Hat, Inc.
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU General Public License for more details.
21 # You should have received a copy of the GNU General Public License
22 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 # creator
26 owner=jcody@redhat.com
28 seq=`basename $0`
29 echo "QA output created by $seq"
31 here=`pwd`
32 status=1 # failure is the default!
34 snapshot_virt0="snapshot-v0.qcow2"
35 snapshot_virt1="snapshot-v1.qcow2"
37 MAX_SNAPSHOTS=10
39 _cleanup()
41 _cleanup_qemu
42 for i in $(seq 1 ${MAX_SNAPSHOTS})
44 rm -f "${TEST_DIR}/${i}-${snapshot_virt0}"
45 rm -f "${TEST_DIR}/${i}-${snapshot_virt1}"
46 done
47 _cleanup_test_img
50 trap "_cleanup; exit \$status" 0 1 2 3 15
52 # get standard environment, filters and checks
53 . ./common.rc
54 . ./common.filter
55 . ./common.qemu
57 _supported_fmt qcow2
58 _supported_proto file
59 _supported_os Linux
62 # ${1}: unique identifier for the snapshot filename
63 function create_single_snapshot()
65 cmd="{ 'execute': 'blockdev-snapshot-sync',
66 'arguments': { 'device': 'virtio0',
67 'snapshot-file':'"${TEST_DIR}/${1}-${snapshot_virt0}"',
68 'format': 'qcow2' } }"
69 _send_qemu_cmd $h "${cmd}" "return"
72 # ${1}: unique identifier for the snapshot filename
73 function create_group_snapshot()
75 cmd="{ 'execute': 'transaction', 'arguments':
76 {'actions': [
77 { 'type': 'blockdev-snapshot-sync', 'data' :
78 { 'device': 'virtio0',
79 'snapshot-file': '"${TEST_DIR}/${1}-${snapshot_virt0}"' } },
80 { 'type': 'blockdev-snapshot-sync', 'data' :
81 { 'device': 'virtio1',
82 'snapshot-file': '"${TEST_DIR}/${1}-${snapshot_virt1}"' } } ]
83 } }"
85 _send_qemu_cmd $h "${cmd}" "return"
88 size=128M
90 _make_test_img $size
91 mv "${TEST_IMG}" "${TEST_IMG}.orig"
92 _make_test_img $size
94 echo
95 echo === Running QEMU ===
96 echo
98 qemu_comm_method="qmp"
99 _launch_qemu -drive file="${TEST_IMG}.orig",if=virtio -drive file="${TEST_IMG}",if=virtio
100 h=$QEMU_HANDLE
102 echo
103 echo === Sending capabilities ===
104 echo
106 _send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }" "return"
108 echo
109 echo === Create a single snapshot on virtio0 ===
110 echo
112 create_single_snapshot 1
115 echo
116 echo === Invalid command - missing device and nodename ===
117 echo
119 _send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot-sync',
120 'arguments': { 'snapshot-file':'"${TEST_DIR}/1-${snapshot_virt0}"',
121 'format': 'qcow2' } }" "error"
123 echo
124 echo === Invalid command - missing snapshot-file ===
125 echo
127 _send_qemu_cmd $h "{ 'execute': 'blockdev-snapshot-sync',
128 'arguments': { 'device': 'virtio0',
129 'format': 'qcow2' } }" "error"
130 echo
131 echo
132 echo === Create several transactional group snapshots ===
133 echo
135 for i in $(seq 2 ${MAX_SNAPSHOTS})
137 create_group_snapshot ${i}
138 done
140 # success, all done
141 echo "*** done"
142 rm -f $seq.full
143 status=0