#!/usr/bin/env bash # # Blackbox test for shadow_copy2 VFS. # if [ $# -lt 7 ]; then cat <$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 </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