selftest: test for case insensitivity over SMB2/SMB3
authorChristian Ambach <ambi@samba.org>
Mon, 4 Apr 2016 17:28:05 +0000 (19:28 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 3 May 2016 23:28:23 +0000 (01:28 +0200)
Signed-off-by: Christian Ambach <ambi@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/script/tests/test_smb2_not_casesensitive.sh [new file with mode: 0755]
source3/selftest/tests.py

diff --git a/source3/script/tests/test_smb2_not_casesensitive.sh b/source3/script/tests/test_smb2_not_casesensitive.sh
new file mode 100755 (executable)
index 0000000..a643ae7
--- /dev/null
@@ -0,0 +1,82 @@
+#!/bin/sh
+#
+# Blackbox test for SMB2 case insensitivity
+#
+
+if [ $# -lt 6 ]; then
+cat <<EOF
+Usage: test_smb2_not_casesensitive SERVER SERVER_IP USERNAME PASSWORD LOCAL_PATH SMBCLIENT
+EOF
+exit 1;
+fi
+
+SERVER=${1}
+SERVER_IP=${2}
+USERNAME=${3}
+PASSWORD=${4}
+LOCAL_PATH=${5}
+SMBCLIENT=${6}
+
+incdir=`dirname $0`/../../../testprogs/blackbox
+. $incdir/subunit.sh
+
+failed=0
+
+# Test a file with different case works over SMB2 and later
+test_access_with_different_case()
+{
+       tmpfile=$LOCAL_PATH/testfile.txt
+       echo "foobar" > $tmpfile
+
+       cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT -mSMB3 -U$USERNAME%$PASSWORD "$SERVER" -I $SERVER_IP -c "ls TeStFiLe.TxT" 2>&1'
+       out=`eval $cmd`
+       ret=$?
+
+       rm -f $tmpfile
+
+       if [ $ret = 0 ]; then
+               return 0
+       else
+               echo "$out"
+               echo "failed to get file with different case"
+               return 1
+       fi
+}
+
+# Test that a rename causes a conflict works when target name exists in
+# different case
+test_rename()
+{
+set -x
+       tmpfile=$LOCAL_PATH/torename.txt
+       echo "foobar" > $tmpfile
+       targetfile=$LOCAL_PATH/target.txt
+       touch $targetfile
+
+       cmd='CLI_FORCE_INTERACTIVE=yes $SMBCLIENT -mSMB3 -U$USERNAME%$PASSWORD "$SERVER" -I $SERVER_IP -c "rename ToReNaMe.TxT TaRgEt.txt" 2>&1'
+       out=`eval $cmd`
+       ret=$?
+
+       rm -f $tmpfile
+       rm -f $targetfile
+       rm -f $LOCAL_PATH/TaRgEt.txt
+
+       if [ $ret = 1 -a -z "${out##*COLLISION*}" ]; then
+               return 0
+       else
+               echo "$out"
+               echo "failed to get file with different case"
+               return 1
+       fi
+}
+
+
+testit "accessing a file with different case succeeds" \
+       test_access_with_different_case || \
+       failed=`expr $failed + 1`
+
+testit "renaming a file with different case succeeds" \
+       test_rename || \
+       failed=`expr $failed + 1`
+
+exit $failed
index 2bd4110c0f7f63c929450855315c1c9b975d1a3b..077510c1550619f6231b63fbcdd4cf453e2a21c9 100755 (executable)
@@ -190,6 +190,7 @@ for env in ["fileserver"]:
     plantestsuite("samba3.blackbox.smbget (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smbget.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', 'smbget_user', '$PASSWORD', '$LOCAL_PATH/smbget', smbget])
     plantestsuite("samba3.blackbox.netshareenum (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_shareenum.sh"), '$SERVER', '$USERNAME', '$PASSWORD', rpcclient])
     plantestsuite("samba3.blackbox.acl_xattr (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_acl_xattr.sh"), '$SERVER', '$USERNAME', '$PASSWORD', '$PREFIX', smbclient3, smbcacls])
+    plantestsuite("samba3.blackbox.smb2.not_casesensitive (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_smb2_not_casesensitive.sh"), '//$SERVER/tmp', '$SERVER_IP', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', smbclient3])
 
     #
     # tar command tests