X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flibpspp%2Fzip.at;h=bcc550457ab718a96f0280427d010a4ec2fd29d0;hb=692855d0479d782e97ea288a2dfbd4c483b1b27b;hp=a725049e525193737d9dd29597e9b9d643bce72c;hpb=551202adbc334f9c33f8290a4e407b422651bbd5;p=pspp diff --git a/tests/libpspp/zip.at b/tests/libpspp/zip.at index a725049e52..bcc550457a 100644 --- a/tests/libpspp/zip.at +++ b/tests/libpspp/zip.at @@ -1,43 +1,125 @@ +dnl PSPP - a program for statistical analysis. +dnl Copyright (C) 2017 Free Software Foundation, Inc. +dnl +dnl This program is free software: you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation, either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see . +dnl AT_BANNER([zip]) -AT_SETUP([Basic zip - unzip test]) +AT_SETUP([basic zip - unzip test]) AT_KEYWORDS([compression]) - -AT_CHECK([dnl here=`pwd` dir1=$here/original dir2=$here/recovered -mkdir -p $dir1 +mkdir -p "$dir1" # Generate files of differing sizes with random data in them names="" s=1; while test $s -le 8192 ; do - name=`mktemp -p $dir1`; - dd if=/dev/urandom of=$name count=1 bs=$s 2> /dev/null + name="$dir1/$s" + dd if=/dev/urandom of="$name" count=1 bs=$s 2> /dev/null s=$(($s * 2)); - bn=`basename $name`; + bn=`basename "$name"`; names="$names $bn"; done -(cd $dir1 && $abs_top_builddir/tests/libpspp/zip-test w foo.zip $names) +AT_CHECK([cd "$dir1" && zip-test w foo.zip $names]) +# If zipinfo is installed, make sure it can read the zipfile. +if (zipinfo -v) >/dev/null 2>&1; then + AT_CHECK([zipinfo "$dir1/foo.zip"], [0], [ignore]) +fi -mkdir -p $dir2 -cp $dir1/foo.zip $dir2 -cd $dir2 -$abs_top_builddir/tests/libpspp/zip-test r foo.zip $names +mkdir -p "$dir2" +cp "$dir1/foo.zip" "$dir2" +cd "$dir2" -# Compare the files to their originals -for f in $names; do - diff $dir1/$f $dir2/$f; - if test $? -ne 0 ; then exit 1; fi; -done +AT_CHECK([zip-test r foo.zip $names]) -exit 0 +AT_CHECK([ + # Compare the files to their originals + for f in $names; do + diff "$dir1/$f" "$dir2/$f"; + if test $? -ne 0 ; then exit 1; fi; + done ]) +AT_CLEANUP +AT_SETUP([zip - detect corruption on unzip]) +AT_KEYWORDS([compression]) +mkdir write +cd write +AT_DATA([data.txt], [xyzzy +]) +AT_CHECK([zip-test w ../foo.zip data.txt]) +cd .. + +mkdir extract +cd extract +AT_CHECK([zip-test r ../foo.zip data.txt]) +AT_CHECK([cat data.txt], [0], [xyzzy +]) +cd .. +mkdir error +cd error +sed 's/xyzzy/XYZZY/' < ../foo.zip > ../corrupted.zip +AT_CHECK([zip-test r ../corrupted.zip data.txt], [1], [], [dnl +Unzip failed: ../corrupted.zip: corrupt archive reading member "data.txt": bad CRC 0x2a2bcd20 (expected e1bd2a6e) +]) AT_CLEANUP +AT_SETUP([zip to pipe]) +AT_KEYWORDS([compression]) +here=`pwd` +dir1=$here/original +dir2=$here/recovered + +mkdir -p "$dir1" + +# Generate files of differing sizes with random data in them +names="" +s=1; +while test $s -le 8192 ; do + name="$dir1/$s" + dd if=/dev/urandom of="$name" count=1 bs=$s 2> /dev/null + s=$(($s * 2)); + bn=`basename "$name"`; + names="$names $bn"; +done + +# The pipe through "cat" below is essential because it makes the +# output file un-seekable. +AT_CHECK([cd "$dir1" && zip-test w - $names | cat > foo.zip]) + +# If zipinfo is installed, make sure it can read the zipfile. +if (zipinfo -v) >/dev/null 2>&1; then + AT_CHECK([zipinfo "$dir1/foo.zip"], [0], [ignore]) +fi + +mkdir -p "$dir2" +cp "$dir1/foo.zip" "$dir2" +cd "$dir2" + +AT_CHECK([zip-test r foo.zip $names]) + +AT_CHECK([ + # Compare the files to their originals + for f in $names; do + diff "$dir1/$f" "$dir2/$f"; + if test $? -ne 0 ; then exit 1; fi; + done +]) +AT_CLEANUP