tests/tests.yml

1
- name: basic .tar
2
  filenames: test-1.23.tar
3
  baseline: |
4
    tar -xf $1
5
 
6
- name: basic .tar.gz
7
  filenames: test-1.23.tar.gz
8
  baseline: |
9
    tar -zxf $1
10
 
11
- name: basic .tar.bz2
12
  filenames: test-1.23.tar.bz2
13
  baseline: |
14
    mkdir test-1.23
15
    cd test-1.23
16
    tar -jxf ../$1
17
 
18
- name: basic .zip
19
  filenames: test-1.23.zip
20
  baseline: |
21
    mkdir test-1.23
22
    cd test-1.23
23
    unzip -q ../$1
24
 
25
- name: basic .deb
26
  filenames: test-1.23_all.deb
27
  baseline: |
28
    mkdir test-1.23
29
    cd test-1.23
30
    ar p ../$1 data.tar.gz | tar -zx
31
 
32
- name: .deb with LZMA compression
33
  filenames: test-2_all.deb
34
  baseline: |
35
    mkdir test-2
36
    cd test-2
37
    ar p ../$1 data.tar.lzma | lzcat | tar -x
38
 
39
- name: basic .gem
40
  filenames: test-1.23.gem
41
  baseline: |
42
    mkdir test-1.23
43
    cd test-1.23
44
    tar -xOf ../$1 data.tar.gz | tar -zx
45
 
46
- name: basic .7z
47
  filenames: test-1.23.7z
48
  baseline: |
49
    7z x $1
50
 
51
- name: basic .lzma
52
  filenames: test-1.23.tar.lzma
53
  baseline: |
54
    lzcat $1 | tar -x
55
 
56
- name: basic .cpio
57
  filenames: test-1.23.cpio
58
  baseline: |
59
    cpio -i --make-directories <$1
60
  antigrep: blocks?
61
 
62
- name: .deb metadata
63
  filenames: test-1.23_all.deb
64
  options: --metadata
65
  baseline: |
66
    mkdir test-1.23
67
    cd test-1.23
68
    ar p ../$1 control.tar.gz | tar -zx
69
    
70
- name: .gem metadata
71
  filenames: test-1.23.gem
72
  options: -m
73
  baseline: |
74
    tar -xOf $1 metadata.gz | zcat > test-1.23.gem-metadata.txt
75
  cleanup: rm -f test-1.23.gem-metadata.txt
76
  posttest: |
77
    if [ "x`cat test-1.23.gem-metadata.txt`" != "xhi" ]; then exit 1; fi
78
 
79
- name: recursion and permissions
80
  filenames: test-recursive-badperms.tar.bz2
81
  options: -n -r
82
  baseline: |
83
    mkdir test-recursive-badperms
84
    cd test-recursive-badperms
85
    tar -jxf ../$1
86
    mkdir test-badperms
87
    cd test-badperms
88
    tar -xf ../test-badperms.tar
89
    chmod 700 testdir
90
  posttest: |
91
    if [ "x`cat test-recursive-badperms/test-badperms/testdir/testfile`" != \
92
         "xhey" ]; then exit 1; fi
93
 
94
- name: decompressing gz
95
  directory: inside-dir
96
  filenames: ../test-text.gz
97
  baseline: |
98
    zcat $1 >test-text
99
  posttest: |
100
    if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi
101
 
102
- name: decompressing bz2
103
  directory: inside-dir
104
  filenames: ../test-text.bz2
105
  baseline: |
106
    bzcat $1 >test-text
107
  posttest: |
108
    if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi
109
 
110
- name: decompressing xz
111
  directory: inside-dir
112
  filenames: ../test-text.xz
113
  baseline: |
114
    xzcat $1 >test-text
115
  posttest: |
116
    if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi
117
 
118
- name: decompression with -r
119
  directory: inside-dir
120
  filenames: ../test-text.gz
121
  options: -n -r
122
  baseline: |
123
    zcat $1 >test-text
124
 
125
- name: decompression with -fr
126
  directory: inside-dir
127
  filenames: ../test-text.gz
128
  options: -n -fr
129
  baseline: |
130
    zcat $1 >test-text
131
 
