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:
parent
ab50d348d9
commit
f206d37f6e
2
selftest/knownfail.d/aio_outstanding
Normal file
2
selftest/knownfail.d/aio_outstanding
Normal file
@ -0,0 +1,2 @@
|
||||
samba3.blackbox.aio-outstanding
|
||||
|
92
source3/script/tests/test_aio_outstanding.sh
Executable file
92
source3/script/tests/test_aio_outstanding.sh
Executable 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
|
@ -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")])
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user