Skip to content

Commit

Permalink
test-lib.sh: set prerequisite SANITY by testing what we really need
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Torsten Bögershausen authored and Junio C Hamano committed Feb 15, 2015
1 parent eae6953 commit f400e51
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions t/test-lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -997,9 +997,28 @@ test_lazy_prereq NOT_ROOT '
test "$uid" != 0
'

# When the tests are run as root, permission tests will report that
# things are writable when they shouldn't be.
test -w / || test_set_prereq SANITY
# On a filesystem that lacks SANITY, a file can be deleted even if
# the containing directory doesn't have write permissions, or a file
# 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}
test_lazy_prereq UNZIP '
Expand Down

0 comments on commit f400e51

Please sign in to comment.