132
- name: overwrite protection
133
  filenames: test-1.23.tar.bz2
134
  baseline: |
135
    mkdir test-1.23.1
136
    cd test-1.23.1
137
    tar -jxf ../$1
138
  prerun: |
139
    mkdir test-1.23
140
 
141
- name: overwrite option
142
  filenames: test-1.23.tar.bz2
143
  options: -n -o
144
  baseline: |
145
    cd test-1.23
146
    tar -jxf ../$1
147
  prerun: |
148
    mkdir test-1.23 
149
 
150
- name: flat option
151
  directory: inside-dir
152
  filenames: ../test-1.23.tar.bz2
153
  options: -n -f
154
  baseline: |
155
    tar -jxf $1
156
 
157
- name: flat recursion and permissions
158
  directory: inside-dir
159
  filenames: ../test-recursive-badperms.tar.bz2
160
  options: -n -fr
161
  baseline: |
162
    tar -jxf $1
163
    tar -xf test-badperms.tar
164
    chmod 700 testdir
165
  posttest: |
166
    if [ "x`cat testdir/testfile`" != "xhey" ]; then exit 1; fi
167
 
168
- name: no files
169
  error: true
170
  grep: "[Uu]sage"
171
 
172
- name: bad file
173
  error: true
174
  filenames: nonexistent-file.tar
175
 
176
- name: not an archive
177
  error: true
178
  filenames: tests.yml
179
 
180
- name: bad options
181
  options: -n --nonexistent-option
182
  filenames: test-1.23.tar
183
  error: true
184
 
185
- name: --version
186
  options: -n --version
187
  grep: ersion \d+\.\d+
188
  filenames: test-1.23.tar
189
  baseline: |
190
    exit 0
191
 
192
- name: one good archive of many
193
  filenames: tests.yml test-1.23.tar nonexistent-file.tar
194
  error: true
195
  baseline: |
196
    tar -xf $2
197
 
198
- name: silence
199
  filenames: tests.yml
200
  options: -n -qq
201
  error: true
202
  antigrep: '.'
203
 
204
- name: can't write to directory
205
  directory: inside-dir
206
  filenames: ../test-1.23.tar
207
  error: true
208
  grep: ERROR
209
  antigrep: Traceback
210
  prerun: |
211
    chmod 500 .
212
 
213
- name: list contents of one file
214
  options: -n -l
215
  filenames: test-1.23.tar
216
  output: |
217
    test-1.23/
218
    test-1.23/1/
219
    test-1.23/1/2/
220
    test-1.23/1/2/3
221
    test-1.23/a/
222
    test-1.23/a/b
223
    test-1.23/foobar
224
 
225
- name: list contents of .cpio
226
  options: -n -l
227
  filenames: test-1.23.cpio
228
  grep: ^test-1\.23/1/2/3$
229
  antigrep: blocks?
230
 
231
- name: list contents of multiple files
232
  options: -n --table
233
  filenames: test-1.23_all.deb test-1.23.zip
234
  output: |
235
    test-1.23_all.deb:
236
    1/
237
    1/2/
238
    1/2/3
239
    a/
240
    a/b
241
    foobar
242
    
243
    test-1.23.zip:
244
    1/2/3
245
    a/b
246
    foobar
247
 
248
- name: list contents of compressed file
249
  options: -n -t
250
  filenames: test-text.gz
251
  output: test-text
252
 
253
- name: default behavior with one directory (gz)
254
  options: -n
255
  filenames: test-onedir.tar.gz
256
  baseline: |
257
    mkdir test-onedir
258
    cd test-onedir
259
    tar -zxf ../$1
260
 
261
- name: one directory extracted inside another interactively (gz)
262
  options: ""
263
  filenames: test-onedir.tar.gz
264
  grep: one directory
265
  input: i
266
  baseline: |
267
    mkdir test-onedir
268
    cd test-onedir
269
    tar -zxf ../$1
270
 
271
- name: one directory extracted with rename interactively (gz)
272
  options: ""
273
  filenames: test-onedir.tar.gz
274
  input: r
275
  baseline: |
276
    tar -zxf $1
277
    mv test test-onedir
278
 
279
- name: one directory extracted here interactively (gz)
280
  options: ""
