Demonstrate that the previous patch fixed an issue with calling into
the plugin with a NULL handle after reopen failed.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
tests/test-retry-reopen-fail.sh | 49 +++++++++++++++++++++++++++++----
1 file changed, 43 insertions(+), 6 deletions(-)
diff --git a/tests/test-retry-reopen-fail.sh b/tests/test-retry-reopen-fail.sh
index 1aec0509..e9ec6e42 100755
--- a/tests/test-retry-reopen-fail.sh
+++ b/tests/test-retry-reopen-fail.sh
@@ -41,27 +41,38 @@ fail=0
requires qemu-io --version
-files="retry-reopen-fail-count retry-reopen-fail-open-count"
+files="retry-reopen-fail-count retry-reopen-fail-open-count
+ retry-reopen-fail-status"
rm -f $files
cleanup_fn rm -f $files
-# do_test retries mintime expcount
+# do_test retries mintime expcount status
do_test ()
{
retries=$1
mintime=$2
expcount=$3
+ status=$4
echo 0 > retry-reopen-fail-count
echo 0 > retry-reopen-fail-open-count
+ : > retry-reopen-fail-status
start_t=$SECONDS
# Create a custom plugin which will test retrying.
nbdkit -v -U - \
sh - \
--filter=retry retry-delay=1 retries=$retries \
- --run 'qemu-io -r -f raw $nbd -c "r 0 512" -c "r 0
512"' <<'EOF'
+ --run 'qemu-io -r -f raw $nbd -c "r 0 512" -c "r 0
512"
+ echo $? >> retry-reopen-fail-status' <<'EOF'
#!/usr/bin/env bash
+handle=$2
+check_handle () {
+ if [ x"$handle" != xhandle ]; then
+ echo 22 >> retry-reopen-fail-status
+ exit 22
+ fi
+}
case "$1" in
open)
# Count how many times the connection is (re-)opened.
@@ -72,8 +83,10 @@ case "$1" in
echo "EIO open failed" >&2
exit 1
fi
+ echo "handle"
;;
pread)
+ check_handle
# Fail 2 times then succeed.
read i < retry-reopen-fail-count
((i++))
@@ -86,7 +99,9 @@ case "$1" in
fi
;;
- get_size) echo 512 ;;
+ get_size)
+ check_handle
+ echo 512 ;;
*) exit 2 ;;
esac
EOF
@@ -104,9 +119,16 @@ EOF
echo "$0: open-count ($open_count) != $expcount"
fail=1
fi
+
+ # Check the exit status of qemu-io
+ read qemu_status < retry-reopen-fail-status
+ if [ $qemu_status -ne $status ]; then
+ echo "$0: status ($qemu_status) != $status"
+ fail=1
+ fi
}
-# In this test we should see 3 failures:
+# In this first test we should see 3 failures:
# first pread FAILS
# retry and wait 1 seconds
# open FAILS
@@ -119,6 +141,21 @@ EOF
# second pread succeeds
# The minimum time for the test should be 1+2+4 = 7 seconds.
-do_test 5 7 4
+do_test 5 7 4 0
+
+# In this second test we should see the following:
+# first pread FAILS
+# retry and wait 1 seconds
+# open FAILS, ending first pread in failure
+# first pread FAILS
+# second pread requires open
+# open succeeds
+# second pread FAILS
+# retry and wait 1 seconds
+# open succeeds
+# second pread succeeds
+
+# The minimum time for the test should be 1+1 = 2 seconds.
+do_test 1 2 3 1
exit $fail
--
2.21.0