1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-06 13:18:07 +03:00
samba-mirror/source3/script/tests/test_shadow_copy_torture.sh
Volker Lendecke 53c6f2fe91 tests: Enable a few tests for FreeBSD
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
2023-07-03 19:40:35 +00:00

228 lines
4.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Blackbox test for shadow_copy2 VFS.
#
if [ $# -lt 7 ]; then
cat <<EOF
Usage: test_shadow_copy SERVER SERVER_IP DOMAIN USERNAME PASSWORD WORKDIR SMBTORTURE SMBCLIENT
EOF
exit 1
fi
SERVER=${1}
SERVER_IP=${2}
DOMAIN=${3}
USERNAME=${4}
PASSWORD=${5}
WORKDIR=${6}
SMBTORTURE="$VALGRIND ${7}"
SMBCLIENT="$VALGRIND ${8}"
shift 7
incdir=$(dirname $0)/../../../testprogs/blackbox
. $incdir/subunit.sh
SNAPSHOT="@GMT-2015.10.31-19.40.30"
failed=0
cd $SELFTEST_TMPDIR || exit 1
# build a hierarchy of files, symlinks, and directories
build_files()
{
local destdir
destdir=$1
echo "$content" >$destdir/foo
mkdir -p $WORKDIR/subdir/
touch $WORKDIR/subdir/hardlink
}
# build a snapshots directory
build_snapshots()
{
local snapdir
snapdir=$WORKDIR/.snapshots
mkdir -p $snapdir/$SNAPSHOT
build_files $snapdir/$SNAPSHOT
mkdir -p $snapdir/$SNAPSHOT/subdir
ln "$WORKDIR"/subdir/hardlink "$snapdir"/$SNAPSHOT/subdir/hardlink
}
build_stream_on_snapshot()
{
file=$WORKDIR/.snapshots/$SNAPSHOT/foo
setfattr -n 'user.DosStream.bar:$DATA' -v baz $file || return 1
}
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)
}
test_shadow_copy_stream()
{
local msg
msg=$1
#delete snapshots from previous tests
find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1
build_snapshots
build_stream_on_snapshot || {
subunit_start_test msg
subunit_skip_test msg <<EOF
test_shadow_copy_stream needs an fs with xattrs
EOF
return 0
}
testit "reading stream of a shadow copy of a file" \
$SMBTORTURE \
-U$USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
--option="torture:twrp_file=foo" \
--option="torture:twrp_stream=bar" \
--option="torture:twrp_stream_size=3" \
--option="torture:twrp_snapshot=$SNAPSHOT" \
smb2.twrp.stream ||
failed=$(expr $failed + 1)
}
test_shadow_copy_openroot()
{
local msg
msg=$1
#delete snapshots from previous tests
find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1
build_snapshots
testit "opening shadow copy root of share" \
$SMBTORTURE \
-U$USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
--option="torture:twrp_snapshot=$SNAPSHOT" \
smb2.twrp.openroot ||
failed=$(expr $failed + 1)
}
test_shadow_copy_fix_inodes()
{
local msg
msg=$1
#delete snapshots from previous tests
find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1
build_snapshots
out=$($SMBCLIENT \
-U $USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
-c "open $SNAPSHOT/subdir/hardlink") || failed=$(expr $failed + 1)
echo $out
echo $out | grep "hardlink: for read/write fnum 1" || return 1
}
build_hiddenfile()
{
local snapdir
snapdir=$WORKDIR/.snapshots
#delete snapshots from previous tests
find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1
build_snapshots
touch $WORKDIR/hiddenfile
# Create a file with hidden attribute
$SMBCLIENT -U $USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
-c "put $WORKDIR/hiddenfile hiddenfile; setmode hiddenfile +h"
# ...and move it to the snapshot directory
mv $WORKDIR/hiddenfile $snapdir/$SNAPSHOT/
}
test_hiddenfile()
{
build_hiddenfile
out=$($SMBCLIENT \
-U $USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
-c "allinfo $SNAPSHOT/hiddenfile") || return 1
echo $out
echo $out | grep "attributes: HA (22)" || return 1
out=$($SMBCLIENT \
-U $USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
-c "ls $SNAPSHOT/hiddenfile") || return 1
echo $out
echo $out | grep "hiddenfile[[:blank:]]*AH" || return 1
return 0
}
test_shadow_copy_listdir_fix_inodes()
{
local msg
msg=$1
#delete snapshots from previous tests
find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1
build_snapshots
testit "$msg" \
$SMBTORTURE \
-U$USERNAME%$PASSWORD \
"//$SERVER/shadow_write" \
--option="torture:twrp_snapshot=$SNAPSHOT" \
smb2.twrp.listdir ||
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"
test_shadow_copy_stream "reading stream of snapshotted file"
test_shadow_copy_openroot "opening root of shadow copy share"
testit "fix inodes with hardlink" test_shadow_copy_fix_inodes || failed=$(expr $failed + 1)
testit "Test reading DOS attribute" test_hiddenfile || failed=$(expr $failed + 1)
test_shadow_copy_listdir_fix_inodes "fix inodes when listing directory"
exit $failed