Blame SOURCES/kvm-iotests-Split-214-off-of-122.patch

383d26
From 6de5873f52d3fac1aef3091c1e283530e37c4b02 Mon Sep 17 00:00:00 2001
383d26
From: Max Reitz <mreitz@redhat.com>
383d26
Date: Mon, 18 Jun 2018 16:12:03 +0200
383d26
Subject: [PATCH 27/54] iotests: Split 214 off of 122
383d26
383d26
RH-Author: Max Reitz <mreitz@redhat.com>
383d26
Message-id: <20180618161212.14444-2-mreitz@redhat.com>
383d26
Patchwork-id: 80761
383d26
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 01/10] iotests: Split 214 off of 122
383d26
Bugzilla: 1518738
383d26
RH-Acked-by: John Snow <jsnow@redhat.com>
383d26
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
383d26
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
383d26
383d26
Commit abd3622cc03cf41ed542126a540385f30a4c0175 added a case to 122
383d26
regarding how the qcow2 driver handles an incorrect compressed data
383d26
length value.  This does not really fit into 122, as that file is
383d26
supposed to contain qemu-img convert test cases, which this case is not.
383d26
So this patch splits it off into its own file; maybe we will even get
383d26
more qcow2-only compression tests in the future.
383d26
383d26
Also, that test case does not work with refcount_bits=1, so mark that
383d26
option as unsupported.
383d26
383d26
Signed-off-by: Max Reitz <mreitz@redhat.com>
383d26
Message-id: 20180406164108.26118-1-mreitz@redhat.com
383d26
Reviewed-by: Eric Blake <eblake@redhat.com>
383d26
Signed-off-by: Alberto Garcia <berto@igalia.com>
383d26
Signed-off-by: Max Reitz <mreitz@redhat.com>
383d26
(cherry picked from commit 6cba5377f54d7ea859a29c1877785e7101794683)
383d26
Signed-off-by: Max Reitz <mreitz@redhat.com>
383d26
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
383d26
---
383d26
 tests/qemu-iotests/122     | 47 ----------------------
383d26
 tests/qemu-iotests/122.out | 33 ----------------
383d26
 tests/qemu-iotests/214     | 97 ++++++++++++++++++++++++++++++++++++++++++++++
383d26
 tests/qemu-iotests/214.out | 35 +++++++++++++++++
383d26
 tests/qemu-iotests/group   |  1 +
383d26
 5 files changed, 133 insertions(+), 80 deletions(-)
383d26
 create mode 100755 tests/qemu-iotests/214
383d26
 create mode 100644 tests/qemu-iotests/214.out
383d26
383d26
diff --git a/tests/qemu-iotests/122 b/tests/qemu-iotests/122
383d26
index 6cf4fcb..45b359c 100755
383d26
--- a/tests/qemu-iotests/122
383d26
+++ b/tests/qemu-iotests/122
383d26
@@ -130,53 +130,6 @@ $QEMU_IO -c "read -P 0    1024k 1022k" "$TEST_IMG" 2>&1 | _filter_qemu_io | _fil
383d26
 
383d26
 
383d26
 echo
383d26
-echo "=== Corrupted size field in compressed cluster descriptor ==="
383d26
-echo
383d26
-# Create an empty image and fill half of it with compressed data.
383d26
-# The L2 entries of the two compressed clusters are located at
383d26
-# 0x800000 and 0x800008, their original values are 0x4008000000a00000
383d26
-# and 0x4008000000a00802 (5 sectors for compressed data each).
383d26
-_make_test_img 8M -o cluster_size=2M
383d26
-$QEMU_IO -c "write -c -P 0x11 0 2M" -c "write -c -P 0x11 2M 2M" "$TEST_IMG" \
383d26
-         2>&1 | _filter_qemu_io | _filter_testdir
383d26
-
383d26
-# Reduce size of compressed data to 4 sectors: this corrupts the image.
383d26
-poke_file "$TEST_IMG" $((0x800000)) "\x40\x06"
383d26
-$QEMU_IO -c "read  -P 0x11 0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
-
383d26
-# 'qemu-img check' however doesn't see anything wrong because it
383d26
-# doesn't try to decompress the data and the refcounts are consistent.
383d26
-# TODO: update qemu-img so this can be detected.
383d26
-_check_test_img
383d26
-
383d26
-# Increase size of compressed data to the maximum (8192 sectors).
383d26
-# This makes QEMU read more data (8192 sectors instead of 5, host
383d26
-# addresses [0xa00000, 0xdfffff]), but the decompression algorithm
383d26
-# stops once we have enough to restore the uncompressed cluster, so
383d26
-# the rest of the data is ignored.
383d26
-poke_file "$TEST_IMG" $((0x800000)) "\x7f\xfe"
383d26
-# Do it also for the second compressed cluster (L2 entry at 0x800008).
383d26
-# In this case the compressed data would span 3 host clusters
383d26
-# (host addresses: [0xa00802, 0xe00801])
383d26
-poke_file "$TEST_IMG" $((0x800008)) "\x7f\xfe"
383d26
-
383d26
-# Here the image is too small so we're asking QEMU to read beyond the
383d26
-# end of the image.
383d26
-$QEMU_IO -c "read  -P 0x11  0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
-# But if we grow the image we won't be reading beyond its end anymore.
383d26
-$QEMU_IO -c "write -P 0x22 4M 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
-$QEMU_IO -c "read  -P 0x11  0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
-
383d26
-# The refcount data is however wrong because due to the increased size
383d26
-# of the compressed data it now reaches the following host clusters.
383d26
-# This can be repaired by qemu-img check by increasing the refcount of
383d26
-# those clusters.
383d26
-# TODO: update qemu-img to correct the compressed cluster size instead.
383d26
-_check_test_img -r all
383d26
-$QEMU_IO -c "read  -P 0x11  0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
-$QEMU_IO -c "read  -P 0x22 4M 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
-
383d26
-echo
383d26
 echo "=== Full allocation with -S 0 ==="
