summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUri Simchoni <uri@samba.org>2016-08-23 14:03:30 +0300
committerKarolin Seeger <kseeger@samba.org>2016-09-20 10:10:17 +0200
commitdcf7d8585aa7510a31a47545d410ec2a4dd58791 (patch)
tree3a5c8c65928d38cc9a78e674ca9e6690a9344367
parentd83567942aa35e22d96dd126c4d8d5b1d5e88160 (diff)
downloadsamba-dcf7d8585aa7510a31a47545d410ec2a4dd58791.tar.gz
selftest: check file readability in shadow_copy2 test
Add tests which verify that a snapshot file is readable if and only if it its metadata can be retrieved. Also verify (in most tests) that file is retrieved from the correct snapshot. Together with the existing test for number of previous versions we can stat, this test checks that we can read those files, and also that we cannot break out of a snapshot if wide links are not allowed. BUG: https://bugzilla.samba.org/show_bug.cgi?id=12172 Signed-off-by: Uri Simchoni <uri@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> (cherry picked from commit 495b8177363bf1930f3afb373ad73caac022f353)
-rwxr-xr-xsource3/script/tests/test_shadow_copy.sh42
1 files changed, 36 insertions, 6 deletions
diff --git a/source3/script/tests/test_shadow_copy.sh b/source3/script/tests/test_shadow_copy.sh
index f5a1444b4fe..8b7e4c754b4 100755
--- a/source3/script/tests/test_shadow_copy.sh
+++ b/source3/script/tests/test_shadow_copy.sh
@@ -129,18 +129,48 @@ test_count_versions()
local share
local path
local expected_count
+ local skip_content
local versions
+ local tstamps
+ local tstamp
+ local content
share=$1
path=$2
expected_count=$3
+ skip_content=$4
versions=`$SMBCLIENT -U$USERNAME%$PASSWORD "//$SERVER/$share" -I $SERVER_IP -c "allinfo $path" | grep "^create_time:" | wc -l`
- if [ "$versions" = "$expected_count" ] ; then
- true
- else
+ if [ "$versions" != "$expected_count" ] ; then
echo "expected $expected_count versions of $path, got $versions"
- false
+ return 1
fi
+
+ #readable snapshots
+ tstamps=`$SMBCLIENT -U$USERNAME%$PASSWORD "//$SERVER/$share" -I $SERVER_IP -c "allinfo $path" | awk '/^@GMT-/ {snapshot=$1} /^create_time:/ {printf "%s\n", snapshot}'`
+ for tstamp in $tstamps ; do
+ if ! $SMBCLIENT -U$USERNAME%$PASSWORD "//$SERVER/$share" -I $SERVER_IP -c "get $tstamp\\$path $WORKDIR/foo" ; then
+ echo "Failed getting \\\\$SERVER\\$share\\$tstamp\\$path"
+ return 1
+ fi
+ #also check the content, but not for wide links
+ if [ "x$skip_content" != "x1" ] ; then
+ content=`cat $WORKDIR/foo`
+ if [ "$content" != "$tstamp" ] ; then
+ echo "incorrect content of \\\\$SERVER\\$share\\$tstamp\\$path expected [$tstamp] got [$content]"
+ return 1
+ fi
+ fi
+ done
+
+ #non-readable snapshots
+ tstamps=`$SMBCLIENT -U$USERNAME%$PASSWORD "//$SERVER/$share" -I $SERVER_IP -c "allinfo $path" | \
+ awk '/^@GMT-/ {if (snapshot!=""){printf "%s\n", snapshot} ; snapshot=$1} /^create_time:/ {snapshot=""} END {if (snapshot!=""){printf "%s\n", snapshot}}'`
+ for tstamp in $tstamps ; do
+ if $SMBCLIENT -U$USERNAME%$PASSWORD "//$SERVER/$share" -I $SERVER_IP -c "get $tstamp\\$path $WORKDIR/foo" ; then
+ echo "Unexpected success getting \\\\$SERVER\\$share\\$tstamp\\$path"
+ return 1
+ fi
+ done
}
# Test fetching a previous version of a file
@@ -196,11 +226,11 @@ test_shadow_copy_fixed()
failed=`expr $failed + 1`
testit "$msg - abs symlink outside" \
- test_count_versions $share bar/letcpasswd $ncopies_blocked || \
+ test_count_versions $share bar/letcpasswd $ncopies_blocked 1 || \
failed=`expr $failed + 1`
testit "$msg - rel symlink outside" \
- test_count_versions $share bar/loutside $ncopies_blocked || \
+ test_count_versions $share bar/loutside $ncopies_blocked 1 || \
failed=`expr $failed + 1`
}