diff mbox

[v2,4/4] qemu-iotests: add shrinking image test

Message ID 20170613121639.17853-5-pbutsykin@virtuozzo.com (mailing list archive)
State New, archived
Headers show

Commit Message

Pavel Butsykin June 13, 2017, 12:16 p.m. UTC
Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>
---
 tests/qemu-iotests/163     | 113 +++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/163.out |   5 ++
 tests/qemu-iotests/group   |   1 +
 3 files changed, 119 insertions(+)
 create mode 100644 tests/qemu-iotests/163
 create mode 100644 tests/qemu-iotests/163.out

Comments

Max Reitz June 23, 2017, 3:47 p.m. UTC | #1
On 2017-06-13 14:16, Pavel Butsykin wrote:
> Signed-off-by: Pavel Butsykin <pbutsykin@virtuozzo.com>
> ---
>  tests/qemu-iotests/163     | 113 +++++++++++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/163.out |   5 ++
>  tests/qemu-iotests/group   |   1 +
>  3 files changed, 119 insertions(+)
>  create mode 100644 tests/qemu-iotests/163
>  create mode 100644 tests/qemu-iotests/163.out

Ideally this test should contain tests for how the L1 and refcount table
shrinking functions actually behave (like what we have for growing
images). Right now we don't know whether they do anything in these test
cases at all.

Max
diff mbox

Patch

diff --git a/tests/qemu-iotests/163 b/tests/qemu-iotests/163
new file mode 100644
index 0000000000..2cb0116173
--- /dev/null
+++ b/tests/qemu-iotests/163
@@ -0,0 +1,113 @@ 
+#!/usr/bin/env python
+#
+# Tests for shrinking images
+#
+# Copyright (c) 2016-2017 Parallels International GmbH
+#
+# 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/>.
+#
+
+import os, random, iotests
+from iotests import qemu_img, qemu_io, image_size
+
+test_img = os.path.join(iotests.test_dir, 'test.img')
+check_img = os.path.join(iotests.test_dir, 'check.img')
+
+def size_to_int(str):
+    suff = ['B', 'K', 'M', 'G', 'T']
+    return int(str[:-1]) * 1024**suff.index(str[-1:])
+
+class TestShrink(iotests.QMPTestCase):
+    image_len = '1G'
+    shrink_size = '128M'
+    chank_size = '256M'
+
+    def setUp(self):
+        qemu_img('create', '-f', iotests.imgfmt, test_img, TestShrink.image_len)
+        qemu_img('create', '-f', iotests.imgfmt, check_img,
+                 TestShrink.shrink_size)
+
+    def tearDown(self):
+        os.remove(test_img)
+        os.remove(check_img)
+
+    def image_verify(self):
+        self.assertEqual(image_size(test_img), image_size(check_img),
+                         "Verifying image size")
+
+        if iotests.imgfmt == 'raw':
+            return
+
+        self.assertEqual(qemu_img('check', test_img),
+                         qemu_img('check', check_img),
+                         "Verifying image corruption")
+
+    def test_empty_image(self):
+        qemu_img('resize',  '-f', iotests.imgfmt, '--shrink', test_img,
+                 TestShrink.shrink_size)
+
+        self.assertEqual(
+            qemu_io('-c', 'read -P 0x00 %s'%TestShrink.shrink_size, test_img),
+            qemu_io('-c', 'read -P 0x00 %s'%TestShrink.shrink_size, check_img),
+            "Verifying image content")
+
+        TestShrink.image_verify(self)
+
+    def test_sequential_write(self):
+        for offs in range(0, size_to_int(TestShrink.image_len),
+                          size_to_int(TestShrink.chank_size)):
+            qemu_io('-c', 'write -P 0xff %d %s' % (offs, TestShrink.chank_size),
+                    test_img)
+
+        qemu_img('resize',  '-f', iotests.imgfmt, '--shrink', test_img,
+                 TestShrink.shrink_size)
+
+        self.assertEqual(
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, test_img),
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, check_img),
+            "Verifying image content")
+
+        self.assertEqual(
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, test_img),
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, check_img),
+            "Verifying image content")
+
+        TestShrink.image_verify(self)
+
+    def test_random_write(self):
+        offs_list = range(0, size_to_int(TestShrink.image_len),
+                          size_to_int(TestShrink.chank_size))
+        random.shuffle(offs_list)
+        for offs in offs_list:
+            qemu_io('-c', 'write -P 0xff %d %s' % (offs, TestShrink.chank_size),
+                    test_img)
+
+        qemu_img('resize',  '-f', iotests.imgfmt, '--shrink', test_img,
+                 TestShrink.shrink_size)
+
+        self.assertEqual(
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, test_img),
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.image_len, check_img),
+            "Verifying image content")
+
+        self.assertEqual(
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, test_img),
+            qemu_io('-c', 'read -P 0xff %s'%TestShrink.shrink_size, check_img),
+            "Verifying image content")
+
+        TestShrink.image_verify(self)
+
+
+if __name__ == '__main__':
+    iotests.main(supported_fmts=['raw', 'qcow2'])
diff --git a/tests/qemu-iotests/163.out b/tests/qemu-iotests/163.out
new file mode 100644
index 0000000000..8d7e996700
--- /dev/null
+++ b/tests/qemu-iotests/163.out
@@ -0,0 +1,5 @@ 
+...
+----------------------------------------------------------------------
+Ran 3 tests
+
+OK
diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group
index 5c8ea0f95c..a2f42e7165 100644
--- a/tests/qemu-iotests/group
+++ b/tests/qemu-iotests/group
@@ -163,6 +163,7 @@ 
 159 rw auto quick
 160 rw auto quick
 162 auto quick
+163 rw auto quick
 170 rw auto quick
 171 rw auto quick
 172 auto