187 lines
3.8 KiB
Bash
Executable File
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
|