Subject: | test failure 9999.04 about inode on Win32 and cygwin ports |
This is another bug report and patch proposal on test scripts
of File-Slurp-9999.04. This time for the following port:
$ perl -v
This is perl, v5.8.2 built for cygwin-thread-multi-64int
Using cpan to install File::Slurp, the following output is seen:
CPAN.pm: Going to build U/UR/URI/File-Slurp-9999.04.tar.gz
Checking if your kit is complete...
Looks good
Writing Makefile for File::Slurp
cp lib/File/Slurp.pm blib/lib/File/Slurp.pm
/usr/bin/make -- OK
Running make test
/usr/bin/perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/error.......ok
t/handle......ok
t/inode.......ok 2/3# Failed test (t/inode.t at line 45)
# Looks like you failed 1 tests of 3.
t/inode.......dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 3
Failed 1/3 tests, 66.67% okay
t/large.......ok
t/original....ok
t/readdir.....ok
t/stdin.......ok
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/inode.t 1 256 3 1 33.33% 3
Failed 1/7 test scripts, 85.71% okay. 1/164 subtests failed, 99.39% okay.
make: *** [test_dynamic] Error 255
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force
The failure happens on "t/inode.t", more exactly on the 3rd test,
as seen in
$ prove --blib --verbose t/inode.t
t/inode....1..3
ok 1 - use File::Slurp;
ok 2 - same inode
# Failed test (t/inode.t at line 45)
# Looks like you failed 1 tests of 3.
not ok 3 - different inode
dubious
Test returned status 1 (wstat 256, 0x100)
DIED. FAILED test 3
Failed 1/3 tests, 66.67% okay
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/inode.t 1 256 3 1 33.33% 3
Failed 1/1 test scripts, 0.00% okay. 1/3 subtests failed, 66.67% okay.
The script "t/inode.t" already skips the tests if a Win32 port
is running (because inodes are bogus in this port).
from perlport:
"[About C<stat> return:] device and inode are not meaningful. (Win32)"
cygwin runs under Windows too and despite the efforts to fake Unix
inodes, we can find the following note:
from Cygwin source files:
"Windows does not natively support inodes, and neither does MSDOS.
Cygwin's emulation can generate non-unique inodes, so don't use it."
The solution is pretty simple: skip tests also for cygwin. The attached
patch does this, while replacing the loose match on OS given
by "$^O =~ '32'" by "$^O =~ /^(MSWin32|cygwin)$/". Maybe this script
should also be skipped in VMS and MSDOS ports (also because inode don't
make sense as for Unix OSes), but I don't have
these platforms for telling it for sure.
--- inode.t 2004-02-28 20:40:02.000000000 -0300
+++ new.inode.t 2004-02-28 20:33:28.000000000 -0300
@@ -10,8 +10,9 @@
BEGIN{
- if( $^O =~ '32' ) {
- plan skip_all => 'skip inode test on windows';
+ if( $^O =~ /^(MSWin32|cygwin)$/ ) {
+ my %os = ( MSWin32 => 'windows', cygwin => 'cygwin' );
+ plan skip_all => "skip inode test on $os{$1}";
exit ;
}
else {
@@ -45,3 +46,4 @@
ok( $inode_num != $inode_num2, 'different inode' ) ;
unlink $file ;
+