tests/tests.yml

Sun, 12 Apr 2009 11:21:51 -0400

author
Brett Smith <brettcsmith@brettcsmith.org>
date
Sun, 12 Apr 2009 11:21:51 -0400
branch
trunk
changeset 106
dcf005ef7070
parent 103
f68a0ca870b0
child 108
b8316c2b36df
permissions
-rw-r--r--

Start printing results ASAP with -l or -t.

Doing -l on a large archive was painful because dtrx would wait until it
had all the listings before it displayed any. It did this to make sure
that the listing would be successful.

On reconsidering, though, I think it's really unlikely that there'll be a
case where a lister process provides *some* good output for a given file in
the wrong format. So, now -l will try to get one good line out of the
lister. If it gets that, then it will immediately start displaying results
as they come in. On the off chance that it detects an error later on, it
will display an error about that, and then try again with a different
extractor if appropriate.

- 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: 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: 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: .

mercurial