281
  filenames: test-onedir.tar.gz
282
  input: h
283
  baseline: |
284
    tar -zxf $1
285
 
286
- name: --one=inside
287
  options: "--one=inside -n"
288
  filenames: test-onedir.tar.gz
289
  baseline: |
290
    mkdir test-onedir
291
    cd test-onedir
292
    tar -zxf ../$1
293
 
294
- name: --one=rename
295
  options: "--one-entry=rename -n"
296
  filenames: test-onedir.tar.gz
297
  baseline: |
298
    tar -zxf $1
299
    mv test test-onedir
300
 
301
- name: --one=here
302
  options: "--one=here -n"
303
  filenames: test-onedir.tar.gz
304
  baseline: |
305
    tar -zxf $1
306
 
307
- name: default behavior with one directory (bz2)
308
  options: -n
309
  filenames: test-onedir.tar.gz
310
  baseline: |
311
    mkdir test-onedir
312
    cd test-onedir
313
    tar -zxf ../$1
314
 
315
- name: one directory extracted inside another (bz2)
316
  options: ""
317
  filenames: test-onedir.tar.gz
318
  input: i
319
  baseline: |
320
    mkdir test-onedir
321
    cd test-onedir
322
    tar -zxf ../$1
323
 
324
- name: one directory extracted with rename (bz2)
325
  options: ""
326
  filenames: test-onedir.tar.gz
327
  input: r
328
  baseline: |
329
    tar -zxf $1
330
    mv test test-onedir
331
 
332
- name: one directory extracted here (bz2)
333
  options: ""
334
  filenames: test-onedir.tar.gz
335
  input: h
336
  baseline: |
337
    tar -zxf $1
338
 
339
- name: default behavior with one file
340
  options: -n
341
  filenames: test-onefile.tar.gz
342
  baseline: |
343
    mkdir test-onefile
344
    cd test-onefile
345
    tar -zxf ../$1
346
 
347
- name: one file extracted inside a directory
348
  options: ""
349
  filenames: test-onefile.tar.gz
350
  input: i
351
  grep: one file
352
  baseline: |
353
    mkdir test-onefile
354
    cd test-onefile
355
    tar -zxf ../$1
356
 
357
- name: prompt wording with one file
358
  options: ""
359
  filenames: test-onefile.tar.gz
360
  input: i
361
  grep: file _I_nside
362
 
363
- name: one file extracted with rename, with Expected text
364
  options: ""
365
  filenames: test-onefile.tar.gz
366
  input: r
367
  grep: "Expected: test-onefile"
368
  baseline: |
369
    tar -zxOf $1 >test-onefile
370
 
371
- name: one file extracted here, with Actual text
372
  options: ""
373
  filenames: test-onefile.tar.gz
374
  input: h
375
  grep: "  Actual: test-text"
376
  baseline: |
377
    tar -zxf $1
378
 
379
- name: bomb with preceding dot in the table
380
  filenames: test-dot-first-bomb.tar.gz
381
  options: ""
382
  antigrep: one
383
  baseline: |
384
    mkdir test-dot-first-bomb
385
    cd test-dot-first-bomb
386
    tar -zxf ../$1
387
 
388
- name: one directory preceded by dot in the table
389
  filenames: test-dot-first-onedir.tar.gz
390
  options: ""
391
  grep: "Actual: (./)?dir/"
392
  input: h
393
  baseline: |
394
    tar -zxf $1
395
 
396
- name: two one-item archives with different answers
397
  filenames: test-onedir.tar.gz test-onedir.tar.gz
398
  options: ""
399
  input: |
400
    h
401
    r
402
  baseline: |
403
    tar -zxf $1
404
    mv test test-onedir
405
    tar -zxf $1
406
 
407
- name: interactive recursion (always)
408
  filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2
409
  options: ""
410
  input: |
411
    i
412
    a
413
    i
414
  baseline: |
415
    extract() {
416
      mkdir test-recursive-badperms$2
417
      cd test-recursive-badperms$2
418
      tar -jxf ../$1
419
      mkdir test-badperms
420
      cd test-badperms
421
      tar -xf ../test-badperms.tar
422
      chmod 700 testdir
423
      cd ../..
424
    }
425
    extract $1
