Commit | Line | Data |
16816334 |
1 | BEGIN { |
d695c1a1 |
2 | if ($ENV{PERL_CORE}) { |
16816334 |
3 | chdir 't' if -d 't'; |
1a6a8453 |
4 | @INC = ("../lib", "lib/compress"); |
16816334 |
5 | } |
6 | } |
642e522c |
7 | |
8 | use lib 't'; |
9 | use strict ; |
10 | use warnings; |
11 | use bytes; |
12 | |
13 | use Test::More ; |
14 | use ZlibTestUtils; |
15 | |
16 | BEGIN |
17 | { |
18 | plan skip_all => "Lengthy Tests Disabled\n" . |
19 | "set COMPRESS_ZLIB_RUN_ALL to run this test suite" |
20 | unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} ; |
21 | |
22 | # use Test::NoWarnings, if available |
23 | my $extra = 0 ; |
24 | $extra = 1 |
25 | if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 }; |
26 | |
27 | plan tests => 76 + $extra ; |
28 | |
29 | |
30 | use_ok('Compress::Zlib', 2) ; |
31 | use_ok('IO::Compress::Gzip', qw($GzipError)) ; |
32 | use_ok('IO::Uncompress::Gunzip', qw($GunzipError)) ; |
33 | use_ok('Compress::Gzip::Constants'); |
34 | } |
35 | |
36 | my $compressed ; |
37 | my $expected_crc ; |
38 | |
39 | for my $wrap (0 .. 2) |
40 | { |
41 | for my $offset ( -1 .. 1 ) |
42 | { |
43 | next if $wrap == 0 && $offset < 0 ; |
44 | |
45 | title "Wrap $wrap, Offset $offset" ; |
46 | |
47 | my $size = (GZIP_ISIZE_MAX * $wrap) + $offset ; |
48 | |
49 | my $expected_isize ; |
50 | if ($wrap == 0) { |
51 | $expected_isize = $offset ; |
52 | } |
53 | elsif ($wrap == 1 && $offset <= 0) { |
54 | $expected_isize = GZIP_ISIZE_MAX + $offset ; |
55 | } |
56 | elsif ($wrap > 1) { |
57 | $expected_isize = GZIP_ISIZE_MAX + $offset - 1; |
58 | } |
59 | else { |
60 | $expected_isize = $offset - 1; |
61 | } |
62 | |
63 | sub gzipClosure |
64 | { |
65 | my $gzip = shift ; |
66 | my $max = shift ; |
67 | |
68 | my $index = 0 ; |
69 | my $inc = 1024 * 5000 ; |
70 | my $buff = 'x' x $inc ; |
71 | my $left = $max ; |
72 | |
73 | return |
74 | sub { |
75 | |
76 | if ($max == 0 && $index == 0) { |
77 | $expected_crc = crc32('') ; |
78 | ok $gzip->close(), ' IO::Compress::Gzip::close ok X' ; |
79 | ++ $index ; |
80 | $_[0] .= $compressed; |
81 | return length $compressed ; |
82 | } |
83 | |
84 | return 0 if $index >= $max ; |
85 | |
86 | while ( ! length $compressed ) |
87 | { |
88 | $index += $inc ; |
89 | |
90 | if ($index <= $max) { |
91 | $gzip->write($buff) ; |
92 | #print "Write " . length($buff) . "\n" ; |
93 | #print "# LEN Compressed " . length($compressed) . "\n" ; |
94 | $expected_crc = crc32($buff, $expected_crc) ; |
95 | $left -= $inc ; |
96 | } |
97 | else { |
98 | #print "Write $left\n" ; |
99 | $gzip->write('x' x $left) ; |
100 | #print "# LEN Compressed " . length($compressed) . "\n" ; |
101 | $expected_crc = crc32('x' x $left, $expected_crc) ; |
102 | ok $gzip->close(), ' IO::Compress::Gzip::close ok ' ; |
103 | last ; |
104 | } |
105 | } |
106 | |
107 | my $len = length $compressed ; |
108 | $_[0] .= $compressed ; |
109 | $compressed = ''; |
110 | #print "# LEN $len\n" if $len <=0 ; |
111 | |
112 | return $len ; |
113 | }; |
114 | } |
115 | |
116 | my $gzip = new IO::Compress::Gzip \$compressed, |
117 | -Append => 0, |
118 | -HeaderCRC => 1; |
119 | |
120 | ok $gzip, " Created IO::Compress::Gzip object"; |
121 | |
122 | my $gunzip = new IO::Uncompress::Gunzip gzipClosure($gzip, $size), |
123 | -BlockSize => 1024 * 500 , |
124 | -Append => 0, |
125 | -Strict => 1; |
126 | |
127 | ok $gunzip, " Created IO::Uncompress::Gunzip object"; |
128 | |
129 | my $inflate = *$gunzip->{Inflate} ; |
130 | my $deflate = *$gzip->{Deflate} ; |
131 | |
132 | my $status ; |
133 | my $uncompressed; |
134 | my $actual = 0 ; |
135 | while (($status = $gunzip->read($uncompressed)) > 0) { |
136 | #print "# READ $status\n" ; |
137 | $actual += $status ; |
138 | } |
139 | |
140 | is $status, 0, ' IO::Uncompress::Gunzip::read returned 0' |
141 | or diag "error status is $status, error is $GunzipError" ; |
142 | |
143 | ok $gunzip->close(), " IO::Uncompress::Gunzip Closed ok" ; |
144 | |
145 | is $actual, $size, " Length of Gunzipped data is $size" |
146 | or diag "Expected $size, got $actual"; |
147 | |
148 | my $gunzip_hdr = $gunzip->getHeaderInfo(); |
149 | |
150 | is $gunzip_hdr->{ISIZE}, $expected_isize, |
151 | sprintf(" ISIZE is $expected_isize [0x%X]", $expected_isize); |
152 | is $gunzip_hdr->{CRC32}, $expected_crc, |
153 | sprintf(" CRC32 is $expected_crc [0x%X]", $expected_crc); |
154 | |
155 | $expected_crc = 0 ; |
156 | } |
157 | } |
158 | |