1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

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>
This commit is contained in:
Jeremy Allison 2020-06-22 13:44:12 -07:00
parent ab50d348d9
commit f206d37f6e
3 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,2 @@
samba3.blackbox.aio-outstanding

View File

@ -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

View File

@ -966,6 +966,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")])