383d26
 echo
383d26
 
383d26
diff --git a/tests/qemu-iotests/122.out b/tests/qemu-iotests/122.out
383d26
index a6b7fe0..47d8656 100644
383d26
--- a/tests/qemu-iotests/122.out
383d26
+++ b/tests/qemu-iotests/122.out
383d26
@@ -99,39 +99,6 @@ read 1024/1024 bytes at offset 1047552
383d26
 read 1046528/1046528 bytes at offset 1048576
383d26
 1022 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
 
383d26
-=== Corrupted size field in compressed cluster descriptor ===
383d26
-
383d26
-Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8388608
383d26
-wrote 2097152/2097152 bytes at offset 0
383d26
-2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-wrote 2097152/2097152 bytes at offset 2097152
383d26
-2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-read failed: Input/output error
383d26
-No errors were found on the image.
383d26
-read 4194304/4194304 bytes at offset 0
383d26
-4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-wrote 4194304/4194304 bytes at offset 4194304
383d26
-4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-read 4194304/4194304 bytes at offset 0
383d26
-4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-ERROR cluster 6 refcount=1 reference=3
383d26
-ERROR cluster 7 refcount=1 reference=2
383d26
-Repairing cluster 6 refcount=1 reference=3
383d26
-Repairing cluster 7 refcount=1 reference=2
383d26
-Repairing OFLAG_COPIED data cluster: l2_entry=8000000000c00000 refcount=3
383d26
-Repairing OFLAG_COPIED data cluster: l2_entry=8000000000e00000 refcount=2
383d26
-The following inconsistencies were found and repaired:
383d26
-
383d26
-    0 leaked clusters
383d26
-    4 corruptions
383d26
-
383d26
-Double checking the fixed image now...
383d26
-No errors were found on the image.
383d26
-read 4194304/4194304 bytes at offset 0
383d26
-4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-read 4194304/4194304 bytes at offset 4194304
383d26
-4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
-
383d26
 === Full allocation with -S 0 ===
383d26
 
