diff options
Diffstat (limited to 't/updatedir.t')
-rw-r--r-- | t/updatedir.t | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/t/updatedir.t b/t/updatedir.t new file mode 100644 index 0000000..6ee0311 --- /dev/null +++ b/t/updatedir.t @@ -0,0 +1,65 @@ +# -*- Mode: cperl; cperl-indent-level: 4 -*- + +# Before `make install' is performed this script should be runnable with +# `make test'. + +use File::Path qw(mkpath rmtree); +use File::Spec; +use Test::More; +my $HAVE_TIME_HIRES = 0; + +sub _f ($) {File::Spec->catfile(split /\//, shift);} +sub _d ($) {File::Spec->catdir(split /\//, shift);} + +my $plan = 21; +if (eval { require Time::HiRes; 1; }) { + $HAVE_TIME_HIRES = 1; +} +plan tests => $plan; + +use_ok("CPAN::Checksums"); +my $ret = CPAN::Checksums::updatedir("t"); +ok($ret >= 1, "ret[$ret]"); + +my $warn; +{ + chmod 0644, _f"t/43"; + local *F; + open F, ">", _f"t/43" or die; + print F "4321\n" x 1_000_000; + close F; + local $CPAN::Checksums::CAUTION; + $CPAN::Checksums::CAUTION=1; + $SIG{__WARN__} = sub { $warn = shift; }; + $ret = CPAN::Checksums::updatedir("t"); + is($ret,2,"changed once"); + + like($warn,qr/^differing old\/new/m,"warning emitted"); + + my $start = $HAVE_TIME_HIRES ? Time::HiRes::time() : time; + $ret = CPAN::Checksums::updatedir("t"); + my $tooktime = ($HAVE_TIME_HIRES ? Time::HiRes::time() : time) - $start; + is($ret,1,"no change tooktime[$tooktime]"); + + open F, ">", _f"t/43"; + print F "43\n"; + close F; + $warn=""; +} + +$ret = CPAN::Checksums::updatedir("t"); +is($ret,2,"changed again"); +is($warn,"","no warning"); +my @stat = stat _f"t/CHECKSUMS"; +sleep 2; +$ret = CPAN::Checksums::updatedir("t"); +is($ret,1,"no change"); +my @stat2 = stat _f"t/CHECKSUMS"; +for my $s (0..7,9..11) { # 8==atime not our business; 12==blocks may magically change + is($stat[$s],$stat2[$s],"unchanged stat element $s"); +} +mkpath _d"t/emptydir"; +$ret = CPAN::Checksums::updatedir(_d"t/emptydir"); +is($ret,2,"empty dir gives also 2"); +ok(-f _f"t/emptydir/CHECKSUMS", "found the checksums file"); +rmtree _d"t/emptydir"; |