X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Flibpspp%2Fzip.at;h=bcc550457ab718a96f0280427d010a4ec2fd29d0;hb=692855d0479d782e97ea288a2dfbd4c483b1b27b;hp=a2f9d6f17993a875340484d0bfd67a482a25b989;hpb=5dbf5abcbed01f04422d4dead1c0ae0bb7efde4f;p=pspp diff --git a/tests/libpspp/zip.at b/tests/libpspp/zip.at index a2f9d6f179..bcc550457a 100644 --- a/tests/libpspp/zip.at +++ b/tests/libpspp/zip.at @@ -1,59 +1,125 @@ dnl PSPP - a program for statistical analysis. dnl Copyright (C) 2017 Free Software Foundation, Inc. -dnl +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 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 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=$dir1/$s - 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 && 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 -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]) + +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 -exit 0 +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