383d26
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
383d26
diff --git a/tests/qemu-iotests/214 b/tests/qemu-iotests/214
383d26
new file mode 100755
383d26
index 0000000..c46ca2a
383d26
--- /dev/null
383d26
+++ b/tests/qemu-iotests/214
383d26
@@ -0,0 +1,97 @@
383d26
+#!/bin/bash
383d26
+#
383d26
+# Test qcow2 image compression
383d26
+#
383d26
+# Copyright (C) 2018 Igalia, S.L.
383d26
+# Author: Alberto Garcia <berto@igalia.com>
383d26
+#
383d26
+# This program is free software; you can redistribute it and/or modify
383d26
+# it under the terms of the GNU General Public License as published by
383d26
+# the Free Software Foundation; either version 2 of the License, or
383d26
+# (at your option) any later version.
383d26
+#
383d26
+# This program is distributed in the hope that it will be useful,
383d26
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
383d26
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
383d26
+# GNU General Public License for more details.
383d26
+#
383d26
+# You should have received a copy of the GNU General Public License
383d26
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
383d26
+#
383d26
+
383d26
+seq=$(basename "$0")
383d26
+echo "QA output created by $seq"
383d26
+
383d26
+here=$PWD
383d26
+status=1	# failure is the default!
383d26
+
383d26
+_cleanup()
383d26
+{
383d26
+    _cleanup_test_img
383d26
+}
383d26
+trap "_cleanup; exit \$status" 0 1 2 3 15
383d26
+
383d26
+# get standard environment, filters and checks
383d26
+. ./common.rc
383d26
+. ./common.filter
383d26
+
383d26
+_supported_fmt qcow2
383d26
+_supported_proto file
383d26
+_supported_os Linux
383d26
+
383d26
+# Repairing the corrupted image requires qemu-img check to store a
383d26
+# refcount up to 3, which requires at least two refcount bits.
383d26
+_unsupported_imgopts 'refcount_bits=1[^0-9]'
383d26
+
383d26
+
383d26
+echo
383d26
+echo "=== Corrupted size field in compressed cluster descriptor ==="
383d26
+echo
383d26
+# Create an empty image and fill half of it with compressed data.
383d26
+# The L2 entries of the two compressed clusters are located at
383d26
+# 0x800000 and 0x800008, their original values are 0x4008000000a00000
383d26
+# and 0x4008000000a00802 (5 sectors for compressed data each).
383d26
+_make_test_img 8M -o cluster_size=2M
383d26
+$QEMU_IO -c "write -c -P 0x11 0 2M" -c "write -c -P 0x11 2M 2M" "$TEST_IMG" \
383d26
+         2>&1 | _filter_qemu_io | _filter_testdir
383d26
+
383d26
+# Reduce size of compressed data to 4 sectors: this corrupts the image.
383d26
+poke_file "$TEST_IMG" $((0x800000)) "\x40\x06"
383d26
+$QEMU_IO -c "read  -P 0x11 0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
+
383d26
+# 'qemu-img check' however doesn't see anything wrong because it
383d26
+# doesn't try to decompress the data and the refcounts are consistent.
383d26
+# TODO: update qemu-img so this can be detected.
383d26
+_check_test_img
383d26
+
383d26
+# Increase size of compressed data to the maximum (8192 sectors).
383d26
+# This makes QEMU read more data (8192 sectors instead of 5, host
383d26
+# addresses [0xa00000, 0xdfffff]), but the decompression algorithm
383d26
+# stops once we have enough to restore the uncompressed cluster, so
383d26
+# the rest of the data is ignored.
383d26
+poke_file "$TEST_IMG" $((0x800000)) "\x7f\xfe"
383d26
+# Do it also for the second compressed cluster (L2 entry at 0x800008).
383d26
+# In this case the compressed data would span 3 host clusters
383d26
+# (host addresses: [0xa00802, 0xe00801])
383d26
+poke_file "$TEST_IMG" $((0x800008)) "\x7f\xfe"
383d26
+
383d26
+# Here the image is too small so we're asking QEMU to read beyond the
383d26
+# end of the image.
383d26
+$QEMU_IO -c "read  -P 0x11  0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
+# But if we grow the image we won't be reading beyond its end anymore.
383d26
+$QEMU_IO -c "write -P 0x22 4M 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
+$QEMU_IO -c "read  -P 0x11  0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
+
383d26
+# The refcount data is however wrong because due to the increased size
383d26
+# of the compressed data it now reaches the following host clusters.
383d26
+# This can be repaired by qemu-img check by increasing the refcount of
383d26
+# those clusters.
383d26
+# TODO: update qemu-img to correct the compressed cluster size instead.
383d26
+_check_test_img -r all
383d26
+$QEMU_IO -c "read  -P 0x11  0 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
+$QEMU_IO -c "read  -P 0x22 4M 4M" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir
383d26
+
383d26
+# success, all done
383d26
+echo '*** done'
383d26
+rm -f $seq.full
383d26
+status=0
383d26
diff --git a/tests/qemu-iotests/214.out b/tests/qemu-iotests/214.out
383d26
new file mode 100644
383d26
index 0000000..0fcd8dc
383d26
--- /dev/null
383d26
+++ b/tests/qemu-iotests/214.out
383d26
@@ -0,0 +1,35 @@
383d26
+QA output created by 214
383d26
+
383d26
+=== Corrupted size field in compressed cluster descriptor ===
383d26
+
383d26
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=8388608
383d26
+wrote 2097152/2097152 bytes at offset 0
383d26
+2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+wrote 2097152/2097152 bytes at offset 2097152
383d26
+2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+read failed: Input/output error
383d26
+No errors were found on the image.
383d26
+read 4194304/4194304 bytes at offset 0
383d26
+4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+wrote 4194304/4194304 bytes at offset 4194304
383d26
+4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+read 4194304/4194304 bytes at offset 0
383d26
+4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+ERROR cluster 6 refcount=1 reference=3
383d26
+ERROR cluster 7 refcount=1 reference=2
383d26
+Repairing cluster 6 refcount=1 reference=3
383d26
+Repairing cluster 7 refcount=1 reference=2
383d26
+Repairing OFLAG_COPIED data cluster: l2_entry=8000000000c00000 refcount=3
383d26
+Repairing OFLAG_COPIED data cluster: l2_entry=8000000000e00000 refcount=2
383d26
+The following inconsistencies were found and repaired:
383d26
+
383d26
+    0 leaked clusters
383d26
+    4 corruptions
383d26
+
383d26
+Double checking the fixed image now...
383d26
+No errors were found on the image.
383d26
+read 4194304/4194304 bytes at offset 0
383d26
+4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+read 4194304/4194304 bytes at offset 4194304
383d26
+4 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
383d26
+*** done
383d26
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
383d26
index 3a89aed..ba7a2d1 100644
383d26
--- a/tests/qemu-iotests/group
383d26
+++ b/tests/qemu-iotests/group
383d26
@@ -212,4 +212,5 @@
383d26
 211 rw auto quick
383d26
 212 rw auto quick
383d26
 213 rw auto quick
383d26
+214 rw auto
383d26
 218 rw auto quick
383d26
-- 
383d26
1.8.3.1
383d26