Initial commit
[yaffs-website] / node_modules / tar / test / pack.js
1
2 // the symlink file is excluded from git, because it makes
3 // windows freak the hell out.
4 var fs = require("fs")
5   , path = require("path")
6   , symlink = path.resolve(__dirname, "fixtures/symlink")
7 try { fs.unlinkSync(symlink) } catch (e) {}
8 fs.symlinkSync("./hardlink-1", symlink)
9 process.on("exit", function () {
10   fs.unlinkSync(symlink)
11 })
12
13
14 var tap = require("tap")
15   , tar = require("../tar.js")
16   , pkg = require("../package.json")
17   , Pack = tar.Pack
18   , fstream = require("fstream")
19   , Reader = fstream.Reader
20   , Writer = fstream.Writer
21   , input = path.resolve(__dirname, "fixtures/")
22   , target = path.resolve(__dirname, "tmp/pack.tar")
23   , uid = process.getuid ? process.getuid() : 0
24   , gid = process.getgid ? process.getgid() : 0
25
26   , entries =
27
28     // the global header and root fixtures/ dir are going to get
29     // a different date each time, so omit that bit.
30     // Also, dev/ino values differ across machines, so that's not
31     // included.
32     [ [ 'globalExtendedHeader',
33       { path: 'PaxHeader/',
34         mode: 438,
35         uid: 0,
36         gid: 0,
37         type: 'g',
38         linkpath: '',
39         ustar: 'ustar\u0000',
40         ustarver: '00',
41         uname: '',
42         gname: '',
43         devmaj: 0,
44         devmin: 0,
45         fill: '' },
46       { "NODETAR.author": pkg.author,
47         "NODETAR.name": pkg.name,
48         "NODETAR.description": pkg.description,
49         "NODETAR.version": pkg.version,
50         "NODETAR.repository.type": pkg.repository.type,
51         "NODETAR.repository.url": pkg.repository.url,
52         "NODETAR.main": pkg.main,
53         "NODETAR.scripts.test": pkg.scripts.test } ]
54
55     , [ 'entry',
56       { path: 'fixtures/',
57         mode: 493,
58         uid: uid,
59         gid: gid,
60         size: 0,
61         type: '5',
62         linkpath: '',
63         ustar: 'ustar\u0000',
64         ustarver: '00',
65         uname: '',
66         gname: '',
67         devmaj: 0,
68         devmin: 0,
69         fill: '' } ]
70
71     , [ 'extendedHeader',
72       { path: 'PaxHeader/fixtures/200cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
73         mode: 420,
74         uid: uid,
75         gid: gid,
76         type: 'x',
77         linkpath: '',
78         ustar: 'ustar\u0000',
79         ustarver: '00',
80         uname: '',
81         gname: '',
82         devmaj: 0,
83         devmin: 0,
84         fill: '' },
85       { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
86         'NODETAR.depth': '1',
87         'NODETAR.type': 'File',
88         nlink: 1,
89         uid: uid,
90         gid: gid,
91         size: 200,
92         'NODETAR.blksize': '4096',
93         'NODETAR.blocks': '8' } ]
94
95     , [ 'entry',
96       { path: 'fixtures/200ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
97         mode: 420,
98         uid: uid,
99         gid: gid,
100         size: 200,
101         type: '0',
102         linkpath: '',
103         ustar: 'ustar\u0000',
104         ustarver: '00',
105         uname: '',
106         gname: '',
107         devmaj: 0,
108         devmin: 0,
109         fill: '',
110         'NODETAR.depth': '1',
111         'NODETAR.type': 'File',
112         nlink: 1,
113         'NODETAR.blksize': '4096',
114         'NODETAR.blocks': '8' } ]
115
116     , [ 'entry',
117       { path: 'fixtures/a.txt',
118         mode: 420,
119         uid: uid,
120         gid: gid,
121         size: 257,
122         type: '0',
123         linkpath: '',
124         ustar: 'ustar\u0000',
125         ustarver: '00',
126         uname: '',
127         gname: '',
128         devmaj: 0,
129         devmin: 0,
130         fill: '' } ]
131
132     , [ 'entry',
133       { path: 'fixtures/b.txt',
134         mode: 420,
135         uid: uid,
136         gid: gid,
137         size: 512,
138         type: '0',
139         linkpath: '',
140         ustar: 'ustar\u0000',
141         ustarver: '00',
142         uname: '',
143         gname: '',
144         devmaj: 0,
145         devmin: 0,
146         fill: '' } ]
147
148     , [ 'entry',
149       { path: 'fixtures/c.txt',
150         mode: 420,
151         uid: uid,
152         gid: gid,
153         size: 513,
154         type: '0',
155         linkpath: '',
156         ustar: 'ustar\u0000',
157         ustarver: '00',
158         uname: '',
159         gname: '',
160         devmaj: 0,
161         devmin: 0,
162         fill: '' } ]
163
164     , [ 'entry',
165       { path: 'fixtures/cc.txt',
166         mode: 420,
167         uid: uid,
168         gid: gid,
169         size: 513,
170         type: '0',
171         linkpath: '',
172         ustar: 'ustar\u0000',
173         ustarver: '00',
174         uname: '',
175         gname: '',
176         devmaj: 0,
177         devmin: 0,
178         fill: '' } ]
179
180     , [ 'entry',
181       { path: 'fixtures/dir/',
182         mode: 488,
183         uid: uid,
184         gid: gid,
185         size: 0,
186         type: '5',
187         linkpath: '',
188         ustar: 'ustar\u0000',
189         ustarver: '00',
190         uname: '',
191         gname: '',
192         devmaj: 0,
193         devmin: 0,
194         fill: '' } ]
195
196     , [ 'entry',
197       { path: 'fixtures/dir/sub/',
198         mode: 488,
199         uid: uid,
200         gid: gid,
201         size: 0,
202         type: '5',
203         linkpath: '',
204         ustar: 'ustar\u0000',
205         ustarver: '00',
206         uname: '',
207         gname: '',
208         devmaj: 0,
209         devmin: 0,
210         fill: '' } ]
211
212
213     , [ 'entry',
214       { path: 'fixtures/foo.js',
215         mode: 420,
216         uid: uid,
217         gid: gid,
218         size: 4,
219         type: '0',
220         linkpath: '',
221         ustar: 'ustar\u0000',
222         ustarver: '00',
223         uname: '',
224         gname: '',
225         devmaj: 0,
226         devmin: 0,
227         fill: '' } ]
228
229     , [ 'entry',
230       { path: 'fixtures/hardlink-1',
231         mode: 420,
232         uid: uid,
233         gid: gid,
234         size: 200,
235         type: '0',
236         linkpath: '',
237         ustar: 'ustar\u0000',
238         ustarver: '00',
239         uname: '',
240         gname: '',
241         devmaj: 0,
242         devmin: 0,
243         fill: '' } ]
244
245     , [ 'entry',
246       { path: 'fixtures/hardlink-2',
247         mode: 420,
248         uid: uid,
249         gid: gid,
250         size: 0,
251         type: '1',
252         linkpath: 'fixtures/hardlink-1',
253         ustar: 'ustar\u0000',
254         ustarver: '00',
255         uname: '',
256         gname: '',
257         devmaj: 0,
258         devmin: 0,
259         fill: '' } ]
260
261     , [ 'entry',
262       { path: 'fixtures/omega.txt',
263         mode: 420,
264         uid: uid,
265         gid: gid,
266         size: 2,
267         type: '0',
268         linkpath: '',
269         ustar: 'ustar\u0000',
270         ustarver: '00',
271         uname: '',
272         gname: '',
273         devmaj: 0,
274         devmin: 0,
275         fill: '' } ]
276
277     , [ 'entry',
278       { path: 'fixtures/packtest/',
279         mode: 493,
280         uid: uid,
281         gid: gid,
282         size: 0,
283         type: '5',
284         linkpath: '',
285         ustar: 'ustar\u0000',
286         ustarver: '00',
287         uname: '',
288         gname: '',
289         devmaj: 0,
290         devmin: 0,
291         fill: '' } ]
292
293     , [ 'entry',
294       { path: 'fixtures/packtest/omega.txt',
295         mode: 420,
296         uid: uid,
297         gid: gid,
298         size: 2,
299         type: '0',
300         linkpath: '',
301         ustar: 'ustar\u0000',
302         ustarver: '00',
303         uname: '',
304         gname: '',
305         devmaj: 0,
306         devmin: 0,
307         fill: '' } ]
308
309     , [ 'entry',
310       { path: 'fixtures/packtest/star.4.html',
311         mode: 420,
312         uid: uid,
313         gid: gid,
314         size: 54081,
315         type: '0',
316         linkpath: '',
317         ustar: 'ustar\u0000',
318         ustarver: '00',
319         uname: '',
320         gname: '',
321         devmaj: 0,
322         devmin: 0,
323         fill: '' } ]
324
325     , [ 'extendedHeader',
326       { path: 'PaxHeader/fixtures/packtest/Ω.txt',
327         mode: 420,
328         uid: uid,
329         gid: gid,
330         type: 'x',
331         linkpath: '',
332         ustar: 'ustar\u0000',
333         ustarver: '00',
334         uname: '',
335         gname: '',
336         devmaj: 0,
337         devmin: 0,
338         fill: '' },
339       { path: 'fixtures/packtest/Ω.txt',
340         'NODETAR.depth': '2',
341         'NODETAR.type': 'File',
342         nlink: 1,
343         uid: uid,
344         gid: gid,
345         size: 2,
346         'NODETAR.blksize': '4096',
347         'NODETAR.blocks': '8' } ]
348
349     , [ 'entry',
350       { path: 'fixtures/packtest/Ω.txt',
351         mode: 420,
352         uid: uid,
353         gid: gid,
354         size: 2,
355         type: '0',
356         linkpath: '',
357         ustar: 'ustar\u0000',
358         ustarver: '00',
359         uname: '',
360         gname: '',
361         devmaj: 0,
362         devmin: 0,
363         fill: '',
364         'NODETAR.depth': '2',
365         'NODETAR.type': 'File',
366         nlink: 1,
367         'NODETAR.blksize': '4096',
368         'NODETAR.blocks': '8' } ]
369
370     , [ 'entry',
371       { path: 'fixtures/r/',
372         mode: 493,
373         uid: uid,
374         gid: gid,
375         size: 0,
376         type: '5',
377         linkpath: '',
378         ustar: 'ustar\u0000',
379         ustarver: '00',
380         uname: '',
381         gname: '',
382         devmaj: 0,
383         devmin: 0,
384         fill: '' } ]
385
386     , [ 'entry',
387       { path: 'fixtures/r/e/',
388         mode: 493,
389         uid: uid,
390         gid: gid,
391         size: 0,
392         type: '5',
393         linkpath: '',
394         ustar: 'ustar\u0000',
395         ustarver: '00',
396         uname: '',
397         gname: '',
398         devmaj: 0,
399         devmin: 0,
400         fill: '' } ]
401
402     , [ 'entry',
403       { path: 'fixtures/r/e/a/',
404         mode: 493,
405         uid: uid,
406         gid: gid,
407         size: 0,
408         type: '5',
409         linkpath: '',
410         ustar: 'ustar\u0000',
411         ustarver: '00',
412         uname: '',
413         gname: '',
414         devmaj: 0,
415         devmin: 0,
416         fill: '' } ]
417
418     , [ 'entry',
419       { path: 'fixtures/r/e/a/l/',
420         mode: 493,
421         uid: uid,
422         gid: gid,
423         size: 0,
424         type: '5',
425         linkpath: '',
426         ustar: 'ustar\u0000',
427         ustarver: '00',
428         uname: '',
429         gname: '',
430         devmaj: 0,
431         devmin: 0,
432         fill: '' } ]
433
434     , [ 'entry',
435       { path: 'fixtures/r/e/a/l/l/',
436         mode: 493,
437         uid: uid,
438         gid: gid,
439         size: 0,
440         type: '5',
441         linkpath: '',
442         ustar: 'ustar\u0000',
443         ustarver: '00',
444         uname: '',
445         gname: '',
446         devmaj: 0,
447         devmin: 0,
448         fill: '' } ]
449
450     , [ 'entry',
451       { path: 'fixtures/r/e/a/l/l/y/',
452         mode: 493,
453         uid: uid,
454         gid: gid,
455         size: 0,
456         type: '5',
457         linkpath: '',
458         ustar: 'ustar\u0000',
459         ustarver: '00',
460         uname: '',
461         gname: '',
462         devmaj: 0,
463         devmin: 0,
464         fill: '' } ]
465
466     , [ 'entry',
467       { path: 'fixtures/r/e/a/l/l/y/-/',
468         mode: 493,
469         uid: uid,
470         gid: gid,
471         size: 0,
472         type: '5',
473         linkpath: '',
474         ustar: 'ustar\u0000',
475         ustarver: '00',
476         uname: '',
477         gname: '',
478         devmaj: 0,
479         devmin: 0,
480         fill: '' } ]
481
482     , [ 'entry',
483       { path: 'fixtures/r/e/a/l/l/y/-/d/',
484         mode: 493,
485         uid: uid,
486         gid: gid,
487         size: 0,
488         type: '5',
489         linkpath: '',
490         ustar: 'ustar\u0000',
491         ustarver: '00',
492         uname: '',
493         gname: '',
494         devmaj: 0,
495         devmin: 0,
496         fill: '' } ]
497
498     , [ 'entry',
499       { path: 'fixtures/r/e/a/l/l/y/-/d/e/',
500         mode: 493,
501         uid: uid,
502         gid: gid,
503         size: 0,
504         type: '5',
505         linkpath: '',
506         ustar: 'ustar\u0000',
507         ustarver: '00',
508         uname: '',
509         gname: '',
510         devmaj: 0,
511         devmin: 0,
512         fill: '' } ]
513
514     , [ 'entry',
515       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/',
516         mode: 493,
517         uid: uid,
518         gid: gid,
519         size: 0,
520         type: '5',
521         linkpath: '',
522         ustar: 'ustar\u0000',
523         ustarver: '00',
524         uname: '',
525         gname: '',
526         devmaj: 0,
527         devmin: 0,
528         fill: '' } ]
529
530     , [ 'entry',
531       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/',
532         mode: 493,
533         uid: uid,
534         gid: gid,
535         size: 0,
536         type: '5',
537         linkpath: '',
538         ustar: 'ustar\u0000',
539         ustarver: '00',
540         uname: '',
541         gname: '',
542         devmaj: 0,
543         devmin: 0,
544         fill: '' } ]
545
546     , [ 'entry',
547       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/',
548         mode: 493,
549         uid: uid,
550         gid: gid,
551         size: 0,
552         type: '5',
553         linkpath: '',
554         ustar: 'ustar\u0000',
555         ustarver: '00',
556         uname: '',
557         gname: '',
558         devmaj: 0,
559         devmin: 0,
560         fill: '' } ]
561
562     , [ 'entry',
563       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/',
564         mode: 493,
565         uid: uid,
566         gid: gid,
567         size: 0,
568         type: '5',
569         linkpath: '',
570         ustar: 'ustar\u0000',
571         ustarver: '00',
572         uname: '',
573         gname: '',
574         devmaj: 0,
575         devmin: 0,
576         fill: '' } ]
577
578     , [ 'entry',
579       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/',
580         mode: 493,
581         uid: uid,
582         gid: gid,
583         size: 0,
584         type: '5',
585         linkpath: '',
586         ustar: 'ustar\u0000',
587         ustarver: '00',
588         uname: '',
589         gname: '',
590         devmaj: 0,
591         devmin: 0,
592         fill: '' } ]
593
594     , [ 'entry',
595       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/',
596         mode: 493,
597         uid: uid,
598         gid: gid,
599         size: 0,
600         type: '5',
601         linkpath: '',
602         ustar: 'ustar\u0000',
603         ustarver: '00',
604         uname: '',
605         gname: '',
606         devmaj: 0,
607         devmin: 0,
608         fill: '' } ]
609
610     , [ 'entry',
611       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/',
612         mode: 493,
613         uid: uid,
614         gid: gid,
615         size: 0,
616         type: '5',
617         linkpath: '',
618         ustar: 'ustar\u0000',
619         ustarver: '00',
620         uname: '',
621         gname: '',
622         devmaj: 0,
623         devmin: 0,
624         fill: '' } ]
625
626     , [ 'entry',
627       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/',
628         mode: 493,
629         uid: uid,
630         gid: gid,
631         size: 0,
632         type: '5',
633         linkpath: '',
634         ustar: 'ustar\u0000',
635         ustarver: '00',
636         uname: '',
637         gname: '',
638         devmaj: 0,
639         devmin: 0,
640         fill: '' } ]
641
642     , [ 'entry',
643       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/',
644         mode: 493,
645         uid: uid,
646         gid: gid,
647         size: 0,
648         type: '5',
649         linkpath: '',
650         ustar: 'ustar\u0000',
651         ustarver: '00',
652         uname: '',
653         gname: '',
654         devmaj: 0,
655         devmin: 0,
656         fill: '' } ]
657
658     , [ 'entry',
659       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/',
660         mode: 493,
661         uid: uid,
662         gid: gid,
663         size: 0,
664         type: '5',
665         linkpath: '',
666         ustar: 'ustar\u0000',
667         ustarver: '00',
668         uname: '',
669         gname: '',
670         devmaj: 0,
671         devmin: 0,
672         fill: '' } ]
673
674     , [ 'entry',
675       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/',
676         mode: 493,
677         uid: uid,
678         gid: gid,
679         size: 0,
680         type: '5',
681         linkpath: '',
682         ustar: 'ustar\u0000',
683         ustarver: '00',
684         uname: '',
685         gname: '',
686         devmaj: 0,
687         devmin: 0,
688         fill: '' } ]
689
690     , [ 'entry',
691       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/',
692         mode: 493,
693         uid: uid,
694         gid: gid,
695         size: 0,
696         type: '5',
697         linkpath: '',
698         ustar: 'ustar\u0000',
699         ustarver: '00',
700         uname: '',
701         gname: '',
702         devmaj: 0,
703         devmin: 0,
704         fill: '' } ]
705
706     , [ 'entry',
707       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/',
708         mode: 493,
709         uid: uid,
710         gid: gid,
711         size: 0,
712         type: '5',
713         linkpath: '',
714         ustar: 'ustar\u0000',
715         ustarver: '00',
716         uname: '',
717         gname: '',
718         devmaj: 0,
719         devmin: 0,
720         fill: '' } ]
721
722     , [ 'entry',
723       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/',
724         mode: 493,
725         uid: uid,
726         gid: gid,
727         size: 0,
728         type: '5',
729         linkpath: '',
730         ustar: 'ustar\u0000',
731         ustarver: '00',
732         uname: '',
733         gname: '',
734         devmaj: 0,
735         devmin: 0,
736         fill: '' } ]
737
738     , [ 'entry',
739       { path: 'fixtures/r/e/a/l/l/y/-/d/e/e/p/-/f/o/l/d/e/r/-/p/a/t/h/cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
740         mode: 420,
741         uid: uid,
742         gid: gid,
743         size: 100,
744         type: '0',
745         linkpath: '',
746         ustar: 'ustar\u0000',
747         ustarver: '00',
748         uname: '',
749         gname: '',
750         devmaj: 0,
751         devmin: 0,
752         fill: '' } ]
753
754     , [ 'entry',
755       { path: 'fixtures/symlink',
756         uid: uid,
757         gid: gid,
758         size: 0,
759         type: '2',
760         linkpath: 'hardlink-1',
761         ustar: 'ustar\u0000',
762         ustarver: '00',
763         uname: '',
764         gname: '',
765         devmaj: 0,
766         devmin: 0,
767         fill: '' } ]
768
769     , [ 'extendedHeader',
770       { path: 'PaxHeader/fixtures/Ω.txt',
771         mode: 420,
772         uid: uid,
773         gid: gid,
774         type: 'x',
775         linkpath: '',
776         ustar: 'ustar\u0000',
777         ustarver: '00',
778         uname: '',
779         gname: '',
780         devmaj: 0,
781         devmin: 0,
782         fill: '' },
783       { path: "fixtures/Ω.txt"
784       , "NODETAR.depth": "1"
785       , "NODETAR.type": "File"
786       , nlink: 1
787       , uid: uid
788       , gid: gid
789       , size: 2
790       , "NODETAR.blksize": "4096"
791       , "NODETAR.blocks": "8" } ]
792
793     , [ 'entry',
794       { path: 'fixtures/Ω.txt',
795         mode: 420,
796         uid: uid,
797         gid: gid,
798         size: 2,
799         type: '0',
800         linkpath: '',
801         ustar: 'ustar\u0000',
802         ustarver: '00',
803         uname: '',
804         gname: '',
805         devmaj: 0,
806         devmin: 0,
807         fill: '',
808         'NODETAR.depth': '1',
809         'NODETAR.type': 'File',
810         nlink: 1,
811         'NODETAR.blksize': '4096',
812         'NODETAR.blocks': '8' } ]
813     ]
814
815
816 // first, make sure that the hardlinks are actually hardlinks, or this
817 // won't work.  Git has a way of replacing them with a copy.
818 var hard1 = path.resolve(__dirname, "fixtures/hardlink-1")
819   , hard2 = path.resolve(__dirname, "fixtures/hardlink-2")
820   , fs = require("fs")
821
822 try { fs.unlinkSync(hard2) } catch (e) {}
823 fs.linkSync(hard1, hard2)
824
825 tap.test("with global header", { timeout: 10000 }, function (t) {
826   runTest(t, true)
827 })
828
829 tap.test("without global header", { timeout: 10000 }, function (t) {
830   runTest(t, false)
831 })
832
833 tap.test("with from base", { timeout: 10000 }, function (t) {
834   runTest(t, true, true)
835 })
836
837 function alphasort (a, b) {
838   return a === b ? 0
839        : a.toLowerCase() > b.toLowerCase() ? 1
840        : a.toLowerCase() < b.toLowerCase() ? -1
841        : a > b ? 1
842        : -1
843 }
844
845
846 function runTest (t, doGH, doFromBase) {
847   var reader = Reader({ path: input
848                       , filter: function () {
849                           return !this.path.match(/\.(tar|hex)$/)
850                         }
851                       , sort: alphasort
852                       })
853
854   var props = doGH ? pkg : {}
855   if(doFromBase) props.fromBase = true;
856
857   var pack = Pack(props)
858   var writer = Writer(target)
859
860   // skip the global header if we're not doing that.
861   var entry = doGH ? 0 : 1
862
863   t.ok(reader, "reader ok")
864   t.ok(pack, "pack ok")
865   t.ok(writer, "writer ok")
866
867   pack.pipe(writer)
868
869   var parse = tar.Parse()
870   t.ok(parse, "parser should be ok")
871
872   pack.on("data", function (c) {
873     // console.error("PACK DATA")
874     if (c.length !== 512) {
875       // this one is too noisy, only assert if it'll be relevant
876       t.equal(c.length, 512, "parser should emit data in 512byte blocks")
877     }
878     parse.write(c)
879   })
880
881   pack.on("end", function () {
882     // console.error("PACK END")
883     t.pass("parser ends")
884     parse.end()
885   })
886
887   pack.on("error", function (er) {
888     t.fail("pack error", er)
889   })
890
891   parse.on("error", function (er) {
892     t.fail("parse error", er)
893   })
894
895   writer.on("error", function (er) {
896     t.fail("writer error", er)
897   })
898
899   reader.on("error", function (er) {
900     t.fail("reader error", er)
901   })
902
903   parse.on("*", function (ev, e) {
904     var wanted = entries[entry++]
905     if (!wanted) {
906       t.fail("unexpected event: "+ev)
907       return
908     }
909     t.equal(ev, wanted[0], "event type should be "+wanted[0])
910
911     if(doFromBase) {
912       if(wanted[1].path.indexOf('fixtures/') && wanted[1].path.length == 100)
913         wanted[1].path = wanted[1].path.replace('fixtures/', '') + 'ccccccccc'
914
915       if(wanted[1]) wanted[1].path = wanted[1].path.replace('fixtures/', '').replace('//', '/')
916       if(wanted[1].path == '') wanted[1].path = '/'
917       if(wanted[2] && wanted[2].path) wanted[2].path = wanted[2].path.replace('fixtures', '').replace(/^\//, '')
918
919       wanted[1].linkpath = wanted[1].linkpath.replace('fixtures/', '')
920     }
921
922     if (ev !== wanted[0] || e.path !== wanted[1].path) {
923       console.error("wanted", wanted)
924       console.error([ev, e.props])
925       e.on("end", function () {
926         console.error(e.fields)
927         throw "break"
928       })
929     }
930
931
932     t.has(e.props, wanted[1], "properties "+wanted[1].path)
933     if (wanted[2]) {
934       e.on("end", function () {
935         if (!e.fields) {
936           t.ok(e.fields, "should get fields")
937         } else {
938           t.has(e.fields, wanted[2], "should get expected fields")
939         }
940       })
941     }
942   })
943
944   reader.pipe(pack)
945
946   writer.on("close", function () {
947     t.equal(entry, entries.length, "should get all expected entries")
948     t.pass("it finished")
949     t.end()
950   })
951
952 }