1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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";
|