426
    extract $1 .1
427
 
428
- name: interactive recursion (once)
429
  filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2
430
  options: ""
431
  input: |
432
    i
433
    o
434
    i
435
    n
436
  baseline: |
437
    mkdir test-recursive-badperms
438
    cd test-recursive-badperms
439
    tar -jxf ../$1
440
    mkdir test-badperms
441
    cd test-badperms
442
    tar -xf ../test-badperms.tar
443
    chmod 700 testdir
444
    cd ../..
445
    mkdir test-recursive-badperms.1
446
    cd test-recursive-badperms.1
447
    tar -jxf ../$1
448
 
449
- name: interactive recursion (never)
450
  filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2
451
  options: ""
452
  input: |
453
    i
454
    v
455
    i
456
  baseline: |
457
    extract() {
458
      mkdir test-recursive-badperms$2
459
      cd test-recursive-badperms$2
460
      tar -jxf ../$1
461
      cd ..
462
    }
463
    extract $1
464
    extract $1 .1
465
 
466
- name: recursion in subdirectories here
467
  filenames: test-deep-recursion.tar
468
  options: ""
469
  input: |
470
    h
471
    o
472
  grep: 'contains 2 other archive file\(s\), out of 2 file\(s\)'
473
  baseline: |
474
    tar -xf $1
475
    cd subdir
476
    zcat test-text.gz > test-text
477
    cd subsubdir
478
    zcat test-text.gz > test-text
479
 
480
- name: recursion in subdirectories with rename
481
  filenames: test-deep-recursion.tar
482
  options: ""
483
  input: |
484
    r
485
    o
486
  grep: "contains 2"
487
  baseline: |
488
    tar -xf $1
489
    mv subdir test-deep-recursion
490
    cd test-deep-recursion
491
    zcat test-text.gz > test-text
492
    cd subsubdir
493
    zcat test-text.gz > test-text
494
 
495
- name: recursion in subdirectories inside new dir
496
  filenames: test-deep-recursion.tar
497
  options: ""
498
  input: |
499
    i
500
    o
501
  grep: "contains 2"
502
  baseline: |
503
    mkdir test-deep-recursion
504
    cd test-deep-recursion
505
    tar -xf ../$1
506
    cd subdir
507
    zcat test-text.gz > test-text
508
    cd subsubdir
509
    zcat test-text.gz > test-text
510
 
511
- name: extracting file with bad extension
512
  filenames: test-1.23.bin
513
  prerun: cp ${1}test-1.23.tar.gz ${1}test-1.23.bin
514
  cleanup: rm -f ${1}test-1.23.bin
515
  baseline: |
516
    tar -zxf $1
517
 
518
- name: extracting file with misleading extension
519
  filenames: trickery.tar.gz
520
  prerun: cp ${1}test-1.23.zip ${1}trickery.tar.gz
521
  cleanup: rm -f ${1}trickery.tar.gz
522
  antigrep: '.'
523
  baseline: |
524
    mkdir trickery
525
    cd trickery
526
    unzip -q ../$1
527
 
528
- name: listing file with misleading extension
529
  options: -l
530
  filenames: trickery.tar.gz
531
  prerun: cp ${1}test-1.23.zip ${1}trickery.tar.gz
532
  cleanup: rm -f ${1}trickery.tar.gz
533
  grep: "^1/2/3$"
534
  antigrep: "^dtrx:"
535
 
536
- name: listing multiple file with misleading extensions
537
  options: -l
538
  filenames: trickery.tar.gz trickery.tar.gz
539
  prerun: cp ${1}test-1.23.zip ${1}trickery.tar.gz
540
  cleanup: rm -f ${1}trickery.tar.gz
541
  output: |
542
    trickery.tar.gz:
543
    1/2/3
544
    a/b
545
    foobar
546
    
547
    trickery.tar.gz:
548
    1/2/3
549
    a/b
550
    foobar
551
 
552
- name: non-archive error
553
  filenames: /dev/null
554
  error: true
555
  grep: "not a known archive type"
556
 
557
- name: no such file error
558
  filenames: nonexistent-file.tar.gz
559
  error: true
560
  grep: "[Nn]o such file"
561
 
