diff options
author | Jeremy Allison <jra@samba.org> | 2020-06-22 13:44:12 -0700 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2020-06-26 07:52:25 +0000 |
commit | 19c6e21cfd62dcda709fca5ea9fc1bad04533277 (patch) | |
tree | 5ac1531c1debcefdf092903e38a1379876f01455 | |
parent | 3db89a6c8809fd7ff733ab1b7d401ea202f29ab0 (diff) | |
download | samba-19c6e21cfd62dcda709fca5ea9fc1bad04533277.tar.gz |
s3: selftest: Add samba3.blackbox.aio-outstanding test.
Shows smbd panics if connection is terminated (torn down)
by killing the client with outstanding aio requests in the
queue. As we're closing smbd we should cope with this.
Followup-bugfix for:
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14301
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
(cherry picked from commit f206d37f6ec8143b2051a8fe15783c188344adbe)
-rw-r--r-- | selftest/knownfail.d/aio_outstanding | 2 | ||||
-rwxr-xr-x | source3/script/tests/test_aio_outstanding.sh | 92 | ||||
-rwxr-xr-x | source3/selftest/tests.py | 8 |
3 files changed, 102 insertions, 0 deletions
diff --git a/selftest/knownfail.d/aio_outstanding b/selftest/knownfail.d/aio_outstanding new file mode 100644 index 00000000000..6426f760cb1 --- /dev/null +++ b/selftest/knownfail.d/aio_outstanding @@ -0,0 +1,2 @@ +samba3.blackbox.aio-outstanding + diff --git a/source3/script/tests/test_aio_outstanding.sh b/source3/script/tests/test_aio_outstanding.sh new file mode 100755 index 00000000000..b189343bb24 --- /dev/null +++ b/source3/script/tests/test_aio_outstanding.sh @@ -0,0 +1,92 @@ +#!/bin/bash +# +# Test terminating an smbclient connection with outstanding +# aio requests. +# +# Note this is designed to be run against +# the aio_delay_inject share which is preconfigured +# with 2 second delays on pread/pwrite. + +if [ $# -lt 4 ]; then + echo Usage: test_aio_outstanding.sh \ + SERVERCONFFILE SMBCLIENT IP aio_delay_inject_sharename +exit 1 +fi + +CONF=$1 +SMBCLIENT=$2 +SERVER=$3 +SHARE=$4 + +incdir=$(dirname $0)/../../../testprogs/blackbox +. $incdir/subunit.sh + +failed=0 +# +# Note if we already have any panics in the smbd log. +# +panic_count_0=$(grep -c PANIC $SMBD_TEST_LOG) + +# Create the smbclient communication pipes. +rm -f smbclient-stdin smbclient-stdout smbclient-stderr +mkfifo smbclient-stdin smbclient-stdout smbclient-stderr + +# Create a large-ish testfile +rm aio_outstanding_testfile +head -c 20MB /dev/zero >aio_outstanding_testfile + +CLI_FORCE_INTERACTIVE=1; export CLI_FORCE_INTERACTIVE + +${SMBCLIENT} //${SERVER}/${SHARE} ${CONF} -U${USER}%${PASSWORD} \ + < smbclient-stdin > smbclient-stdout 2>smbclient-stderr & +CLIENT_PID=$! + +sleep 1 + +exec 100>smbclient-stdin 101<smbclient-stdout 102<smbclient-stderr + +# consume the smbclient startup messages +head -n 1 <&101 +head -n 1 <&102 + +# Ensure we're putting a fresh file. +echo "del aio_outstanding_testfile" >&100 +echo "put aio_outstanding_testfile" >&100 + +sleep 2 + +# Terminate the smbclient write to the aio_delay_inject share whilst +# we have outstanding writes. +kill $CLIENT_PID + +sleep 1 + +# Ensure the panic count didn't change. +# +# BUG: https://bugzilla.samba.org/show_bug.cgi?id=14301 +# + +panic_count_1=$(grep -c PANIC $SMBD_TEST_LOG) + +# Rerun smbclient to remove the testfile on the server. +rm -f smbclient-stdin smbclient-stdout smbclient-stderr aio_outstanding_testfile +mkfifo smbclient-stdin smbclient-stdout + +${SMBCLIENT} //${SERVER}/${SHARE} ${CONF} -U${USER}%${PASSWORD} \ + < smbclient-stdin > smbclient-stdout & + +sleep 1 + +exec 100>smbclient-stdin 101<smbclient-stdout + +echo "del aio_outstanding_testfile" >&100 +echo "exit" >&100 + +sleep 2 + +rm -f smbclient-stdin smbclient-stdout aio_outstanding_testfile + +testit "check_panic" test $panic_count_0 -eq $panic_count_1 || + failed=$(expr $failed + 1) + +testok $0 $failed diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 72bca263c0b..148ef9cd306 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -838,6 +838,14 @@ plantestsuite("samba3.blackbox.net_tdb", "simpleserver:local", smbclient3, '$SERVER', 'tmp', '$USERNAME', '$PASSWORD', configuration, '$LOCAL_PATH', '$LOCK_DIR']) +plantestsuite("samba3.blackbox.aio-outstanding", "simpleserver:local", + [os.path.join(samba3srcdir, + "script/tests/test_aio_outstanding.sh"), + configuration, + os.path.join(bindir(), "smbclient"), + '$SERVER_IP', + "aio_delay_inject"]) + plantestsuite("samba3.blackbox.smbd_error", "simpleserver:local", [os.path.join(samba3srcdir, "script/tests/test_smbd_error.sh")]) |