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>

Junio C Hamano committed Jan 19, 2016 at 14:09 UTC 719c3da2f183cfc751bb801a2c903f2eb015d131
1 file changed +13 -5
t/test-lib.sh
+13 -5
@@ -997,20 +997,28 @@ test_lazy_prereq NOT_ROOT '
997 test "$uid" != 0
998 '
999
1000 -# On a filesystem that lacks SANITY, a file can be deleted even if
1001 -# the containing directory doesn't have write permissions, or a file
1002 -# can be accessed even if the containing directory doesn't have read
1003 -# or execute permissions, causing our tests that validate that Git
1004 -# works sensibly in such situations.
1000 +# SANITY is about "can you correctly predict what the filesystem would
1001 +# do by only looking at the permission bits of the files and
1002 +# directories?" A typical example of !SANITY is running the test
1003 +# suite as root, where a test may expect "chmod -r file && cat file"
1004 +# to fail because file is supposed to be unreadable after a successful
1005 +# chmod. In an environment (i.e. combination of what filesystem is
1006 +# being used and who is running the tests) that lacks SANITY, you may
1007 +# be able to delete or create a file when the containing directory
1008 +# doesn't have write permissions, or access a file even if the
1009 +# containing directory doesn't have read or execute permissions.
1010 +
1011 test_lazy_prereq SANITY '
1012 mkdir SANETESTD.1 SANETESTD.2 &&
1013
1014 chmod +w SANETESTD.1 SANETESTD.2 &&
1015 >SANETESTD.1/x 2>SANETESTD.2/x &&
1016 chmod -w SANETESTD.1 &&
1017 + chmod -r SANETESTD.1/x &&
1018 chmod -rx SANETESTD.2 ||
1019 error "bug in test sript: cannot prepare SANETESTD"
1020
1021 + ! test -r SANETESTD.1/x &&
1022 ! rm SANETESTD.1/x && ! test -f SANETESTD.2/x
1023 status=$?
1024