Somebody might be compiling a newer Digest::MD5.
[p5sagit/p5-mst-13.2.git] / ext / Digest / MD5 / t / files.t
CommitLineData
3357b1b1 1BEGIN {
2 chdir 't' if -d 't';
3 @INC = '../lib';
4}
5
6print "1..2\n";
7
8use strict;
4d5cc332 9use Digest::MD5 qw(md5 md5_hex md5_base64);
3357b1b1 10
11#
12# This is the output of: 'md5sum MD5.pm MD5.xs'
13#
fed3f325 14my $EXPECT;
15
8c42d64c 16if (ord('A') == 193) { # EBCDIC
fed3f325 17$EXPECT = <<EOT;
f8fe71dd 18ee6a09094632cd610199278bbb0f910e ext/Digest/MD5/MD5.pm
639c2fab 1994f873d905cd20a12d8ef4cdbdbcd89f ext/Digest/MD5/MD5.xs
3357b1b1 20EOT
fed3f325 21} else { # ASCII
22$EXPECT = <<EOT;
d1be9408 23665ddc08b12d6b1bf85ac6dc5aae68b3 ext/Digest/MD5/MD5.pm
3f5b33d6 245f21e907b2e7dbffe6aba2c762ea93d0 ext/Digest/MD5/MD5.xs
fed3f325 25EOT
26}
8c42d64c 27
4d5cc332 28my $B64 = 1;
29eval { require MIME::Base64; };
30if ($@) {
31 print $@;
32 print "# Will not test base64 methods\n";
33 $B64 = 0;
34}
35
3357b1b1 36my $testno = 0;
37
38use File::Spec;
39
40for (split /^/, $EXPECT) {
41 my($md5hex, $file) = split ' ';
42 my @path = split(m:/:, $file);
43 my $last = pop @path;
44 my $path = File::Spec->updir;
45 while (@path) {
46 $path = File::Spec->catdir($path, shift @path);
47 }
48 $file = File::Spec->catfile($path, $last);
49 my $md5bin = pack("H*", $md5hex);
4d5cc332 50 my $md5b64;
51 if ($B64) {
52 $md5b64 = MIME::Base64::encode($md5bin, "");
53 chop($md5b64); chop($md5b64); # remove padding
54 }
3357b1b1 55 my $failed;
56
57 if (digest_file($file, 'digest') ne $md5bin) {
58 print "$file: Bad digest\n";
59 $failed++;
60 }
61
62 if (digest_file($file, 'hexdigest') ne $md5hex) {
63 print "$file: Bad hexdigest\n";
64 $failed++;
65 }
66
4d5cc332 67 if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
68 print "$file: Bad b64digest\n";
69 $failed++;
70 }
71
3357b1b1 72 my $data = cat_file($file);
73 if (md5($data) ne $md5bin) {
74 print "$file: md5() failed\n";
75 $failed++;
76 }
77 if (md5_hex($data) ne $md5hex) {
78 print "$file: md5_hex() failed\n";
79 $failed++;
80 }
4d5cc332 81 if ($B64 && md5_base64($data) ne $md5b64) {
82 print "$file: md5_base64() failed\n";
83 $failed++;
84 }
3357b1b1 85
86 if (Digest::MD5->new->add($data)->digest ne $md5bin) {
87 print "$file: MD5->new->add(...)->digest failed\n";
88 $failed++;
89 }
90 if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
91 print "$file: MD5->new->add(...)->hexdigest failed\n";
92 $failed++;
93 }
4d5cc332 94 if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
95 print "$file: MD5->new->add(...)->b64digest failed\n";
96 $failed++;
97 }
3357b1b1 98
99 my @data = split //, $data;
100 if (md5(@data) ne $md5bin) {
101 print "$file: md5(\@data) failed\n";
102 $failed++;
103 }
104 if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
105 print "$file: MD5->new->add(\@data)->digest failed\n";
106 $failed++;
107 }
108 my $md5 = Digest::MD5->new;
109 for (@data) {
110 $md5->add($_);
111 }
112 if ($md5->digest ne $md5bin) {
113 print "$file: $md5->add()-loop failed\n";
114 $failed++;
115 }
116
117 print "not " if $failed;
118 print "ok ", ++$testno, "\n";
119}
120
121
122sub digest_file
123{
124 my($file, $method) = @_;
125 $method ||= "digest";
126 #print "$file $method\n";
127
128 open(FILE, $file) or die "Can't open $file: $!";
db2a39d5 129# Digests above are generated on UNIX without CRLF
9070af9f 130# so leave handles in text mode
131# binmode(FILE);
3357b1b1 132 my $digest = Digest::MD5->new->addfile(*FILE)->$method();
133 close(FILE);
134
135 $digest;
136}
137
138sub cat_file
139{
140 my($file) = @_;
141 local $/; # slurp
142 open(FILE, $file) or die "Can't open $file: $!";
db2a39d5 143# Digests above are generated on UNIX without CRLF
9070af9f 144# so leave handles in text mode
145# binmode(FILE);
3357b1b1 146 my $tmp = <FILE>;
147 close(FILE);
148 $tmp;
149}
150