562
- name: no such file error with no extension
563
  filenames: nonexistent-file
564
  error: true
565
  grep: "[Nn]o such file"
566
 
567
- name: try to extract a directory error
568
  filenames: test-directory
569
  prerun: mkdir test-directory
570
  error: true
571
  grep: "cannot work with a directory"
572
 
573
- name: permission denied error
574
  filenames: unreadable-file.tar.gz
575
  prerun: |
576
    touch unreadable-file.tar.gz
577
    chmod 000 unreadable-file.tar.gz
578
  cleanup: rm -f unreadable-file.tar.gz
579
  error: true
580
  grep: "[Pp]ermission denied"
581
 
582
- name: permission denied no-pipe file error
583
  filenames: unreadable-file.zip
584
  prerun: |
585
    touch unreadable-file.zip
586
    chmod 000 unreadable-file.zip
587
  cleanup: rm -f unreadable-file.zip
588
  error: true
589
  grep: "[Pp]ermission denied"
590
 
591
- name: bad file error
592
  filenames: bogus-file.tar.gz
593
  prerun: |
594
    touch bogus-file.tar.gz
595
  cleanup: rm -f bogus-file.tar.gz
596
  error: true
597
  grep: "returned status code [^0]"
598
 
599
- name: try to extract in unwritable directory
600
  directory: unwritable-dir
601
  filenames: ../test-1.23.tar.gz
602
  prerun: chmod 500 .
603
  error: true
604
  grep: "cannot extract here: [Pp]ermission denied"
605
 
606
- name: recursive listing is a no-op
607
  options: -rl
608
  filenames: test-recursive-badperms.tar.bz2
609
  grep: test-badperms.tar
610
  antigrep: testdir/
611
 
612
- name: graceful coping when many extraction directories are taken
613
  directory: busydir
614
  prerun: |
615
    mkdir test-1.23
616
    for i in $(seq 1 10); do mkdir test-1.23.$i; done
617
  filenames: ../test-1.23.tar.gz
618
  grep: "WARNING: extracting"
619
 
620
- name: graceful coping when many decompression targets are taken
621
  directory: busydir
622
  prerun: |
623
    touch test-text
624
    for i in $(seq 1 10); do touch test-text.$i; done
625
  filenames: ../test-text.gz
626
  grep: "WARNING: extracting"
627
 
628
- name: output filenames with -v
629
  options: -v -n
630
  filenames: test-onedir.tar.gz test-text.gz
631
  output: |
632
    test-onedir.tar.gz:
633
    test-onedir/
634
    test-onedir/test/
635
    test-onedir/test/foobar
636
    test-onedir/test/quux
637
    
638
    test-text.gz:
639
    test-text
640
 
641
- name: output filenames with -v and -f
642
  options: -nvf
643
  directory: busydir
644
  filenames: ../test-onedir.tar.gz
645
  output: |
646
    test/
647
    test/foobar
648
    test/quux
649
 
650
- name: list recursive archives
651
  options: ""
652
  filenames: test-deep-recursion.tar
653
  input: |
654
    r
655
    l
656
    n
657
  grep: '^test-deep-recursion/subsubdir/test-text\.gz$'
658
 
659
- name: partly failed extraction
660
  options: -n
661
  filenames: test-tar-with-node.tar.gz
662
  baseline: |
663
    mkdir test-tar-with-node
664
    cd test-tar-with-node
665
    tar -zxf ../$1
666
  grep: Cannot mknod
667
 
668
- name: flat extraction of one-file archive
669
  directory: inside-dir
670
  options: -f
671
  filenames: ../test-onefile.tar.gz
672
  baseline: tar -zxf $1
673
  antigrep: "contains"
674
 
675
- name: test recursive extraction of one archive
676
  directory: inside-dir
677
  options: ""
678
  filenames: ../test-one-archive.tar.gz
679
  baseline: |
680
    tar -zxf $1
681
    zcat test-text.gz >test-text
682
  input: |
683
    h
684
    o
685
 
686
- name: extracting empty archive
687
  filenames: test-empty.tar.bz2
688
  baseline: ""
689
 
690
- name: listing empty archive
691
  filenames: test-empty.tar.bz2
692
  options: -l
693
  antigrep: '.'