test-lib.sh: set prerequisite SANITY by testing what we really need

What we wanted out of the SANITY precondition is that the filesystem
behaves sensibly with permission bits settings.

 - You should not be able to remove a file in a read-only directory,

 - You should not be able to tell if a file in a directory exists if
   the directory lacks read or execute permission bits.

We used to cheat by approximating that condition with "is the /
writable?" test and/or "are we running as root?" test.  Neither test
is sufficient or appropriate in environments like Cygwin.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Torsten Bögershausen 2015-01-27 16:39:01 +01:00 committed by Junio C Hamano
parent eae69530ae
commit f400e51c13

View File

@ -997,9 +997,28 @@ test_lazy_prereq NOT_ROOT '
test "$uid" != 0 test "$uid" != 0
' '
# When the tests are run as root, permission tests will report that # On a filesystem that lacks SANITY, a file can be deleted even if
# things are writable when they shouldn't be. # the containing directory doesn't have write permissions, or a file
test -w / || test_set_prereq SANITY # can be accessed even if the containing directory doesn't have read
# or execute permissions, causing our tests that validate that Git
# works sensibly in such situations.
test_lazy_prereq SANITY '
mkdir SANETESTD.1 SANETESTD.2 &&
chmod +w SANETESTD.1 SANETESTD.2 &&
>SANETESTD.1/x 2>SANETESTD.2/x &&
chmod -w SANETESTD.1 &&
chmod -rx SANETESTD.2 ||
error "bug in test sript: cannot prepare SANETESTD"
! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
status=$?
chmod +rwx SANETESTD.1 SANETESTD.2 &&
rm -rf SANETESTD.1 SANETESTD.2 ||
error "bug in test sript: cannot clean SANETESTD"
return $status
'
GIT_UNZIP=${GIT_UNZIP:-unzip} GIT_UNZIP=${GIT_UNZIP:-unzip}
test_lazy_prereq UNZIP ' test_lazy_prereq UNZIP '