This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Uncomment and fix up tests at the end of Storable's blessed.t
[perl5.git] / dist / Storable / t / file_magic.t
CommitLineData
d4b9b6e4
GA
1#!perl -w
2
3use strict;
4use Test::More;
5use Storable qw(store nstore);
6use Config qw(%Config);
7
8# The @tests array below was create by the following program
9my $dummy = <<'EOT';
10use Storable;
11use Data::Dump qw(dump);
12
13print "my \@tests = (\n";
14for my $f (<data_*>) {
15 print " [\n";
16 print " " . dump(substr(`cat $f`, 0, 32) . "...") , ",\n";
17
18 my $x = dump(Storable::file_magic($f));
19 $x =~ s/^/ /gm;
20 print "$x,\n";
21
22 print " ],\n";
23}
24print ");\n";
25EOT
26
27my @tests = (
28 [
29 "perl-store\x041234\4\4\4\xD4\xC2\32\b\3\13\0\0\0v\b\xC5\32\b...",
30 {
31 byteorder => 1234,
32 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.1.le32",
33 hdrsize => 18,
34 intsize => 4,
35 longsize => 4,
36 netorder => 0,
37 ptrsize => 4,
38 version => -1,
39 version_nv => -1,
40 },
41 ],
42 [
43 "perl-store\0\x041234\4\4\4\x8Co\34\b\3\13\0\0\0v\x94v\34...",
44 {
45 byteorder => 1234,
46 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.4_07.le32",
47 hdrsize => 19,
48 intsize => 4,
49 longsize => 4,
50 major => 0,
51 netorder => 0,
52 ptrsize => 4,
53 version => 0,
54 version_nv => 0,
55 },
56 ],
57 [
58 "perl-store\1\x8Co\34\b\3\0\0\0\13v\x94v\34\b\1\0\0\4\0\0\0...",
59 {
60 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.4_07.neutral",
61 hdrsize => 11,
62 major => 0,
63 netorder => 1,
64 version => 0,
65 version_nv => 0,
66 },
67 ],
68 [
69 "pst0\2\x041234\4\4\4\3\13\0\0\0\1\0\4\0\0\0\0\0\0\0\0\0\0\0...",
70 {
71 byteorder => 1234,
72 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.604.le32",
73 hdrsize => 13,
74 intsize => 4,
75 longsize => 4,
76 major => 1,
77 netorder => 0,
78 ptrsize => 4,
79 version => 1,
80 version_nv => 1,
81 },
82 ],
83 [
84 "pst0\3\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
85 {
86 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.604.neutral",
87 hdrsize => 5,
88 major => 1,
89 netorder => 1,
90 version => 1,
91 version_nv => 1,
92 },
93 ],
94 [
95 "pst0\4\0\x041234\4\4\4\3\13\0\0\0\1\0\4\0\0\0\0\0\0\0\0\0\0...",
96 {
97 byteorder => 1234,
98 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.700.le32",
99 hdrsize => 14,
100 intsize => 4,
101 longsize => 4,
102 major => 2,
103 minor => 0,
104 netorder => 0,
105 ptrsize => 4,
106 version => "2.0",
107 version_nv => "2.000",
108 },
109 ],
110 [
111 "pst0\5\0\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
112 {
113 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-0.700.neutral",
114 hdrsize => 6,
115 major => 2,
116 minor => 0,
117 netorder => 1,
118 version => "2.0",
119 version_nv => "2.000",
120 },
121 ],
122 [
34cd037d 123 "pst0\4\4\x041234\4\4\4\x08\3\13\0\0\0\1\0\4\0\0\0\0\0\0\0\0\0...",
d4b9b6e4
GA
124 {
125 byteorder => 1234,
126 file => "data_perl-5.006001_i686-linux-thread-multi_Storable-1.012.le32",
127 hdrsize => 15,
128 intsize => 4,
129 longsize => 4,
130 major => 2,
131 minor => 4,
132 netorder => 0,
133 nvsize => 8,
134 ptrsize => 4,
135 version => "2.4",
136 version_nv => "2.004",
137 },
138 ],
139 [
34cd037d 140 "pst0\4\3\x044321\4\4\4\x08\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0...",
d4b9b6e4
GA
141 {
142 byteorder => 4321,
143 file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.006.be32",
144 hdrsize => 15,
145 intsize => 4,
146 longsize => 4,
147 major => 2,
148 minor => 3,
149 netorder => 0,
150 nvsize => 8,
151 ptrsize => 4,
152 version => "2.3",
153 version_nv => "2.003",
154 },
155 ],
156 [
157 "pst0\5\3\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
158 {
159 file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.006.neutral",
160 hdrsize => 6,
161 major => 2,
162 minor => 3,
163 netorder => 1,
164 version => "2.3",
165 version_nv => "2.003",
166 },
167 ],
168 [
34cd037d 169 "pst0\4\4\x044321\4\4\4\x08\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0...",
d4b9b6e4
GA
170 {
171 byteorder => 4321,
172 file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.012.be32",
173 hdrsize => 15,
174 intsize => 4,
175 longsize => 4,
176 major => 2,
177 minor => 4,
178 netorder => 0,
179 nvsize => 8,
180 ptrsize => 4,
181 version => "2.4",
182 version_nv => "2.004",
183 },
184 ],
185 [
186 "pst0\5\4\3\0\0\0\13\1\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0...",
187 {
188 file => "data_perl-5.006001_IA64.ARCHREV_0-thread-multi_Storable-1.012.neutral",
189 hdrsize => 6,
190 major => 2,
191 minor => 4,
192 netorder => 1,
193 version => "2.4",
194 version_nv => "2.004",
195 },
196 ],
197 [
34cd037d 198 "pst0\4\6\x044321\4\4\4\x08\3\0\0\0\13\n\n4294967296...",
d4b9b6e4
GA
199 {
200 byteorder => 4321,
201 file => "data_perl-5.008001_darwin-thread-multi-2level_Storable-2.08.be32",
202 hdrsize => 15,
203 intsize => 4,
204 longsize => 4,
205 major => 2,
206 minor => 6,
207 netorder => 0,
208 nvsize => 8,
209 ptrsize => 4,
210 version => "2.6",
211 version_nv => "2.006",
212 },
213 ],
214 [
215 "pst0\5\6\3\0\0\0\13\n\n4294967296\0\0\0\bfour_...",
216 {
217 file => "data_perl-5.008001_darwin-thread-multi-2level_Storable-2.08.neutral",
218 hdrsize => 6,
219 major => 2,
220 minor => 6,
221 netorder => 1,
222 version => "2.6",
223 version_nv => "2.006",
224 },
225 ],
226 [
34cd037d 227 "pst0\4\6\x044321\4\4\4\x08\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nem...",
d4b9b6e4
GA
228 {
229 byteorder => 4321,
230 file => "data_perl-5.008003_PA-RISC1.1-thread-multi_Storable-2.09.be32",
231 hdrsize => 15,
232 intsize => 4,
233 longsize => 4,
234 major => 2,
235 minor => 6,
236 netorder => 0,
237 nvsize => 8,
238 ptrsize => 4,
239 version => "2.6",
240 version_nv => "2.006",
241 },
242 ],
243 [
244 "pst0\5\6\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nempty_hash\n...",
245 {
246 file => "data_perl-5.008003_PA-RISC1.1-thread-multi_Storable-2.09.neutral",
247 hdrsize => 6,
248 major => 2,
249 minor => 6,
250 netorder => 1,
251 version => "2.6",
252 version_nv => "2.006",
253 },
254 ],
255 [
34cd037d 256 "pst0\4\6\x0812345678\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0...",
d4b9b6e4
GA
257 {
258 byteorder => 12_345_678,
259 file => "data_perl-5.008004_i86pc-solaris-64int_Storable-2.12.le64",
260 hdrsize => 19,
261 intsize => 4,
262 longsize => 4,
263 major => 2,
264 minor => 6,
265 netorder => 0,
266 nvsize => 8,
267 ptrsize => 4,
268 version => "2.6",
269 version_nv => "2.006",
270 },
271 ],
272 [
34cd037d 273 "pst0\4\6\x041234\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0\0\0em...",
d4b9b6e4
GA
274 {
275 byteorder => 1234,
276 file => "data_perl-5.008006_i686-linux-thread-multi_Storable-2.13.le32",
277 hdrsize => 15,
278 intsize => 4,
279 longsize => 4,
280 major => 2,
281 minor => 6,
282 netorder => 0,
283 nvsize => 8,
284 ptrsize => 4,
285 version => "2.6",
286 version_nv => "2.006",
287 },
288 ],
289 [
34cd037d 290 "pst0\4\6\x0887654321\4\x08\x08\x08\3\0\0\0\13\4\3\0\0\0\0\0\0...",
d4b9b6e4
GA
291 {
292 byteorder => 87_654_321,
293 file => "data_perl-5.008007_IA64.ARCHREV_0-thread-multi-LP64_Storable-2.13.be64",
294 hdrsize => 19,
295 intsize => 4,
296 longsize => 8,
297 major => 2,
298 minor => 6,
299 netorder => 0,
300 nvsize => 8,
301 ptrsize => 8,
302 version => "2.6",
303 version_nv => "2.006",
304 },
305 ],
306 [
34cd037d 307 "pst0\4\x07\x0812345678\4\x08\x08\x08\3\13\0\0\0\4\3\0\0\0\0\n\0...",
d4b9b6e4
GA
308 {
309 byteorder => 12_345_678,
310 file => "data_perl-5.008007_x86-solaris-thread-multi-64_Storable-2.15.le64",
311 hdrsize => 19,
312 intsize => 4,
313 longsize => 8,
314 major => 2,
315 minor => 7,
316 netorder => 0,
317 nvsize => 8,
318 ptrsize => 8,
319 version => "2.7",
320 version_nv => "2.007",
321 },
322 ],
323 [
34cd037d 324 "pst0\5\x07\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nempty_hash\n...",
d4b9b6e4
GA
325 {
326 file => "data_perl-5.008007_x86-solaris-thread-multi-64_Storable-2.15.neutral",
327 hdrsize => 6,
328 major => 2,
329 minor => 7,
330 netorder => 1,
331 version => "2.7",
332 version_nv => "2.007",
333 },
334 ],
335 [
34cd037d 336 "pst0\4\5\x041234\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0\0\0em...",
d4b9b6e4
GA
337 {
338 byteorder => 1234,
339 file => "data_perl-5.008_i686-linux-thread-multi_Storable-2.04.le32",
340 hdrsize => 15,
341 intsize => 4,
342 longsize => 4,
343 major => 2,
344 minor => 5,
345 netorder => 0,
346 nvsize => 8,
347 ptrsize => 4,
348 version => "2.5",
349 version_nv => "2.005",
350 },
351 ],
352 [
353 "pst0\5\5\3\0\0\0\13\4\3\0\0\0\0\0\0\0\nempty_hash\n...",
354 {
355 file => "data_perl-5.008_i686-linux-thread-multi_Storable-2.04.neutral",
356 hdrsize => 6,
357 major => 2,
358 minor => 5,
359 netorder => 1,
360 version => "2.5",
361 version_nv => "2.005",
362 },
363 ],
364 [
34cd037d 365 "pst0\4\x07\x041234\4\4\4\x08\3\13\0\0\0\4\3\0\0\0\0\n\0\0\0em...",
d4b9b6e4
GA
366 {
367 byteorder => 1234,
368 file => "data_perl-5.009003_i686-linux_Storable-2.15.le32",
369 hdrsize => 15,
370 intsize => 4,
371 longsize => 4,
372 major => 2,
373 minor => 7,
374 netorder => 0,
375 nvsize => 8,
376 ptrsize => 4,
377 version => "2.7",
378 version_nv => "2.007",
379 },
380 ],
381);
382
383plan tests => 31 + 2 * @tests;
384
385my $file = "xx-$$.pst";
386
387is(eval { Storable::file_magic($file) }, undef, "empty file give undef");
ab6f8ca1 388like($@, qq{/^Can't open '\Q$file\E':/}, "...and croaks");
d4b9b6e4
GA
389is(Storable::file_magic(__FILE__), undef, "not an image");
390
391store({}, $file);
392{
393 my $info = Storable::file_magic($file);
394 unlink($file);
395 ok($info, "got info");
396 is($info->{file}, $file, "file set");
397 is($info->{hdrsize}, 11 + length($Config{byteorder}), "hdrsize");
ab6f8ca1 398 like($info->{version}, q{/^2\.\d+$/}, "sane version");
d4b9b6e4
GA
399 is($info->{version_nv}, Storable::BIN_WRITE_VERSION_NV, "version_nv match");
400 is($info->{major}, 2, "sane major");
401 ok($info->{minor}, "have minor");
402 ok($info->{minor} >= Storable::BIN_WRITE_MINOR, "large enough minor");
403
404 ok(!$info->{netorder}, "no netorder");
ab6f8ca1
AT
405
406 my %attrs = (
407 nvsize => 5.006,
408 ptrsize => 5.005,
409 map {$_ => 5.004} qw(byteorder intsize longsize)
410 );
411 for my $attr (keys %attrs) {
412 SKIP: {
413 skip "attribute $attr not available on this version of Perl", 1 if $attrs{$attr} > $];
414 is($info->{$attr}, $Config{$attr}, "$attr match Config");
415 }
d4b9b6e4
GA
416 }
417}
418
419nstore({}, $file);
420{
421 my $info = Storable::file_magic($file);
422 unlink($file);
423 ok($info, "got info");
424 is($info->{file}, $file, "file set");
425 is($info->{hdrsize}, 6, "hdrsize");
ab6f8ca1 426 like($info->{version}, q{/^2\.\d+$/}, "sane version");
d4b9b6e4
GA
427 is($info->{version_nv}, Storable::BIN_WRITE_VERSION_NV, "version_nv match");
428 is($info->{major}, 2, "sane major");
429 ok($info->{minor}, "have minor");
430 ok($info->{minor} >= Storable::BIN_WRITE_MINOR, "large enough minor");
431
432 ok($info->{netorder}, "no netorder");
433 for (qw(byteorder intsize longsize ptrsize nvsize)) {
434 ok(!exists $info->{$_}, "no $_");
435 }
436}
437
438for my $test (@tests) {
439 my($data, $expected) = @$test;
440 open(FH, ">$file") || die "Can't create $file: $!";
441 binmode(FH);
442 print FH $data;
443 close(FH) || die "Can't write $file: $!";
444
445 my $name = $expected->{file};
446 $expected->{file} = $file;
447
448 my $info = Storable::file_magic($file);
449 unlink($file);
450
451 is_deeply($info, $expected, "file_magic $name");
452
453 $expected->{file} = 1;
454 is_deeply(Storable::read_magic($data), $expected, "read magic $name");
455}