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

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