rpm/librsync/driver.sh

187 lines
3.8 KiB
Bash
Executable File

#! /bin/sh -e
# Regression test driver for librsync.
# Copyright (C) 2000, 2001 by Martin Pool
# Id: driver.sh,v 1.23 2001/03/18 14:42:28 mbp Exp
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation; either version 2.1 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# This script doesn't do anything except general setup. It should be
# passed the name of the actual script file as the first parameter.
# You can pass additional arguments to give options which are usually
# passed through. For example in most cases -D will turn on debugging
# trace.
# NB: Tests should exit with code 77 if they can't be run but haven't
# failed.
# NB: We can't rely on having the executable bit set on this script or
# any other, because CVS doesn't always update them properly.
# TODO: Rather than using source files, write some programs that
# generate random data of defined lengths. However, it should not be
# totally random: it should have some kind of autocorrelation. Also,
# perhaps generate random pairs of related files. Perhaps do this
# using genmaptest.
if test "$#" -lt 1
then
echo 'runtest: must have at least one parameter, the test script'
exit 1
fi
test_script=$1
shift
test_name=`basename $test_script`
test_base=`basename $test_script .test`
block_len=2048
# TODO: Add more pair instructions here
delta_instr="
0,1024
0,2048
1024,1024:0,1024
0,1025
0,1
0,10
0,1000
0,2000
0,10000
0,100000
1,10
1,10000
0,2000:2000,2000:4000,100000
1,10000:0,1:10000,1000000
10,1:8,4:6,8:4,10:2,12
0,10000:0,10000:0,10000
"
bufsizes='4096 1 2 3 7 15 100 10000 200000'
# Process command-line options
stats=
debug=
time=
for o in "$@"
do
case "$o" in
-D)
debug=-v
;;
-s)
stats=-s
;;
-x)
VERBOSE=1
;;
-t)
time='time'
;;
*)
echo "unrecognized driver option \"$o\"" >&2
exit 1
;;
esac
done
if test -z "$srcdir"
then
srcdir=`dirname $0`
fi
srcdir=`cd $srcdir; pwd`
builddir=`pwd`
PATH=$builddir:$srcdir:$PATH
export PATH
testdir=$srcdir/$test_base.input
tmpdir=$builddir/$test_base.tmp
if test ! -d $tmpdir
then
mkdir $tmpdir || exit 2
fi
test_skipped () {
echo $test_name: skipped; exit 77
}
fail_test () {
result=$1
shift
echo "$test_name: returned $result: $@" >&2
exit 2
}
check_compare() {
if cmp "$1" "$2"
then
:
else
echo "$test_name: comparison failed from command: $3" >&2
exit 2
fi
}
run_test () {
if test -n "$VERBOSE"
then
echo " $@" >&2
fi
"$@" || fail_test "$?" "$@"
}
triple_test () {
buf="$1"
old="$2"
new="$3"
run_test rdiff $debug -I$buf -O$buf $stats signature --block-size=$block_len \
$old $tmpdir/sig
run_test rdiff $debug -I$buf -O$buf $stats delta $tmpdir/sig $new $tmpdir/delta
run_test rdiff $debug -I$buf -O$buf $stats patch $old $tmpdir/delta $tmpdir/new
check_compare $new $tmpdir/new "triple -I$buf -O$buf $old $new"
}
# more than this many on any one test gets boring
ntests=150
countdown () {
if ntests=`expr $ntests - 1`
then
cat $srcdir/dot
else
echo OK
exit 0
fi
}
make_input () {
cat $srcdir/COPYING
}
echo "$test_name: " | tr -d '/\n/'
. $test_script "$@"
echo OK
rm -f $tmpdir/*
rmdir $tmpdir
# If nothing failed, then
exit 0