# the aio_delay_inject share which is preconfigured
# with 2 second delays on pread/pwrite.
-if [ $# -lt 5 ]; then
- echo Usage: test_share_force_close.sh \
- SERVERCONFFILE SMBCLIENT SMBCONTROL IP aio_delay_inject_sharename
-exit 1
+if [ $# -lt 6 ]; then
+ echo Usage: $0 SERVERCONFFILE SMBCLIENT SMBCONTROL IP aio_delay_inject_sharename PREFIX
+ exit 1
fi
-CONF=$1
-SMBCLIENT=$2
+CONFIGURATION=$1
+smbclient=$2
SMBCONTROL=$3
SERVER=$4
SHARE=$5
+PREFIX=$6
+shift 6
incdir=$(dirname $0)/../../../testprogs/blackbox
. $incdir/subunit.sh
+. $incdir/common_test_fns.inc
failed=0
+mkdir -p $PREFIX/private
+
+FIFO_STDIN="$PREFIX/smbclient-stdin"
+FIFO_STDOUT="$PREFIX/smbclient-stdout"
+FIFO_STDERR="$PREFIX/smbclient-stderr"
+TESTFILE="$PREFIX/testfile"
+
+rm -f $FIFO_STDIN $FIFO_STDOUT $FIFO_STDERR $TESTFILE 2>/dev/null
+
# Create the smbclient communication pipes.
-rm -f smbclient-stdin smbclient-stdout smbclient-stderr
-mkfifo smbclient-stdin smbclient-stdout smbclient-stderr
+mkfifo $FIFO_STDIN $FIFO_STDOUT $FIFO_STDERR
+if [ $? -ne 0 ]; then
+ echo "Failed to create fifos"
+ exit 1
+fi
# Create a large-ish testfile
-rm testfile
-head -c 20MB /dev/zero >testfile
+head -c 100MB /dev/zero >$TESTFILE
CLI_FORCE_INTERACTIVE=1; export CLI_FORCE_INTERACTIVE
-${SMBCLIENT} //${SERVER}/${SHARE} ${CONF} -U${USER}%${PASSWORD} \
- < smbclient-stdin > smbclient-stdout 2>smbclient-stderr &
+${smbclient} //${SERVER}/${SHARE} ${CONFIGURATION} -U${USER}%${PASSWORD} \
+ < $FIFO_STDIN > $FIFO_STDOUT 2>$FIFO_STDERR &
CLIENT_PID=$!
-sleep 1
-
-exec 100>smbclient-stdin 101<smbclient-stdout 102<smbclient-stderr
+count=0
+while [ 1 ]; do
+ if [ $count -ge 20 ]; then
+ echo "Failed to start smbclient"
+ exit 1
+ fi
+ kill -0 $CLIENT_PID
+ if [ $? -eq 0 ]; then
+ break
+ fi
+ sleep 0.5
+ count=$((count + 1))
+done
+
+exec 100>$FIFO_STDIN 101<$FIFO_STDOUT 102<$FIFO_STDERR
# consume the smbclient startup messages
head -n 1 <&101
head -n 1 <&102
# Ensure we're putting a fresh file.
+echo "lcd $(dirname $TESTFILE)" >&100
echo "del testfile" >&100
echo "put testfile" >&100
-sleep 1
+sleep 0.2
# Close the aio_delay_inject share whilst we have outstanding writes.
-testit "smbcontrol" ${SMBCONTROL} ${CONF} smbd close-share ${SHARE} ||
+testit "smbcontrol" ${SMBCONTROL} ${CONFIGURATION} smbd close-share ${SHARE} ||
failed=$(expr $failed + 1)
-sleep 1
+sleep 0.5
# If we get one or more NT_STATUS_NETWORK_NAME_DELETED
# or NT_STATUS_INVALID_HANDLE on stderr from the writes we
kill ${CLIENT_PID}
-# Rerun smbclient to remove the testfile on the server.
-rm -f smbclient-stdin smbclient-stdout smbclient-stderr testfile
-mkfifo smbclient-stdin smbclient-stdout
-
-${SMBCLIENT} //${SERVER}/${SHARE} ${CONF} -U${USER}%${PASSWORD} \
- < smbclient-stdin > smbclient-stdout &
-CLIENT_PID=$!
-
-sleep 1
-
-exec 100>smbclient-stdin 101<smbclient-stdout
-
-echo "del testfile" >&100
-
-sleep 1
-
-kill ${CLIENT_PID}
-
-rm -f smbclient-stdin smbclient-stdout testfile
+# Remove the testfile from the server
+test_smbclient "remove_testfile" \
+ 'del testfile; quit' //${SERVER}/${SHARE} -U${USER}%${PASSWORD} \
+ || failed=$(expr $failed + 1)
testok $0 $failed