]> git.ipfire.org Git - thirdparty/qemu.git/blame - tests/qemu-iotests/106
iotests: Test preallocated truncate of 2G image
[thirdparty/qemu.git] / tests / qemu-iotests / 106
CommitLineData
a2c7e082
HR
1#!/bin/bash
2#
3# Test preallocated resize of raw images
4#
5# Copyright (C) 2017 Red Hat, Inc.
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20
21# creator
22owner=mreitz@redhat.com
23
24seq=$(basename $0)
25echo "QA output created by $seq"
26
27here=$PWD
28status=1 # failure is the default!
29
30_cleanup()
31{
32 _cleanup_test_img
33}
34trap "_cleanup; exit \$status" 0 1 2 3 15
35
36# get standard environment and filters
37. ./common.rc
38. ./common.filter
39
40_supported_fmt raw
41_supported_proto file
42_supported_os Linux
43
44# in kB
45CREATION_SIZE=128
46GROWTH_SIZE=256
47
48echo '=== Testing image growth ==='
49
50for create_mode in off falloc full; do
51 for growth_mode in off falloc full; do
52 echo
53 echo "--- create_mode=$create_mode growth_mode=$growth_mode ---"
54
55 IMGOPTS="preallocation=$create_mode" _make_test_img ${CREATION_SIZE}K
56 $QEMU_IMG resize -f "$IMGFMT" --preallocation=$growth_mode "$TEST_IMG" +${GROWTH_SIZE}K
57
58 expected_size=0
59 if [ $create_mode != off ]; then
60 expected_size=$CREATION_SIZE
61 fi
62 if [ $growth_mode != off ]; then
63 expected_size=$((expected_size + $GROWTH_SIZE))
64 fi
65
66 actual_size=$($QEMU_IMG info -f "$IMGFMT" "$TEST_IMG" | grep 'disk size')
67 actual_size=$(echo "$actual_size" | sed -e 's/^[^0-9]*\([0-9]\+\).*$/\1/')
68
69 # The actual size may exceed the expected size, depending on the file
70 # system. Therefore we just test that the actual size is at least what
71 # we expect.
72 if [ $actual_size -lt $expected_size ]; then
73 echo "ERROR: Image should have at least ${expected_size}K, but has ${actual_size}K"
74 fi
75 done
76done
77
78echo
79echo '=== Testing image shrinking ==='
80
81# None of this should work except for "off", because other modes cannot be used
82# for shrinking
83for growth_mode in falloc full off; do
84 echo
85 echo "--- growth_mode=$growth_mode ---"
4ffca890 86 $QEMU_IMG resize -f "$IMGFMT" --shrink --preallocation=$growth_mode "$TEST_IMG" -${GROWTH_SIZE}K
a2c7e082
HR
87done
88
c793a0de
HR
89echo
90echo '=== Testing image growth on 2G empty image ==='
91
92for growth_mode in falloc full; do
93 echo
94 echo "--- growth_mode=$growth_mode ---"
95
96 # Maybe we want to do an lseek() to the end of the file before the
97 # preallocation; if the file has a length of 2 GB, that would
98 # return an integer that overflows to negative when put into a
99 # plain int. We should use the correct type for the result, and
100 # this tests we do.
101
102 _make_test_img 2G
103 $QEMU_IMG resize -f "$IMGFMT" --preallocation=$growth_mode "$TEST_IMG" +${GROWTH_SIZE}K
104
105 actual_size=$($QEMU_IMG info -f "$IMGFMT" "$TEST_IMG" | grep 'disk size')
106 actual_size=$(echo "$actual_size" | sed -e 's/^[^0-9]*\([0-9]\+\).*$/\1/')
107
108 if [ $actual_size -lt $GROWTH_SIZE ]; then
109 echo "ERROR: Image should have at least ${GROWTH_SIZE}K, but has ${actual_size}K"
110 fi
111done
112
a2c7e082
HR
113# success, all done
114echo '*** done'
115rm -f $seq.full
116status=0