blob: 2e2afdad9c57a2f4fadd7282368d81cb38a55f1b [file] [log] [blame]
Kevin Wolf92b22e72019-09-17 12:43:42 +02001#!/usr/bin/env bash
Vladimir Sementsov-Ogievskiy9dd003a2021-01-16 16:44:19 +03002# group: rw auto quick snapshot
Kevin Wolf92b22e72019-09-17 12:43:42 +02003#
4# Test which nodes are involved in internal snapshots
5#
6# Copyright (C) 2019 Red Hat, Inc.
7#
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program. If not, see <http://www.gnu.org/licenses/>.
20#
21
22# creator
23owner=kwolf@redhat.com
24
25seq=`basename $0`
26echo "QA output created by $seq"
27
28status=1 # failure is the default!
29
30_cleanup()
31{
32 _cleanup_test_img
Max Reitzf0e24942019-10-17 15:31:54 +020033 rm -f "$SOCK_DIR/nbd"
Kevin Wolf92b22e72019-09-17 12:43:42 +020034}
35trap "_cleanup; exit \$status" 0 1 2 3 15
36
37# get standard environment, filters and checks
38. ./common.rc
39. ./common.filter
40
41_supported_fmt qcow2
42_supported_proto file
43_supported_os Linux
Thomas Huthc85c6d92019-12-18 17:15:41 +010044_require_drivers copy-on-read
Kevin Wolf92b22e72019-09-17 12:43:42 +020045
Max Reitz3be20242019-11-07 17:37:07 +010046# Internal snapshots are (currently) impossible with refcount_bits=1,
47# and generally impossible with external data files
48_unsupported_imgopts 'refcount_bits=1[^0-9]' data_file
Kevin Wolf92b22e72019-09-17 12:43:42 +020049
Thomas Huth9bdabfb2020-01-21 10:52:03 +010050_require_devices virtio-blk
51
Kevin Wolf92b22e72019-09-17 12:43:42 +020052do_run_qemu()
53{
54 echo Testing: "$@"
55 (
56 if ! test -t 0; then
57 while read cmd; do
58 echo $cmd
59 done
60 fi
61 echo quit
62 ) | $QEMU -nographic -monitor stdio -nodefaults "$@"
63 echo
64}
65
66run_qemu()
67{
68 do_run_qemu "$@" 2>&1 | _filter_testdir | _filter_qemu | _filter_hmp |
69 _filter_generated_node_ids | _filter_imgfmt | _filter_vmstate_size
70}
71
72size=128M
73
74run_test()
75{
Max Reitzecb4c1d2019-11-07 17:36:59 +010076 if [ -n "$BACKING_FILE" ]; then
Eric Blakeb66ff2c2020-07-06 15:39:52 -050077 _make_test_img -b "$BACKING_FILE" -F $IMGFMT $size
Max Reitzecb4c1d2019-11-07 17:36:59 +010078 else
79 _make_test_img $size
80 fi
Kevin Wolf92b22e72019-09-17 12:43:42 +020081 printf "savevm snap0\ninfo snapshots\nloadvm snap0\n" | run_qemu "$@" | _filter_date
82}
83
84
85echo
86echo "=== No block devices at all ==="
87echo
88
89run_test
90
91echo
92echo "=== -drive if=none ==="
93echo
94
95run_test -drive driver=file,file="$TEST_IMG",if=none
96run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none
97run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=none -device virtio-blk,drive=none0
98
99echo
100echo "=== -drive if=virtio ==="
101echo
102
103run_test -drive driver=file,file="$TEST_IMG",if=virtio
104run_test -drive driver=$IMGFMT,file="$TEST_IMG",if=virtio
105
106echo
107echo "=== Simple -blockdev ==="
108echo
109
110run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file
111run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \
112 -blockdev driver=$IMGFMT,file=file,node-name=fmt
113run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \
114 -blockdev driver=raw,file=file,node-name=raw \
115 -blockdev driver=$IMGFMT,file=raw,node-name=fmt
116
117echo
118echo "=== -blockdev with a filter on top ==="
119echo
120
121run_test -blockdev driver=file,filename="$TEST_IMG",node-name=file \
122 -blockdev driver=$IMGFMT,file=file,node-name=fmt \
123 -blockdev driver=copy-on-read,file=fmt,node-name=filter
124
125echo
126echo "=== -blockdev with a backing file ==="
127echo
128
129TEST_IMG="$TEST_IMG.base" _make_test_img $size
130
Max Reitzecb4c1d2019-11-07 17:36:59 +0100131BACKING_FILE="$TEST_IMG.base" \
Kevin Wolf92b22e72019-09-17 12:43:42 +0200132run_test -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \
133 -blockdev driver=file,filename="$TEST_IMG",node-name=file \
134 -blockdev driver=$IMGFMT,file=file,backing=backing-file,node-name=fmt
135
Max Reitzecb4c1d2019-11-07 17:36:59 +0100136BACKING_FILE="$TEST_IMG.base" \
Kevin Wolf92b22e72019-09-17 12:43:42 +0200137run_test -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \
138 -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \
139 -blockdev driver=file,filename="$TEST_IMG",node-name=file \
140 -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt
141
142# A snapshot should be present on the overlay, but not the backing file
143echo Internal snapshots on overlay:
144$QEMU_IMG snapshot -l "$TEST_IMG" | _filter_date | _filter_vmstate_size
145
146echo Internal snapshots on backing file:
147$QEMU_IMG snapshot -l "$TEST_IMG.base" | _filter_date | _filter_vmstate_size
148
149echo
150echo "=== -blockdev with NBD server on the backing file ==="
151echo
152
Eric Blakeb66ff2c2020-07-06 15:39:52 -0500153_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $size
Kevin Wolf92b22e72019-09-17 12:43:42 +0200154cat <<EOF |
Max Reitzf0e24942019-10-17 15:31:54 +0200155nbd_server_start unix:$SOCK_DIR/nbd
Kevin Wolf92b22e72019-09-17 12:43:42 +0200156nbd_server_add -w backing-fmt
157savevm snap0
158info snapshots
159loadvm snap0
160EOF
161run_qemu -blockdev driver=file,filename="$TEST_IMG.base",node-name=backing-file \
162 -blockdev driver=$IMGFMT,file=backing-file,node-name=backing-fmt \
163 -blockdev driver=file,filename="$TEST_IMG",node-name=file \
164 -blockdev driver=$IMGFMT,file=file,backing=backing-fmt,node-name=fmt |
165 _filter_date
166
167# This time, a snapshot should be created on both files
168echo Internal snapshots on overlay:
169$QEMU_IMG snapshot -l "$TEST_IMG" | _filter_date | _filter_vmstate_size
170
171echo Internal snapshots on backing file:
172$QEMU_IMG snapshot -l "$TEST_IMG.base" | _filter_date | _filter_vmstate_size
173
174# success, all done
175echo "*** done"
176rm -f $seq.full
177status=0