On Fri, Jun 10, 2022 at 10:55:27AM -0500, Eric Blake wrote:
Add testsuite coverage for the bug fixed in the previous patch (done
separately, to make it easier to prove the test fails without the
patch).
---
tests/Makefile.am | 2 +
tests/test-eval-cache.sh | 85 ++++++++++++++++++++++++++++++++++++++++
+# This plugin requests nbdkit to emulate caching with pread. When
the witness
+# file exists, cache reads; when absent, reads fail if not already cached.
+export witness="$PWD/eval-cache.witness"
+export cache="$PWD/eval-cache.cache"
+export script='
+import os
+import errno
+
+witness = os.getenv("witness")
+
+def touch(path):
+ open(path, "a").close()
+
+# Test that uncached read fails
+try:
+ h.pread(1024 * 1024, 0)
+except nbd.Error as ex:
+ assert ex.errnum == errno.EIO
+
+# Cache the entire image; nbdkit should break it into 64k preads
64M preads
+touch(witness)
+h.cache(h.get_size(), 0)
+os.unlink(witness)
+
+# Now read should succeed
+buf = h.pread(64 * 1024 * 1024, 64 * 1024 * 1024)
+if hasattr(buf, "is_zero"):
+ assert buf.is_zero()
+'
+nbdkit -U - -v eval \
+ get_size='echo 128M' can_cache='echo emulate' open='touch
"$cache"' \
+ pread='
+ if test -f "$witness"; then
+ echo "$3 $4" >> "$cache"
+ elif ! grep -q "^$3 $4$" "$cache"; then
+ echo EIO >&2; exit 1
+ fi
+ dd if=/dev/zero count=$3 iflag=count_bytes
+ ' --run 'nbdsh -u "$uri" -c "$script"'
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization:
qemu.org |
libvirt.org