1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-22 22:04:08 +03:00
samba-mirror/source3/script/tests/test_shadow_copy_torture.sh
Ralph Boehme d6b48ec379 CI: add a test listing a snapshotted directory
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15035

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit ba9c5ba8ec54e72d68e3f753a5350afe0fb50a7c)
2022-04-11 07:49:13 +00:00

229 lines
5.0 KiB
Bash
Executable File

#!/bin/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