From: bluhm Date: Thu, 22 Jun 2017 16:10:34 +0000 (+0000) Subject: Convert shell script tests to regress make rules. Having only one X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=1a6707f7ebf27c952321319ddfb54456dc3b4e9b;p=openbsd Convert shell script tests to regress make rules. Having only one tool and more verbosity allows better debugging. Additional tests check that gzip and gunzip preserve file permissions and ownership. --- diff --git a/regress/usr.bin/gzip/Makefile b/regress/usr.bin/gzip/Makefile index 6a17ae8851a..2777447a75c 100644 --- a/regress/usr.bin/gzip/Makefile +++ b/regress/usr.bin/gzip/Makefile @@ -1,17 +1,143 @@ -# $OpenBSD: Makefile,v 1.1 2008/08/20 09:29:51 mpf Exp $ +# $OpenBSD: Makefile,v 1.2 2017/06/22 16:10:34 bluhm Exp $ -TESTSCRIPTS=t1 t2 +# Copyright (c) 2008 Marco Pfatschbacher +# Copyright (c) 2017 Alexander Bluhm +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.for t in ${TESTSCRIPTS} -REGRESS_TARGETS+=t-${t} -CLEANFILES+=${t}.gz +CLEANFILES= *.gz rc rcmotd multi owner perm -t-${t}: - sh ${.CURDIR}/${t}.sh ${.CURDIR} ${.OBJDIR} +# Test if gzip(1) detects truncated or corrupted files + +REGRESS_TARGETS+= run-regress-integrity +run-regress-integrity: + @echo "\n==== $@ ====" + # create gz + gzip -v rc.gz + # check that everything is ok + gzip -vt rc.gz + +REGRESS_TARGETS+= run-regress-truncate-2k +run-regress-truncate-2k: + @echo "\n==== $@ ====" + # truncate at 2k + gzip rc.gz + dd if=rc.gz bs=1k count=2 of=2k.gz + # check that truncation is detected + ! gzip -vt 2k.gz + +REGRESS_TARGETS+= run-regress-truncate-1k +run-regress-truncate-1k: + @echo "\n==== $@ ====" + # truncate at 1k + gzip rc.gz + dd if=rc.gz bs=1k count=1 of=1k.gz + # check that truncation is detected + ! gzip -vt 1k.gz + +REGRESS_TARGETS+= run-regress-skip +run-regress-skip: + @echo "\n==== $@ ====" + # skip some data in the middle + gzip rc.gz + dd if=rc.gz bs=1k count=1 of=skip.gz + dd if=rc.gz bs=1k seek=2 skip=2 conv=notrunc of=skip.gz + # check that corruption is detected + ! gzip -vt skip.gz + +JOT100!= jot 100 +REGRESS_TARGETS+= run-regress-fuzz +run-regress-fuzz: + @echo "\n==== $@ ====" + # simple fuzzer that modifies one random byte at a random offset + gzip rc.gz +.for i in ${JOT100} + dd if=rc.gz bs=1k of=fuzz.gz status=none + RANDOM=$i;\ + where=$$((RANDOM % 2048 + 256)); fuzz=$$((RANDOM % 256));\ + orig=`dd if=rc.gz bs=1 skip=$$where count=1 status=none |\ + hexdump -e '"%d"'`;\ + echo "$i/100: fuzzing byte @$$where: $$orig -> $$fuzz";\ + echo -n \\0`printf "%o" $$fuzz` |\ + dd bs=1 seek=$$where conv=notrunc of=fuzz.gz status=none + cmp -s rc.gz fuzz.gz || ! gzip -vt fuzz.gz .endfor -CLEANFILES+=*.test +# test basic gzip functionality + +REGRESS_TARGETS+= run-regress-gunzip +run-regress-gunzip: + @echo "\n==== $@ ====" + # gzip and gunzip + gzip -v rc.gz + gunzip -f rc.gz + # check that uncompressed file does match + diff -up /etc/rc rc + +REGRESS_TARGETS+= run-regress-multi +run-regress-multi: + @echo "\n==== $@ ====" + # compress multiple files + gzip -c /etc/rc /etc/motd >multi.gz + # check multiple gzip file + gzip -vt multi.gz + gunzip -f multi.gz + # check that gunzipped files do match + cat /etc/rc /etc/motd >rcmotd + diff -up rcmotd multi + +# Test permissions + +REGRESS_TARGETS+= run-regress-perm-zip +run-regress-perm-zip: + @echo "\n==== $@ ====" + # compress file with special permissions + cat /etc/rc >perm + chmod 614 perm + rm -f perm.gz + gzip perm + ls -l perm.gz | grep '^-rw---xr-- ' + +REGRESS_TARGETS+= run-regress-perm-unzip +run-regress-perm-unzip: + @echo "\n==== $@ ====" + # uncompress file with special permissions + gzip perm.gz + chmod 614 perm.gz + rm -f perm + gunzip perm.gz + ls -l perm | grep '^-rw---xr-- ' + +REGRESS_TARGETS+= run-regress-owner-zip +run-regress-owner-zip: + @echo "\n==== $@ ====" + # compress file as root with user and group nobody + rm -f owner + cat /etc/rc >owner + ${SUDO} chown nobody:nobody owner + rm -f owner.gz + ${SUDO} gzip owner + ls -l owner.gz | grep ' nobody *nobody ' -.PHONY: ${REGRESS_TARGETS} +REGRESS_TARGETS+= run-regress-owner-unzip +run-regress-owner-unzip: + @echo "\n==== $@ ====" + # uncompress file with special permissions + rm -f owner.gz + gzip owner.gz + ${SUDO} chown nobody:nobody owner.gz + rm -f owner + ${SUDO} gunzip owner.gz + ls -l owner | grep ' nobody *nobody ' .include diff --git a/regress/usr.bin/gzip/t1.sh b/regress/usr.bin/gzip/t1.sh deleted file mode 100644 index 8eb29931990..00000000000 --- a/regress/usr.bin/gzip/t1.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -# $OpenBSD: t1.sh,v 1.1 2008/08/20 09:29:51 mpf Exp $ - -# Test if gzip(1) detects truncated or corrupted files - -# Copyright (c) 2008 Marco Pfatschbacher -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -# truncate at 2k -gzip < /etc/rc | dd bs=1k count=2 of=t1.gz 2>/dev/null -if gzip -vt t1.gz; then - echo "=> ERROR: truncation not detected!" - exit 1 -else - echo "=> OK" -fi - -# truncate at 1k -gzip < /etc/rc | dd bs=1k count=1 of=t1.gz 2>/dev/null -if gzip -vt t1.gz; then - echo "=> ERROR: truncation not detected!" - exit 1 -else - echo "=> OK" -fi - -# skip some data in the middle -gzip < /etc/rc | dd bs=1k seek=1 >> t1.gz 2>/dev/null -if gzip -vt t1.gz; then - echo "=> ERROR: corruption not detected!" - exit 1 -else - echo "=> OK" -fi - -# simple fuzzer that modifies one random byte at a random offset - -gzip < /etc/rc > t1.gz -for i in `jot 100`; do - where=$((RANDOM % 2048 + 256)) # random offset (but skip the header) - orig=`dd if=t1.gz skip=$where bs=1 count=1 2>/dev/null |\ - hexdump -e '"%d"'` - fuzz=$((((orig + RANDOM) % 256) + 1)) - if [ $fuzz = $orig ]; then - fuzz=$(((fuzz + 1) % 256)) - fi - echo "$i/100: fuzzing byte @$where: $orig -> $fuzz" - - if (dd if=t1.gz bs=1 count=$where 2>/dev/null; \ - echo -n \\0`printf "%o" $fuzz`; \ - dd if=t1.gz bs=1 skip=$((where+1)) 2>/dev/null) | gzip -tv; then - echo "=> ERROR: corruption not detected!" - exit 1 - else - echo "=> OK" - fi -done - -exit 0 diff --git a/regress/usr.bin/gzip/t2.sh b/regress/usr.bin/gzip/t2.sh deleted file mode 100644 index 9d2d39f4c67..00000000000 --- a/regress/usr.bin/gzip/t2.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -# $OpenBSD: t2.sh,v 1.1 2008/08/20 09:29:51 mpf Exp $ - -# test basic gzip functionality - -gzip -c /etc/rc > t1.gz -if ! gzip -vt t1.gz; then - echo "=> ERROR: could not gzip" - exit 1 -else - echo "=> OK" -fi - -if ! gunzip -c t1.gz | cmp -s - /etc/rc; then - echo "=> ERROR: uncompressed file does not match" - gunzip -c t1.gz | diff - /etc/rc - exit 1 -else - echo "=> OK" -fi - -gzip -c /etc/rc /etc/motd > t1.gz -if ! gzip -vt t1.gz; then - echo "=> ERROR: could not gzip multiple files" - exit 1 -else - echo "=> OK" -fi - -cat /etc/rc /etc/motd > rcmotd.test -if ! gunzip -c t1.gz | cmp -s - rcmotd.test; then - echo "=> ERROR: gunzipped files do not match" - gunzip -c t1.gz | diff - rcmotd.test - exit 1 -else - echo "=> OK" -fi - -exit 0