This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In t/op/filetest.t, simplify the skip logic when testing -r and -w on op.
authorNicholas Clark <nick@ccl4.org>
Thu, 24 May 2012 08:45:00 +0000 (09:45 +0100)
committerNicholas Clark <nick@ccl4.org>
Thu, 31 May 2012 16:09:44 +0000 (18:09 +0200)
commit64f0b68d1428d857bfaa5fb5cfc7dec0a33421dc
tree0c9d64b837a649e9c4b35c7b27f7f0d7826e909c
parent94c4b1f7176d6187ed49d171720467408c4c83f3
In t/op/filetest.t, simplify the skip logic when testing -r and -w on op.

This code has got excessively hairy. Originally, t/op/filetest.t was added
to test that various file test operators worked as expected. (Commit
42e55ab11744b52a in Oct 1998.) It used the file t/TEST and the directory
t/op for targets. To test that read-only files were detected correctly, it
would chmod 0555 TEST to set it read only.

The test would fail if run as root, because root can write to anything. So
logic was added to set the effective user ID to 1 by assigning to $> in an
eval (unconditionally), and restoring $> afterwards. (Commit 846f25a3508eb6a4
in Nov 1988.) Curiously, the restoration was done after the test for
C<-r op>, rather than before it.

Most strangely, a skip was then added for the C<-w op> test based on
$Config{d_seteuid}. The test runs after $> has been restored, so should have
nothing to do with setuid. It was added as part of the VMS-related changes of
commit 3eeba6fb8b434fcb in May 1999. As d_seteuid is not defined in VMS, this
makes the test skip on VMS.

Commit 15fe5983b126b2ad in July 1999 added a skip for the read-only file
test if d_seteuid is undefined. Which is actually the only test where having
a working seteuid() *might* matter (but only if running as root, so that $>
can be used to drop root privileges).

Commit fd1e013efb606b51 in August 1999 moved the restoration of $> earlier,
ahead of the test for C<-r op>, as that test could fail if run as root with
the source tree unpacked with a restrictive umask. (Bug ID 19990727.039)
t/op/filetest.t