+# Copyright (C) 2001 by Martin Pool <mbp@samba.org>
+
+# General-purpose test functions for rsync.
+
+TMP="$scratchdir"
+FROM=${TMP}/from
+TO=${TMP}/to
+F1=text1
+LOG=${TMP}/log
+RSYNC="$rsync_bin"
+
+runtest() {
+ echo $ECHO_N "Test $1: $ECHO_C"
+ eval "$2"
+}
+
+printmsg() {
+ echo "$1"
+}
+
+hands_setup() {
+ [ -d $FROM ] || mkdir $FROM
+ [ -d $TO ] || mkdir $TO
+
+ # set up test data
+ touch ${FROM}/empty
+ mkdir ${FROM}/emptydir
+ ps ax > ${FROM}/pslist
+
+ # This might fail on systems that don't have -n
+ echo $ECHO_N "This file has no trailing lf$ECHO_C" > ${FROM}/nolf
+ ln -s nolf ${FROM}/nolf-symlink
+ cat /etc/inittab /etc/services /etc/resolv.conf > ${FROM}/${F1}
+ mkdir ${FROM}/dir
+ cp ${FROM}/${F1} ${FROM}/dir
+ mkdir ${FROM}/dir/subdir
+ mkdir ${FROM}/dir/subdir/subsubdir
+ ls -ltr /etc > ${FROM}/dir/subdir/subsubdir/etc-ltr-list
+ mkdir ${FROM}/dir/subdir/subsubdir2
+ ls -lt /bin > ${FROM}/dir/subdir/subsubdir2/bin-lt-list
+}
+
+
+###########################
+# Run a test (in '$1') then compare directories $2 and $3 to see if
+# there are any difference. If there are, explain them.
+
+checkit() {
+ log=${LOG}
+ failed=
+ # the log accumulates all output; we only display it if there
+ # is a problem.
+
+ echo "Running: \"$1\"" >${log}
+ echo "">>${log}
+ eval "$1" >>${log} 2>&1
+ status=$?
+ if [ $status != 0 ]; then
+ failed="YES";
+ fi
+
+ echo "-------------">>${log}
+ echo "check how the files compare with diff:">>${log}
+ echo "">>${log}
+ diff -ur $2 $3 >>${log} 2>&1 || failed=YES
+ echo "-------------">>${log}
+ echo "check how the directory listings compare with diff:">>${log}
+ echo "">>${log}
+ ( cd $2 ; ls -laR ) > ${TMP}/ls-from 2>>${log}
+ ( cd $3 ; ls -laR ) > ${TMP}/ls-to 2>>${log}
+ diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} 2>&1 || failed=YES
+ if [ -z "${failed}" ] ; then
+ echo "${ECHO_T} done."
+ rm $log
+ return 0
+ else
+ echo "${ECHO_T} failed!"
+ cat ${log}
+ rm ${log}
+ return 1
+ fi
+}