7f6c9b5ea1
resolves: rhbz#1950632 Add Python .cleanup() method. Fix data corruption in zero and trim on unaligned tail. resolves: rhbz#1990134
148 lines
4.8 KiB
Diff
148 lines
4.8 KiB
Diff
From fcd113cf7bf5587f8cac6d331ec1e427be0a830f Mon Sep 17 00:00:00 2001
|
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
Date: Thu, 29 Jul 2021 20:16:43 +0100
|
|
Subject: [PATCH] tests: cache: Test cache-on-read option really caches
|
|
|
|
By making use of the delay filter to add a penalty for hitting the
|
|
plugin we can check whether or not the cache-on-read option is
|
|
working.
|
|
|
|
(cherry picked from commit 3ae7aa533bb9322ab6dc6deecb687ded76634ab4)
|
|
---
|
|
tests/Makefile.am | 2 +
|
|
tests/test-cache-on-read-caches.sh | 87 ++++++++++++++++++++++++++++++
|
|
tests/test-cache-on-read.sh | 5 --
|
|
3 files changed, 89 insertions(+), 5 deletions(-)
|
|
create mode 100755 tests/test-cache-on-read-caches.sh
|
|
|
|
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
|
index a038eabc..51ca913a 100644
|
|
--- a/tests/Makefile.am
|
|
+++ b/tests/Makefile.am
|
|
@@ -1373,6 +1373,7 @@ TESTS += \
|
|
test-cache.sh \
|
|
test-cache-block-size.sh \
|
|
test-cache-on-read.sh \
|
|
+ test-cache-on-read-caches.sh \
|
|
test-cache-max-size.sh \
|
|
test-cache-unaligned.sh \
|
|
$(NULL)
|
|
@@ -1380,6 +1381,7 @@ EXTRA_DIST += \
|
|
test-cache.sh \
|
|
test-cache-block-size.sh \
|
|
test-cache-on-read.sh \
|
|
+ test-cache-on-read-caches.sh \
|
|
test-cache-max-size.sh \
|
|
test-cache-unaligned.sh \
|
|
$(NULL)
|
|
diff --git a/tests/test-cache-on-read-caches.sh b/tests/test-cache-on-read-caches.sh
|
|
new file mode 100755
|
|
index 00000000..80b34159
|
|
--- /dev/null
|
|
+++ b/tests/test-cache-on-read-caches.sh
|
|
@@ -0,0 +1,87 @@
|
|
+#!/usr/bin/env bash
|
|
+# nbdkit
|
|
+# Copyright (C) 2018-2021 Red Hat Inc.
|
|
+#
|
|
+# Redistribution and use in source and binary forms, with or without
|
|
+# modification, are permitted provided that the following conditions are
|
|
+# met:
|
|
+#
|
|
+# * Redistributions of source code must retain the above copyright
|
|
+# notice, this list of conditions and the following disclaimer.
|
|
+#
|
|
+# * Redistributions in binary form must reproduce the above copyright
|
|
+# notice, this list of conditions and the following disclaimer in the
|
|
+# documentation and/or other materials provided with the distribution.
|
|
+#
|
|
+# * Neither the name of Red Hat nor the names of its contributors may be
|
|
+# used to endorse or promote products derived from this software without
|
|
+# specific prior written permission.
|
|
+#
|
|
+# THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
|
|
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
+# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
|
|
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
|
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
+# SUCH DAMAGE.
|
|
+
|
|
+source ./functions.sh
|
|
+set -e
|
|
+set -x
|
|
+
|
|
+requires_filter cache
|
|
+requires_filter delay
|
|
+requires_nbdsh_uri
|
|
+
|
|
+sock=$(mktemp -u /tmp/nbdkit-test-sock.XXXXXX)
|
|
+files="$sock cache-on-read-caches.pid"
|
|
+rm -f $files
|
|
+cleanup_fn rm -f $files
|
|
+
|
|
+# Run nbdkit with the cache filter, cache-on-read and a read delay.
|
|
+start_nbdkit -P cache-on-read-caches.pid -U $sock \
|
|
+ --filter=cache --filter=delay \
|
|
+ memory 64K cache-on-read=true rdelay=10
|
|
+
|
|
+nbdsh --connect "nbd+unix://?socket=$sock" \
|
|
+ -c '
|
|
+from time import time
|
|
+
|
|
+# First read should suffer a penalty. Because we are reading
|
|
+# a single 64K block (same size as the cache block), we should
|
|
+# only suffer one penalty of approx. 10 seconds.
|
|
+st = time()
|
|
+zb = h.pread(65536, 0)
|
|
+et = time()
|
|
+el = et-st
|
|
+print("elapsed time: %g" % el)
|
|
+assert et-st >= 10
|
|
+assert zb == bytearray(65536)
|
|
+
|
|
+# Second read should not suffer a penalty.
|
|
+st = time()
|
|
+zb = h.pread(65536, 0)
|
|
+et = time()
|
|
+el = et-st
|
|
+print("elapsed time: %g" % el)
|
|
+assert el < 10
|
|
+assert zb == bytearray(65536)
|
|
+
|
|
+# Write something.
|
|
+buf = b"abcd" * 16384
|
|
+h.pwrite(buf, 0)
|
|
+
|
|
+# Reading back should be quick since it is stored in the overlay.
|
|
+st = time()
|
|
+buf2 = h.pread(65536, 0)
|
|
+et = time()
|
|
+el = et-st
|
|
+print("elapsed time: %g" % el)
|
|
+assert el < 10
|
|
+assert buf == buf2
|
|
+'
|
|
diff --git a/tests/test-cache-on-read.sh b/tests/test-cache-on-read.sh
|
|
index f8584dcd..85ca83d4 100755
|
|
--- a/tests/test-cache-on-read.sh
|
|
+++ b/tests/test-cache-on-read.sh
|
|
@@ -56,9 +56,4 @@ zero = h.pread(32768, 0)
|
|
assert zero == bytearray(32768)
|
|
buf2 = h.pread(65536, 32768)
|
|
assert buf == buf2
|
|
-
|
|
-# XXX Suggestion to improve this test: Use the delay filter below the
|
|
-# cache filter, and time reads to prove that the second read is faster
|
|
-# because it is not going through the delay filter and plugin.
|
|
-# XXX second h.pread here ...
|
|
'
|
|
--
|
|
2.31.1
|
|
|