test-lib: clarify and tighten SANITY

f400e51c (test-lib.sh: set prerequisite SANITY by testing what we
really need, 2015-01-27) improved the way SANITY prerequisite was
determined, but made the resulting code (incorrectly) imply that
SANITY is all about effects of permission bits of the containing
directory has on the files contained in it by the comment it added,
its log message and the actual tests.

State what SANITY is about more clearly in the comment, and test
that a file whose permission bits says should be unreadble truly
cannot be read.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano
2016-01-19 14:09:37 -08:00
parent f400e51c13
commit 719c3da2f1

View File

@ -997,20 +997,28 @@ test_lazy_prereq NOT_ROOT '
test "$uid" != 0 test "$uid" != 0
' '
# On a filesystem that lacks SANITY, a file can be deleted even if # SANITY is about "can you correctly predict what the filesystem would
# the containing directory doesn't have write permissions, or a file # do by only looking at the permission bits of the files and
# can be accessed even if the containing directory doesn't have read # directories?" A typical example of !SANITY is running the test
# or execute permissions, causing our tests that validate that Git # suite as root, where a test may expect "chmod -r file && cat file"
# works sensibly in such situations. # to fail because file is supposed to be unreadable after a successful
# chmod. In an environment (i.e. combination of what filesystem is
# being used and who is running the tests) that lacks SANITY, you may
# be able to delete or create a file when the containing directory
# doesn't have write permissions, or access a file even if the
# containing directory doesn't have read or execute permissions.
test_lazy_prereq SANITY ' test_lazy_prereq SANITY '
mkdir SANETESTD.1 SANETESTD.2 && mkdir SANETESTD.1 SANETESTD.2 &&
chmod +w SANETESTD.1 SANETESTD.2 && chmod +w SANETESTD.1 SANETESTD.2 &&
>SANETESTD.1/x 2>SANETESTD.2/x && >SANETESTD.1/x 2>SANETESTD.2/x &&
chmod -w SANETESTD.1 && chmod -w SANETESTD.1 &&
chmod -r SANETESTD.1/x &&
chmod -rx SANETESTD.2 || chmod -rx SANETESTD.2 ||
error "bug in test sript: cannot prepare SANETESTD" error "bug in test sript: cannot prepare SANETESTD"
! test -r SANETESTD.1/x &&
! rm SANETESTD.1/x && ! test -f SANETESTD.2/x ! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
status=$? status=$?