| #!/usr/bin/env bash |
| # group: rw auto quick |
| # |
| # Test resizing a qcow2 image with a backing file |
| # |
| # Copyright (C) 2020 Igalia, S.L. |
| # Author: Alberto Garcia <berto@igalia.com> |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| # |
| |
| # creator |
| owner=berto@igalia.com |
| |
| seq=`basename $0` |
| echo "QA output created by $seq" |
| |
| status=1 # failure is the default! |
| |
| _cleanup() |
| { |
| _cleanup_test_img |
| } |
| trap "_cleanup; exit \$status" 0 1 2 3 15 |
| |
| # get standard environment, filters and checks |
| . ./common.rc |
| . ./common.filter |
| |
| _supported_fmt qcow2 |
| _supported_proto file fuse |
| _supported_os Linux |
| # We need qemu-img map to show the file where the data is allocated, |
| # but with an external data file, it will show that instead of the |
| # file we want to check. So just skip this test for external data |
| # files. |
| _unsupported_imgopts data_file |
| |
| echo '### Create the backing image' |
| BACKING_IMG="$TEST_IMG.base" |
| TEST_IMG="$BACKING_IMG" _make_test_img 1M |
| |
| echo '### Fill the backing image with data (0x11)' |
| $QEMU_IO -c 'write -P 0x11 0 1M' "$BACKING_IMG" | _filter_qemu_io |
| |
| echo '### Create the top image' |
| _make_test_img -F "$IMGFMT" -b "$BACKING_IMG" |
| |
| echo '### Fill the top image with data (0x22)' |
| $QEMU_IO -c 'write -P 0x22 0 1M' "$TEST_IMG" | _filter_qemu_io |
| |
| # Both offsets are part of the same cluster. |
| echo '### Shrink the image to 520k' |
| $QEMU_IMG resize --shrink "$TEST_IMG" 520k |
| echo '### Grow the image to 567k' |
| $QEMU_IMG resize "$TEST_IMG" 567k |
| |
| echo '### Check that the tail of the image reads as zeroes' |
| $QEMU_IO -c 'read -P 0x22 0 520k' "$TEST_IMG" | _filter_qemu_io |
| $QEMU_IO -c 'read -P 0x00 520k 47k' "$TEST_IMG" | _filter_qemu_io |
| |
| echo '### Show output of qemu-img map' |
| $QEMU_IMG map "$TEST_IMG" | _filter_testdir |
| |
| # success, all done |
| echo "*** done" |
| rm -f $seq.full |
| status=0 |