Statistics
| Branch: | Revision:

root / tests / qemu-iotests / 039 @ f897e393

History | View | Annotate | Download (3.4 kB)

1 dc68afe0 Stefan Hajnoczi
#!/bin/bash
2 dc68afe0 Stefan Hajnoczi
#
3 dc68afe0 Stefan Hajnoczi
# Test qcow2 lazy refcounts
4 dc68afe0 Stefan Hajnoczi
#
5 dc68afe0 Stefan Hajnoczi
# Copyright (C) 2012 Red Hat, Inc.
6 dc68afe0 Stefan Hajnoczi
# Copyright IBM, Corp. 2010
7 dc68afe0 Stefan Hajnoczi
#
8 dc68afe0 Stefan Hajnoczi
# Based on test 038.
9 dc68afe0 Stefan Hajnoczi
#
10 dc68afe0 Stefan Hajnoczi
# This program is free software; you can redistribute it and/or modify
11 dc68afe0 Stefan Hajnoczi
# it under the terms of the GNU General Public License as published by
12 dc68afe0 Stefan Hajnoczi
# the Free Software Foundation; either version 2 of the License, or
13 dc68afe0 Stefan Hajnoczi
# (at your option) any later version.
14 dc68afe0 Stefan Hajnoczi
#
15 dc68afe0 Stefan Hajnoczi
# This program is distributed in the hope that it will be useful,
16 dc68afe0 Stefan Hajnoczi
# but WITHOUT ANY WARRANTY; without even the implied warranty of
17 dc68afe0 Stefan Hajnoczi
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 dc68afe0 Stefan Hajnoczi
# GNU General Public License for more details.
19 dc68afe0 Stefan Hajnoczi
#
20 dc68afe0 Stefan Hajnoczi
# You should have received a copy of the GNU General Public License
21 dc68afe0 Stefan Hajnoczi
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
22 dc68afe0 Stefan Hajnoczi
#
23 dc68afe0 Stefan Hajnoczi
24 dc68afe0 Stefan Hajnoczi
# creator
25 dc68afe0 Stefan Hajnoczi
owner=stefanha@linux.vnet.ibm.com
26 dc68afe0 Stefan Hajnoczi
27 dc68afe0 Stefan Hajnoczi
seq=`basename $0`
28 dc68afe0 Stefan Hajnoczi
echo "QA output created by $seq"
29 dc68afe0 Stefan Hajnoczi
30 dc68afe0 Stefan Hajnoczi
here=`pwd`
31 dc68afe0 Stefan Hajnoczi
tmp=/tmp/$$
32 dc68afe0 Stefan Hajnoczi
status=1	# failure is the default!
33 dc68afe0 Stefan Hajnoczi
34 dc68afe0 Stefan Hajnoczi
_cleanup()
35 dc68afe0 Stefan Hajnoczi
{
36 dc68afe0 Stefan Hajnoczi
	_cleanup_test_img
37 dc68afe0 Stefan Hajnoczi
}
38 dc68afe0 Stefan Hajnoczi
trap "_cleanup; exit \$status" 0 1 2 3 15
39 dc68afe0 Stefan Hajnoczi
40 dc68afe0 Stefan Hajnoczi
# get standard environment, filters and checks
41 dc68afe0 Stefan Hajnoczi
. ./common.rc
42 dc68afe0 Stefan Hajnoczi
. ./common.filter
43 dc68afe0 Stefan Hajnoczi
44 dc68afe0 Stefan Hajnoczi
_supported_fmt qcow2
45 dc68afe0 Stefan Hajnoczi
_supported_proto generic
46 dc68afe0 Stefan Hajnoczi
_supported_os Linux
47 166f3c7b Stefan Hajnoczi
_unsupported_qemu_io_options --nocache
48 dc68afe0 Stefan Hajnoczi
49 dc68afe0 Stefan Hajnoczi
size=128M
50 dc68afe0 Stefan Hajnoczi
51 dc68afe0 Stefan Hajnoczi
echo
52 dc68afe0 Stefan Hajnoczi
echo "== Checking that image is clean on shutdown =="
53 dc68afe0 Stefan Hajnoczi
54 dc68afe0 Stefan Hajnoczi
IMGOPTS="compat=1.1,lazy_refcounts=on"
55 dc68afe0 Stefan Hajnoczi
_make_test_img $size
56 dc68afe0 Stefan Hajnoczi
57 f897e393 Jeff Cody
$QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
58 dc68afe0 Stefan Hajnoczi
59 dc68afe0 Stefan Hajnoczi
# The dirty bit must not be set
60 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
61 dc68afe0 Stefan Hajnoczi
_check_test_img
62 dc68afe0 Stefan Hajnoczi
63 dc68afe0 Stefan Hajnoczi
echo
64 dc68afe0 Stefan Hajnoczi
echo "== Creating a dirty image file =="
65 dc68afe0 Stefan Hajnoczi
66 dc68afe0 Stefan Hajnoczi
IMGOPTS="compat=1.1,lazy_refcounts=on"
67 dc68afe0 Stefan Hajnoczi
_make_test_img $size
68 dc68afe0 Stefan Hajnoczi
69 dc68afe0 Stefan Hajnoczi
old_ulimit=$(ulimit -c)
70 dc68afe0 Stefan Hajnoczi
ulimit -c 0 # do not produce a core dump on abort(3)
71 fef9c191 Jeff Cody
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
72 dc68afe0 Stefan Hajnoczi
ulimit -c "$old_ulimit"
73 dc68afe0 Stefan Hajnoczi
74 dc68afe0 Stefan Hajnoczi
# The dirty bit must be set
75 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
76 dc68afe0 Stefan Hajnoczi
_check_test_img
77 dc68afe0 Stefan Hajnoczi
78 dc68afe0 Stefan Hajnoczi
echo
79 dc68afe0 Stefan Hajnoczi
echo "== Read-only access must still work =="
80 dc68afe0 Stefan Hajnoczi
81 fef9c191 Jeff Cody
$QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
82 dc68afe0 Stefan Hajnoczi
83 dc68afe0 Stefan Hajnoczi
# The dirty bit must be set
84 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
85 dc68afe0 Stefan Hajnoczi
86 dc68afe0 Stefan Hajnoczi
echo
87 dc68afe0 Stefan Hajnoczi
echo "== Repairing the image file must succeed =="
88 dc68afe0 Stefan Hajnoczi
89 c6bb9ad1 Federico Simoncelli
_check_test_img -r all
90 dc68afe0 Stefan Hajnoczi
91 dc68afe0 Stefan Hajnoczi
# The dirty bit must not be set
92 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
93 dc68afe0 Stefan Hajnoczi
94 dc68afe0 Stefan Hajnoczi
echo
95 dc68afe0 Stefan Hajnoczi
echo "== Data should still be accessible after repair =="
96 dc68afe0 Stefan Hajnoczi
97 fef9c191 Jeff Cody
$QEMU_IO -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
98 dc68afe0 Stefan Hajnoczi
99 dc68afe0 Stefan Hajnoczi
echo
100 dc68afe0 Stefan Hajnoczi
echo "== Opening a dirty image read/write should repair it =="
101 dc68afe0 Stefan Hajnoczi
102 dc68afe0 Stefan Hajnoczi
IMGOPTS="compat=1.1,lazy_refcounts=on"
103 dc68afe0 Stefan Hajnoczi
_make_test_img $size
104 dc68afe0 Stefan Hajnoczi
105 dc68afe0 Stefan Hajnoczi
old_ulimit=$(ulimit -c)
106 dc68afe0 Stefan Hajnoczi
ulimit -c 0 # do not produce a core dump on abort(3)
107 fef9c191 Jeff Cody
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
108 dc68afe0 Stefan Hajnoczi
ulimit -c "$old_ulimit"
109 dc68afe0 Stefan Hajnoczi
110 dc68afe0 Stefan Hajnoczi
# The dirty bit must be set
111 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
112 dc68afe0 Stefan Hajnoczi
113 fef9c191 Jeff Cody
$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
114 dc68afe0 Stefan Hajnoczi
115 dc68afe0 Stefan Hajnoczi
# The dirty bit must not be set
116 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
117 dc68afe0 Stefan Hajnoczi
118 dc68afe0 Stefan Hajnoczi
echo
119 dc68afe0 Stefan Hajnoczi
echo "== Creating an image file with lazy_refcounts=off =="
120 dc68afe0 Stefan Hajnoczi
121 dc68afe0 Stefan Hajnoczi
IMGOPTS="compat=1.1,lazy_refcounts=off"
122 dc68afe0 Stefan Hajnoczi
_make_test_img $size
123 dc68afe0 Stefan Hajnoczi
124 dc68afe0 Stefan Hajnoczi
old_ulimit=$(ulimit -c)
125 dc68afe0 Stefan Hajnoczi
ulimit -c 0 # do not produce a core dump on abort(3)
126 fef9c191 Jeff Cody
$QEMU_IO -c "write -P 0x5a 0 512" -c "abort" "$TEST_IMG" | _filter_qemu_io
127 dc68afe0 Stefan Hajnoczi
ulimit -c "$old_ulimit"
128 dc68afe0 Stefan Hajnoczi
129 dc68afe0 Stefan Hajnoczi
# The dirty bit must not be set since lazy_refcounts=off
130 fef9c191 Jeff Cody
./qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
131 dc68afe0 Stefan Hajnoczi
_check_test_img
132 dc68afe0 Stefan Hajnoczi
133 dc68afe0 Stefan Hajnoczi
# success, all done
134 dc68afe0 Stefan Hajnoczi
echo "*** done"
135 dc68afe0 Stefan Hajnoczi
rm -f $seq.full
136 dc68afe0 Stefan Hajnoczi
status=0