8 use Mogstored::FIDStatter;
9 use File::Temp qw(tempdir);
11 my $td = tempdir(CLEANUP => 1);
12 ok($td, "got tempdir");
13 ok(-d $td, "tempdir is writable");
18 my $fs = Mogstored::FIDStatter->new(
22 t_stat => sub { $n_stats++ },
23 on_fid => sub { $on_fid->(@_); },
25 ok($fs, "made statter");
27 # empty directory, no stats
35 is($n_stats, 0, "no stats on empty directory");
36 is(scalar @list, 0, "no contents on empty directory");
39 # make a normal (packed) directory structure
41 for (my $n = 500; $n < 1500; $n += 2) {
42 make_file($n, ($n%50) + 1);
51 is($n_stats, 500, "500 stats");
52 is(scalar @list, 500, "500 fids found");
55 # make a sparse directory structure, with huge (64-bit numbers)
59 make_file("52048709162819278", 50);
60 make_file("52048709163819278", 50);
61 make_file("52048809163819278", 50);
62 make_file("52048819163819278", 50);
63 $fs = Mogstored::FIDStatter->new(
65 from => "52048709162819278",
66 to => "52048819163819278",
67 t_stat => sub { $n_stats++ },
73 is(scalar @list, 4, "found 4 files");
74 is($n_stats, 4, "and statted 4 files");
81 make_file("3001002456", 50);
82 make_file("3001002457", 50);
83 make_file("30010023383333458", 50);
84 make_file("3001002459", 50);
85 $fs = Mogstored::FIDStatter->new(
89 t_stat => sub { $n_stats++ },
95 is(scalar @list, 3, "found 3 files");
96 is($n_stats, 3, "and statted 3 files");
100 my ($fid, $len) = @_;
102 if (length($pad) < 10) {
103 $pad = "0"x(10-length($pad)) . $pad;
105 my ($b, $mmm, $ttt, $hto) = ($pad =~ m{(\d)(\d{3})(\d{3})(\d{3})});
107 unless (open($fh, ">$td/$b/$mmm/$ttt/$pad.fid")) {
111 mkdir "$td/$b/$mmm/$ttt";
113 open($fh, ">$td/$b/$mmm/$ttt/$pad.fid") or die
114 "Error writing file: $td/$b/$mmm/$ttt/$pad.fid: $!\n";
116 print $fh "x" x (($len % 50) + 1);