From: Ralph Boehme Date: Fri, 23 Nov 2018 09:18:44 +0000 (+0100) Subject: s3:script/tests: add a test for VSS write behaviour X-Git-Tag: samba-4.8.9~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=de114204480a59b06ac6d8e63647cb6ec9e06b7e;p=thirdparty%2Fsamba.git s3:script/tests: add a test for VSS write behaviour Bug: https://bugzilla.samba.org/show_bug.cgi?id=13688 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison (backported from commit 12778f015988f7e8755016c72c26939998758dae) --- diff --git a/selftest/knownfail.d/samba3.blackbox b/selftest/knownfail.d/samba3.blackbox new file mode 100644 index 00000000000..16537e58aeb --- /dev/null +++ b/selftest/knownfail.d/samba3.blackbox @@ -0,0 +1 @@ +^samba3.blackbox.shadow_copy_torture.writing to shadow copy of a file\(fileserver\) diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 3747a1e087e..02060f1e0f6 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -2158,6 +2158,15 @@ sub provision($$$$$$$$$) vfs objects = shadow_copy2 shadow:mountpoint = $shadow_mntdir wide links = yes + +[shadow_write] + path = $shadow_tstdir + comment = previous versions snapshots under mount point + vfs objects = shadow_copy2 error_inject + aio write size = 0 + error_inject:pwrite = EBADF + shadow:mountpoint = $shadow_tstdir + [dfq] path = $shrdir/dfree vfs objects = acl_xattr fake_acls xattr_tdb fake_dfq diff --git a/source3/script/tests/test_shadow_copy_torture.sh b/source3/script/tests/test_shadow_copy_torture.sh new file mode 100755 index 00000000000..d47cd512a20 --- /dev/null +++ b/source3/script/tests/test_shadow_copy_torture.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# +# Blackbox test for shadow_copy2 VFS. +# + +if [ $# -lt 7 ]; then +cat < $destdir/foo +} + +# build a snapshots directory +build_snapshots() +{ + local snapdir + + snapdir=$WORKDIR/.snapshots + + mkdir -p $snapdir + mkdir $snapdir/$SNAPSHOT + + build_files $snapdir/$SNAPSHOT +} + +test_shadow_copy_write() +{ + local msg + + msg=$1 + + #delete snapshots from previous tests + find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1 + build_snapshots + + testit "writing to shadow copy of a file" \ + $SMBTORTURE \ + -U$USERNAME%$PASSWORD \ + "//$SERVER/shadow_write" \ + --option="torture:twrp_file=foo" \ + --option="torture:twrp_snapshot=$SNAPSHOT" \ + smb2.twrp.write || \ + failed=`expr $failed + 1` +} + +build_files $WORKDIR + +# test open for writing and write behaviour of snapshoted files +test_shadow_copy_write "write behaviour of snapshoted files" + +exit $failed diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 7b3552a31b9..afdc32437af 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -275,6 +275,7 @@ for env in ["fileserver"]: plantestsuite("samba3.blackbox.offline (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_offline.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/offline', smbclient3]) plantestsuite("samba3.blackbox.shadow_copy2 NT1 (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_shadow_copy.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/shadow', smbclient3, '-m', 'NT1']) plantestsuite("samba3.blackbox.shadow_copy2 SMB3 (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_shadow_copy.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/shadow', smbclient3, '-m', 'SMB3']) + plantestsuite("samba3.blackbox.shadow_copy_torture", env, [os.path.join(samba3srcdir, "script/tests/test_shadow_copy_torture.sh"), '$SERVER', '$SERVER_IP', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH/shadow', smbtorture4]) plantestsuite("samba3.blackbox.smbclient.forceuser_validusers (%s)" % env, env, [os.path.join(samba3srcdir, "script/tests/test_forceuser_validusers.sh"), '$SERVER', '$DOMAIN', '$USERNAME', '$PASSWORD', '$LOCAL_PATH', smbclient3]) 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])