Upgrade to Digest::MD5 2.18. files.t doesn't
[p5sagit/p5-mst-13.2.git] / ext / Digest / MD5 / t / files.t
CommitLineData
5a046520 1print "1..5\n";
3357b1b1 2
3use strict;
4d5cc332 4use Digest::MD5 qw(md5 md5_hex md5_base64);
3357b1b1 5
6#
5a046520 7# This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
3357b1b1 8#
5a046520 9my $EXPECT = <<EOT;
1023cafa2de11474f0df8f808cc588bcc9 Changes
113519f3d02c7c91158f732f0f00064657 README
120268931475ae2a2e843ff58504cfa3f0 MD5.pm
131be293491bba726810f8e87671ee0328 MD5.xs
14754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
fed3f325 15EOT
5a046520 16
17if (!(-f "README") && -f "../README") {
18 chdir("..") or die "Can't chdir: $!";
fed3f325 19}
8c42d64c 20
5a046520 21my $testno = 0;
22
4d5cc332 23my $B64 = 1;
24eval { require MIME::Base64; };
25if ($@) {
26 print $@;
5a046520 27 print "Will not test base64 methods\n";
4d5cc332 28 $B64 = 0;
29}
30
3357b1b1 31for (split /^/, $EXPECT) {
32 my($md5hex, $file) = split ' ';
3357b1b1 33 my $md5bin = pack("H*", $md5hex);
4d5cc332 34 my $md5b64;
35 if ($B64) {
36 $md5b64 = MIME::Base64::encode($md5bin, "");
37 chop($md5b64); chop($md5b64); # remove padding
38 }
3357b1b1 39 my $failed;
40
41 if (digest_file($file, 'digest') ne $md5bin) {
42 print "$file: Bad digest\n";
43 $failed++;
44 }
45
46 if (digest_file($file, 'hexdigest') ne $md5hex) {
47 print "$file: Bad hexdigest\n";
48 $failed++;
49 }
50
4d5cc332 51 if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
52 print "$file: Bad b64digest\n";
53 $failed++;
54 }
55
3357b1b1 56 my $data = cat_file($file);
57 if (md5($data) ne $md5bin) {
58 print "$file: md5() failed\n";
59 $failed++;
60 }
61 if (md5_hex($data) ne $md5hex) {
62 print "$file: md5_hex() failed\n";
63 $failed++;
64 }
4d5cc332 65 if ($B64 && md5_base64($data) ne $md5b64) {
66 print "$file: md5_base64() failed\n";
67 $failed++;
68 }
3357b1b1 69
70 if (Digest::MD5->new->add($data)->digest ne $md5bin) {
71 print "$file: MD5->new->add(...)->digest failed\n";
72 $failed++;
73 }
74 if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
75 print "$file: MD5->new->add(...)->hexdigest failed\n";
76 $failed++;
77 }
4d5cc332 78 if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
79 print "$file: MD5->new->add(...)->b64digest failed\n";
80 $failed++;
81 }
3357b1b1 82
83 my @data = split //, $data;
84 if (md5(@data) ne $md5bin) {
85 print "$file: md5(\@data) failed\n";
86 $failed++;
87 }
88 if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
89 print "$file: MD5->new->add(\@data)->digest failed\n";
90 $failed++;
91 }
92 my $md5 = Digest::MD5->new;
93 for (@data) {
94 $md5->add($_);
95 }
96 if ($md5->digest ne $md5bin) {
97 print "$file: $md5->add()-loop failed\n";
98 $failed++;
99 }
100
101 print "not " if $failed;
102 print "ok ", ++$testno, "\n";
103}
104
105
106sub digest_file
107{
108 my($file, $method) = @_;
109 $method ||= "digest";
110 #print "$file $method\n";
111
112 open(FILE, $file) or die "Can't open $file: $!";
5a046520 113 binmode(FILE);
3357b1b1 114 my $digest = Digest::MD5->new->addfile(*FILE)->$method();
115 close(FILE);
116
117 $digest;
118}
119
120sub cat_file
121{
122 my($file) = @_;
123 local $/; # slurp
124 open(FILE, $file) or die "Can't open $file: $!";
5a046520 125 binmode(FILE);
3357b1b1 126 my $tmp = <FILE>;
127 close(FILE);
128 $tmp;
129}
130