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 |