|
|
1.1 root 1: #!/bin/bash
2: #
3: # When using a backing file for the output image in qemu-img convert,
4: # the backing file clusters must not copied. The data must still be
5: # read correctly.
6: #
7: # Copyright (C) 2009 Red Hat, Inc.
8: #
9: # This program is free software; you can redistribute it and/or modify
10: # it under the terms of the GNU General Public License as published by
11: # the Free Software Foundation; either version 2 of the License, or
12: # (at your option) any later version.
13: #
14: # This program is distributed in the hope that it will be useful,
15: # but WITHOUT ANY WARRANTY; without even the implied warranty of
16: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17: # GNU General Public License for more details.
18: #
19: # You should have received a copy of the GNU General Public License
20: # along with this program. If not, see <http://www.gnu.org/licenses/>.
21: #
22:
23: # creator
24: [email protected]
25:
26: seq=`basename $0`
27: echo "QA output created by $seq"
28:
29: here=`pwd`
30: tmp=/tmp/$$
31: status=1 # failure is the default!
32:
33: _cleanup()
34: {
35: _cleanup_test_img
36: rm -f $TEST_IMG.base
37: rm -f $TEST_IMG.orig
38: }
39: trap "_cleanup; exit \$status" 0 1 2 3 15
40:
41: # get standard environment, filters and checks
42: . ./common.rc
43: . ./common.filter
44: . ./common.pattern
45:
46: # Any format supporting backing files
47: _supported_fmt qcow qcow2 vmdk qed
48: _supported_proto generic
49: _supported_os Linux
50:
51: TEST_OFFSETS="0 4294967296"
52: CLUSTER_SIZE=65536
53:
54: _make_test_img 6G
55:
56: echo "Filling base image"
57: echo
58:
59: for offset in $TEST_OFFSETS; do
60: # Some clusters with alternating backing file/image file reads
61: io_pattern writev $(( offset )) 512 1024 64 42
62:
63: # Complete backing clusters
64: io_pattern writev $(( offset + 1024 * 1024)) $CLUSTER_SIZE $CLUSTER_SIZE 1 42
65: done
66: _check_test_img
67:
68: echo "Creating test image with backing file"
69: echo
70:
71: mv $TEST_IMG $TEST_IMG.base
72: _make_test_img -b $TEST_IMG.base 6G
73:
74: echo "Filling test image"
75: echo
76:
77: for offset in $TEST_OFFSETS; do
78: # Some clusters with alternating backing file/image file reads
79: io_pattern writev $(( offset + 512 )) 512 1024 64 43
80:
81: # Complete test image clusters
82: io_pattern writev $(( offset + 1024 * 1024 + $CLUSTER_SIZE)) $CLUSTER_SIZE $CLUSTER_SIZE 1 43
83: done
84: _check_test_img
85:
86: mv $TEST_IMG $TEST_IMG.orig
87:
88:
89:
90: # Test the conversion twice: One test with the old-style -B option and another
91: # one with -o backing_file
92:
93: for backing_option in "-B $TEST_IMG.base" "-o backing_file=$TEST_IMG.base"; do
94:
95: echo
96: echo Testing conversion with $backing_option | _filter_testdir | _filter_imgfmt
97: echo
98: $QEMU_IMG convert -O $IMGFMT $backing_option $TEST_IMG.orig $TEST_IMG
99:
100: echo "Checking if backing clusters are allocated when they shouldn't"
101: echo
102: for offset in $TEST_OFFSETS; do
103: # Complete backing clusters
104: is_allocated $(( offset + 1024 * 1024)) $CLUSTER_SIZE $CLUSTER_SIZE 1
105: done
106:
107: echo "Reading"
108: echo
109:
110: for offset in $TEST_OFFSETS; do
111: # Some clusters with alternating backing file/image file reads
112: io_pattern readv $(( offset )) 512 1024 64 42
113: io_pattern readv $(( offset + 512 )) 512 1024 64 43
114:
115: # Complete test image clusters
116: io_pattern readv $(( offset + 1024 * 1024)) $CLUSTER_SIZE $CLUSTER_SIZE 1 42
117: io_pattern readv $(( offset + 1024 * 1024 + $CLUSTER_SIZE)) $CLUSTER_SIZE $CLUSTER_SIZE 1 43
118:
119: # Empty sectors
120: io_zero readv $(( offset + 1024 * 1024 + $CLUSTER_SIZE * 4 )) $CLUSTER_SIZE $CLUSTER_SIZE 1
121: done
122: _check_test_img
123:
124: done
125:
126: # success, all done
127: echo "*** done"
128: rm -f $seq.full
129: status=0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.