Skip to content

Commit eae6953

Browse files
committed
tests: correct misuses of POSIXPERM
POSIXPERM requires that a later call to stat(2) (hence "ls -l") faithfully reproduces what an earlier chmod(2) did. Some filesystems cannot satisify this. SANITY requires that a file or a directory is indeed accessible (or inaccessible) when its permission bits would say it ought to be accessible (or inaccessible). Running tests as root would lose this prerequisite for obvious reasons. Fix a few tests that misuse POSIXPERM. t0061-run-command.sh has two uses of POSIXPERM. - One checks that an attempt to execute a file that is marked as unexecutable results in a failure with EACCES; I do not think having root-ness or any other capability that busts the filesystem permission mode bits will make you run an unexecutable file, so this should be left as-is. The test does not have anything to do with SANITY. - The other one expects 'git nitfol' runs the alias when an alias.nitfol is defined and a directory on the PATH is marked as unreadable and unsearchable. I _think_ the test tries to reject the alternative expectation that we want to refuse to run the alias because it would break "no alias may mask a command" rule if a file 'git-nitfol' exists in the unreadable directory but we cannot even determine if that is the case. Under !SANITY that busts the permission bits, this test no longer checks that, so it must be protected with SANITY. t1509-root-worktree.sh expects to be run on a / that is writable by the user and sees if Git behaves "sensibly" when /.git is the repository to govern a worktree that is the whole filesystem, and also if Git behaves "sensibly" when / itself is a bare repository with refs, objects, and friends (I find the definition of "behaves sensibly" under these conditions hard to fathom, but it is a different matter). The implementation of the test is very much problematic. - It requires POSIXPERM, but it does not do chmod or checks modes in any way. - It runs "rm /*" and "rm -fr /refs /objects ..." in one of the tests, and also does "cd / && git init --bare". If done on a live system that takes advantages of the "feature" being tested, these obviously will clobber the system. But there is no guard against such a breakage. - It uses "test $UID = 0" to see rootness, which now should be spelled "! test_have_prereq NOT_ROOT" Signed-off-by: Junio C Hamano <[email protected]>
1 parent 1767c51 commit eae6953

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

t/t0061-run-command.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ test_expect_success POSIXPERM 'run_command reports EACCES' '
3434
grep "fatal: cannot exec.*hello.sh" err
3535
'
3636

37-
test_expect_success POSIXPERM 'unreadable directory in PATH' '
37+
test_expect_success POSIXPERM,SANITY 'unreadable directory in PATH' '
3838
mkdir local-command &&
3939
test_when_finished "chmod u+rwx local-command && rm -fr local-command" &&
4040
git config alias.nitfol "!echo frotz" &&

t/t1509-root-worktree.sh

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,16 @@ test_foobar_foobar() {
9898
'
9999
}
100100

101-
if ! test_have_prereq POSIXPERM || ! [ -w / ]; then
102-
skip_all="Dangerous test skipped. Read this test if you want to execute it"
101+
if ! test -w /
102+
then
103+
skip_all="Test requiring writable / skipped. Read this test if you want to run it"
104+
test_done
105+
fi
106+
107+
if test -e /refs || test -e /objects || test -e /info || test -e /hooks ||
108+
test -e /.git || test -e /foo || test -e /me
109+
then
110+
skip_all="Skip test that clobbers existing files in /"
103111
test_done
104112
fi
105113

@@ -108,8 +116,9 @@ if [ "$IKNOWWHATIAMDOING" != "YES" ]; then
108116
test_done
109117
fi
110118

111-
if [ "$UID" = 0 ]; then
112-
skip_all="No you can't run this with root"
119+
if ! test_have_prereq NOT_ROOT
120+
then
121+
skip_all="No you can't run this as root"
113122
test_done
114123
fi
115124

0 commit comments

Comments
 (0)