- name: basic .tar filenames: test-1.23.tar baseline: | tar -xf $1 - name: basic .tar.gz filenames: test-1.23.tar.gz baseline: | tar -zxf $1 - name: basic .tar.bz2 filenames: test-1.23.tar.bz2 baseline: | mkdir test-1.23 cd test-1.23 tar -jxf ../$1 - name: basic .zip filenames: test-1.23.zip baseline: | mkdir test-1.23 cd test-1.23 unzip -q ../$1 - name: basic .deb filenames: test-1.23_all.deb baseline: | mkdir test-1.23 cd test-1.23 ar p ../$1 data.tar.gz | tar -zx - name: .deb with LZMA compression filenames: test-2_all.deb baseline: | mkdir test-2 cd test-2 ar p ../$1 data.tar.lzma | lzcat | tar -x - name: basic .gem filenames: test-1.23.gem baseline: | mkdir test-1.23 cd test-1.23 tar -xOf ../$1 data.tar.gz | tar -zx - name: basic .7z filenames: test-1.23.7z baseline: | 7z x $1 - name: basic .lzma filenames: test-1.23.tar.lzma baseline: | lzcat $1 | tar -x - name: basic .cpio filenames: test-1.23.cpio baseline: | cpio -i --make-directories <$1 antigrep: blocks? - name: .deb metadata filenames: test-1.23_all.deb options: --metadata baseline: | mkdir test-1.23 cd test-1.23 ar p ../$1 control.tar.gz | tar -zx - name: .gem metadata filenames: test-1.23.gem options: -m baseline: | tar -xOf $1 metadata.gz | zcat > test-1.23.gem-metadata.txt cleanup: rm -f test-1.23.gem-metadata.txt posttest: | if [ "x`cat test-1.23.gem-metadata.txt`" != "xhi" ]; then exit 1; fi - name: recursion and permissions filenames: test-recursive-badperms.tar.bz2 options: -n -r baseline: | mkdir test-recursive-badperms cd test-recursive-badperms tar -jxf ../$1 mkdir test-badperms cd test-badperms tar -xf ../test-badperms.tar chmod 700 testdir posttest: | if [ "x`cat test-recursive-badperms/test-badperms/testdir/testfile`" != \ "xhey" ]; then exit 1; fi - name: decompressing gz directory: inside-dir filenames: ../test-text.gz baseline: | zcat $1 >test-text posttest: | if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi - name: decompressing bz2 directory: inside-dir filenames: ../test-text.bz2 baseline: | bzcat $1 >test-text posttest: | if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi - name: decompressing xz directory: inside-dir filenames: ../test-text.xz baseline: | xzcat $1 >test-text posttest: | if [ "x`cat test-text`" != "xhi" ]; then exit 1; fi - name: decompression with -r directory: inside-dir filenames: ../test-text.gz options: -n -r baseline: | zcat $1 >test-text - name: decompression with -fr directory: inside-dir filenames: ../test-text.gz options: -n -fr baseline: | zcat $1 >test-text - name: overwrite protection filenames: test-1.23.tar.bz2 baseline: | mkdir test-1.23.1 cd test-1.23.1 tar -jxf ../$1 prerun: | mkdir test-1.23 - name: overwrite option filenames: test-1.23.tar.bz2 options: -n -o baseline: | cd test-1.23 tar -jxf ../$1 prerun: | mkdir test-1.23 - name: flat option directory: inside-dir filenames: ../test-1.23.tar.bz2 options: -n -f baseline: | tar -jxf $1 - name: flat recursion and permissions directory: inside-dir filenames: ../test-recursive-badperms.tar.bz2 options: -n -fr baseline: | tar -jxf $1 tar -xf test-badperms.tar chmod 700 testdir posttest: | if [ "x`cat testdir/testfile`" != "xhey" ]; then exit 1; fi - name: no files error: true grep: "[Uu]sage" - name: bad file error: true filenames: nonexistent-file.tar - name: not an archive error: true filenames: tests.yml - name: bad options options: -n --nonexistent-option filenames: test-1.23.tar error: true - name: --version options: -n --version grep: ersion \d+\.\d+ filenames: test-1.23.tar baseline: | exit 0 - name: one good archive of many filenames: tests.yml test-1.23.tar nonexistent-file.tar error: true baseline: | tar -xf $2 - name: silence filenames: tests.yml options: -n -qq error: true antigrep: '.' - name: can't write to directory directory: inside-dir filenames: ../test-1.23.tar error: true grep: ERROR antigrep: Traceback prerun: | chmod 500 . - name: list contents of one file options: -n -l filenames: test-1.23.tar output: | test-1.23/ test-1.23/1/ test-1.23/1/2/ test-1.23/1/2/3 test-1.23/a/ test-1.23/a/b test-1.23/foobar - name: list contents of .cpio options: -n -l filenames: test-1.23.cpio grep: ^test-1\.23/1/2/3$ antigrep: blocks? - name: list contents of multiple files options: -n --table filenames: test-1.23_all.deb test-1.23.zip output: | test-1.23_all.deb: 1/ 1/2/ 1/2/3 a/ a/b foobar test-1.23.zip: 1/2/3 a/b foobar - name: list contents of compressed file options: -n -t filenames: test-text.gz output: test-text - name: default behavior with one directory (gz) options: -n filenames: test-onedir.tar.gz baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted inside another interactively (gz) options: "" filenames: test-onedir.tar.gz grep: one directory input: i baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted with rename interactively (gz) options: "" filenames: test-onedir.tar.gz input: r baseline: | tar -zxf $1 mv test test-onedir - name: one directory extracted here interactively (gz) options: "" filenames: test-onedir.tar.gz input: h baseline: | tar -zxf $1 - name: --one=inside options: "--one=inside -n" filenames: test-onedir.tar.gz baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: --one=rename options: "--one-entry=rename -n" filenames: test-onedir.tar.gz baseline: | tar -zxf $1 mv test test-onedir - name: --one=here options: "--one=here -n" filenames: test-onedir.tar.gz baseline: | tar -zxf $1 - name: default behavior with one directory (bz2) options: -n filenames: test-onedir.tar.gz baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted inside another (bz2) options: "" filenames: test-onedir.tar.gz input: i baseline: | mkdir test-onedir cd test-onedir tar -zxf ../$1 - name: one directory extracted with rename (bz2) options: "" filenames: test-onedir.tar.gz input: r baseline: | tar -zxf $1 mv test test-onedir - name: one directory extracted here (bz2) options: "" filenames: test-onedir.tar.gz input: h baseline: | tar -zxf $1 - name: default behavior with one file options: -n filenames: test-onefile.tar.gz baseline: | mkdir test-onefile cd test-onefile tar -zxf ../$1 - name: one file extracted inside a directory options: "" filenames: test-onefile.tar.gz input: i grep: one file baseline: | mkdir test-onefile cd test-onefile tar -zxf ../$1 - name: prompt wording with one file options: "" filenames: test-onefile.tar.gz input: i grep: file _I_nside - name: one file extracted with rename, with Expected text options: "" filenames: test-onefile.tar.gz input: r grep: "Expected: test-onefile" baseline: | tar -zxOf $1 >test-onefile - name: one file extracted here, with Actual text options: "" filenames: test-onefile.tar.gz input: h grep: " Actual: test-text" baseline: | tar -zxf $1 - name: bomb with preceding dot in the table filenames: test-dot-first-bomb.tar.gz options: "" antigrep: one baseline: | mkdir test-dot-first-bomb cd test-dot-first-bomb tar -zxf ../$1 - name: one directory preceded by dot in the table filenames: test-dot-first-onedir.tar.gz options: "" grep: "Actual: (./)?dir/" input: h baseline: | tar -zxf $1 - name: two one-item archives with different answers filenames: test-onedir.tar.gz test-onedir.tar.gz options: "" input: | h r baseline: | tar -zxf $1 mv test test-onedir tar -zxf $1 - name: interactive recursion (always) filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2 options: "" input: | i a i baseline: | extract() { mkdir test-recursive-badperms$2 cd test-recursive-badperms$2 tar -jxf ../$1 mkdir test-badperms cd test-badperms tar -xf ../test-badperms.tar chmod 700 testdir cd ../.. } extract $1 extract $1 .1 - name: interactive recursion (once) filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2 options: "" input: | i o i n baseline: | mkdir test-recursive-badperms cd test-recursive-badperms tar -jxf ../$1 mkdir test-badperms cd test-badperms tar -xf ../test-badperms.tar chmod 700 testdir cd ../.. mkdir test-recursive-badperms.1 cd test-recursive-badperms.1 tar -jxf ../$1 - name: interactive recursion (never) filenames: test-recursive-badperms.tar.bz2 test-recursive-badperms.tar.bz2 options: "" input: | i v i baseline: | extract() { mkdir test-recursive-badperms$2 cd test-recursive-badperms$2 tar -jxf ../$1 cd .. } extract $1 extract $1 .1 - name: recursion in subdirectories here filenames: test-deep-recursion.tar options: "" input: | h o grep: 'contains 2 other archive file\(s\), out of 2 file\(s\)' baseline: | tar -xf $1 cd subdir zcat test-text.gz > test-text cd subsubdir zcat test-text.gz > test-text - name: recursion in subdirectories with rename filenames: test-deep-recursion.tar options: "" input: | r o grep: "contains 2" baseline: | tar -xf $1 mv subdir test-deep-recursion cd test-deep-recursion zcat test-text.gz > test-text cd subsubdir zcat test-text.gz > test-text - name: recursion in subdirectories inside new dir filenames: test-deep-recursion.tar options: "" input: | i o grep: "contains 2" baseline: | mkdir test-deep-recursion cd test-deep-recursion tar -xf ../$1 cd subdir zcat test-text.gz > test-text cd subsubdir zcat test-text.gz > test-text - name: extracting file with bad extension filenames: test-1.23.bin prerun: cp ${1}test-1.23.tar.gz ${1}test-1.23.bin cleanup: rm -f ${1}test-1.23.bin baseline: | tar -zxf $1 - name: extracting file with misleading extension filenames: trickery.tar.gz prerun: cp ${1}test-1.23.zip ${1}trickery.tar.gz cleanup: rm -f ${1}trickery.tar.gz antigrep: '.' baseline: | mkdir trickery cd trickery unzip -q ../$1 - name: listing file with misleading extension options: -l filenames: trickery.tar.gz prerun: cp ${1}test-1.23.zip ${1}trickery.tar.gz cleanup: rm -f ${1}trickery.tar.gz grep: "^1/2/3$" antigrep: "^dtrx:" - name: listing multiple file with misleading extensions options: -l filenames: trickery.tar.gz trickery.tar.gz prerun: cp ${1}test-1.23.zip ${1}trickery.tar.gz cleanup: rm -f ${1}trickery.tar.gz output: | trickery.tar.gz: 1/2/3 a/b foobar trickery.tar.gz: 1/2/3 a/b foobar - name: non-archive error filenames: /dev/null error: true grep: "not a known archive type" - name: no such file error filenames: nonexistent-file.tar.gz error: true grep: "[Nn]o such file" - name: no such file error with no extension filenames: nonexistent-file error: true grep: "[Nn]o such file" - name: try to extract a directory error filenames: test-directory prerun: mkdir test-directory error: true grep: "cannot work with a directory" - name: permission denied error filenames: unreadable-file.tar.gz prerun: | touch unreadable-file.tar.gz chmod 000 unreadable-file.tar.gz cleanup: rm -f unreadable-file.tar.gz error: true grep: "[Pp]ermission denied" - name: permission denied no-pipe file error filenames: unreadable-file.zip prerun: | touch unreadable-file.zip chmod 000 unreadable-file.zip cleanup: rm -f unreadable-file.zip error: true grep: "[Pp]ermission denied" - name: bad file error filenames: bogus-file.tar.gz prerun: | touch bogus-file.tar.gz cleanup: rm -f bogus-file.tar.gz error: true grep: "returned status code [^0]" - name: try to extract in unwritable directory directory: unwritable-dir filenames: ../test-1.23.tar.gz prerun: chmod 500 . error: true grep: "cannot extract here: [Pp]ermission denied" - name: recursive listing is a no-op options: -rl filenames: test-recursive-badperms.tar.bz2 grep: test-badperms.tar antigrep: testdir/ - name: graceful coping when many extraction directories are taken directory: busydir prerun: | mkdir test-1.23 for i in $(seq 1 10); do mkdir test-1.23.$i; done filenames: ../test-1.23.tar.gz grep: "WARNING: extracting" - name: graceful coping when many decompression targets are taken directory: busydir prerun: | touch test-text for i in $(seq 1 10); do touch test-text.$i; done filenames: ../test-text.gz grep: "WARNING: extracting" - name: output filenames with -v options: -v -n filenames: test-onedir.tar.gz test-text.gz output: | test-onedir.tar.gz: test-onedir/ test-onedir/test/ test-onedir/test/foobar test-onedir/test/quux test-text.gz: test-text - name: output filenames with -v and -f options: -nvf directory: busydir filenames: ../test-onedir.tar.gz output: | test/ test/foobar test/quux - name: list recursive archives options: "" filenames: test-deep-recursion.tar input: | r l n grep: '^test-deep-recursion/subsubdir/test-text\.gz$' - name: partly failed extraction options: -n filenames: test-tar-with-node.tar.gz baseline: | mkdir test-tar-with-node cd test-tar-with-node tar -zxf ../$1 grep: Cannot mknod - name: flat extraction of one-file archive directory: inside-dir options: -f filenames: ../test-onefile.tar.gz baseline: tar -zxf $1 antigrep: "contains" - name: test recursive extraction of one archive directory: inside-dir options: "" filenames: ../test-one-archive.tar.gz baseline: | tar -zxf $1 zcat test-text.gz >test-text input: | h o - name: extracting empty archive filenames: test-empty.tar.bz2 baseline: "" - name: listing empty archive filenames: test-empty.tar.bz2 options: -l antigrep: '.'