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/>.
26 owner
=jcody@redhat.com
29 echo "QA output created by $seq"
32 status
=1 # failure is the default!
34 snapshot_virt0
="snapshot-v0.qcow2"
35 snapshot_virt1
="snapshot-v1.qcow2"
42 for i
in $
(seq 1 ${MAX_SNAPSHOTS})
44 rm -f "${TEST_DIR}/${i}-${snapshot_virt0}"
45 rm -f "${TEST_DIR}/${i}-${snapshot_virt1}"
50 trap "_cleanup; exit \$status" 0 1 2 3 15
52 # get standard environment, filters and checks
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':
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}"' } } ]
85 _send_qemu_cmd $h "${cmd}" "return"
91 mv "${TEST_IMG}" "${TEST_IMG}.orig"
95 echo === Running QEMU ===
98 qemu_comm_method="qmp"
99 _launch_qemu -drive file="${TEST_IMG}.orig",if=virtio -drive file="${TEST_IMG}",if=virtio
103 echo === Sending capabilities ===
106 _send_qemu_cmd $h "{ 'execute
': 'qmp_capabilities
' }" "return"
109 echo === Create a single snapshot on virtio0 ===
112 create_single_snapshot 1
116 echo === Invalid command - missing device and nodename ===
119 _send_qemu_cmd $h "{ 'execute
': 'blockdev-snapshot-sync
',
120 'arguments
': { 'snapshot-file
':'"${TEST_DIR}/1-${snapshot_virt0}"',
121 'format
': 'qcow2
' } }" "error"
124 echo === Invalid command - missing snapshot-file ===
127 _send_qemu_cmd $h "{ 'execute
': 'blockdev-snapshot-sync
',
128 'arguments
': { 'device
': 'virtio0
',
129 'format
': 'qcow2
' } }" "error"
132 echo === Create several transactional group snapshots ===
135 for i in $(seq 2 ${MAX_SNAPSHOTS})
137 create_group_snapshot ${i}