Mark unused vars.
[rsync.git] / test.sh
blobf74471c3cae139283632d2f325443beb8c200c10
1 #!/bin/sh
3 # Copyright (C) 1998,1999 Philip Hands <phil@hands.com>
5 # This program is distributable under the terms of the GNU GPL (see COPYING)
7 # This is a simple test script that tests a few rsync
8 # features to make sure I haven't broken them before a release.
12 # check if we are running under debian-test, and change behaviour to suit
13 if test -n "${DEBIANTEST_LIB}" ; then
14 # make sure rsync is installed
15 test -e /usr/bin/rsync || exit 0
17 . ${DEBIANTEST_LIB}/functions.sh
18 Debian=1
19 else
20 cat <<EOF
22 This set of tests is not completely portable. It is intended for developers
23 not for end users. You may experience failures on some platforms that
24 do not indicate a problem with rsync.
26 EOF
28 RSYNC=`pwd`/rsync
30 runtest() {
31 echo -n "Test $1: "
32 eval "$2"
34 printmsg() {
35 echo ""
36 echo "**** ${1}^G ****"
37 echo ""
41 TMP=/tmp/rsync-test.$$
42 FROM=${TMP}/from
43 TO=${TMP}/to
44 F1=text1
45 LOG=${TMP}/log
47 mkdir $TMP
48 mkdir $FROM
49 mkdir $TO
51 # set up test data
52 touch ${FROM}/empty
53 mkdir ${FROM}/emptydir
54 ps ax > ${FROM}/pslist
55 echo -n "This file has no trailing lf" > ${FROM}/nolf
56 ln -s nolf ${FROM}/nolf-symlink
58 # Gather some random text. We need files that will exist and be
59 # publicly readable on all platforms: hopefully this will work.
60 cat /etc/*tab /etc/services /etc/*.conf /etc/*rc > ${FROM}/${F1}
62 mkdir ${FROM}/dir
63 cp ${FROM}/${F1} ${FROM}/dir/
64 mkdir ${FROM}/dir/subdir
65 mkdir ${FROM}/dir/subdir/subsubdir
66 ls -ltr /etc > ${FROM}/dir/subdir/subsubdir/etc-ltr-list
67 mkdir ${FROM}/dir/subdir/subsubdir2
68 ls -lt /bin > ${FROM}/dir/subdir/subsubdir2/bin-lt-list
70 checkit() {
71 testnum=`expr 0${testnum} + 1`
72 log=${LOG}.${testnum}
73 failed=
74 echo "Running: \"$1\"" >${log}
75 echo "">>${log}
76 eval "$1" >>${log} 2>&1
77 status=$?
78 if [ $status != 0 ]; then
79 failed="YES";
81 echo "-------------">>${log}
82 echo "check how the files compare with diff:">>${log}
83 echo "">>${log}
84 diff -ur $2 $3 >>${log} 2>&1 || failed=YES
85 echo "-------------">>${log}
86 echo "check how the directory listings compare with diff:">>${log}
87 echo "">>${log}
88 ( cd $2 ; ls -laR ) > ${TMP}/ls-from 2>>${log}
89 ( cd $3 ; ls -laR ) > ${TMP}/ls-to 2>>${log}
90 diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} 2>&1 || failed=YES
91 if [ -z "${failed}" ] ; then
92 test -z "${Debian}" && echo " done."
93 rm $log
94 return 0
95 else
96 if test -n "${Debian}" ; then
97 cat ${log}
98 rm ${log}
99 else
100 echo " FAILED (test # ${testnum} status=$status).\a"
102 return 1
107 checkforlogs() {
108 # skip it if we're under debian-test
109 if test -n "${Debian}" ; then return 0 ; fi
111 if [ -f $1 ] ; then
112 cat <<EOF
114 Failures have occured.
116 You can find the output of the tests in these files:
119 Please hit <RETURN>
121 read input
122 else
124 rm -rf ${TMP}
125 echo ""
126 echo "Tests Completed Successfully :-)"
130 # Main script starts here
132 runtest "basic operation" 'checkit "$RSYNC -av ${FROM}/ ${TO}" ${FROM}/ ${TO}'
134 ln ${FROM}/pslist ${FROM}/dir
135 runtest "hard links" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
137 rm ${TO}/${F1}
138 runtest "one file" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
140 echo "extra line" >> ${TO}/${F1}
141 runtest "extra data" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
143 cp ${FROM}/${F1} ${TO}/ThisShouldGo
144 runtest " --delete" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
146 LONGDIR=${FROM}/This-is-a-directory-with-a-stupidly-long-name-created-in-an-attempt-to-provoke-an-error-found-in-2.0.11-that-should-hopefully-never-appear-again-if-this-test-does-its-job/This-is-a-directory-with-a-stupidly-long-name-created-in-an-attempt-to-provoke-an-error-found-in-2.0.11-that-should-hopefully-never-appear-again-if-this-test-does-its-job/This-is-a-directory-with-a-stupidly-long-name-created-in-an-attempt-to-provoke-an-error-found-in-2.0.11-that-should-hopefully-never-appear-again-if-this-test-does-its-job
147 mkdir -p ${LONGDIR}
148 date > ${LONGDIR}/1
149 ls -la / > ${LONGDIR}/2
150 runtest "long paths" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
152 if type ssh >/dev/null 2>&1; then
153 if [ "`ssh -o'BatchMode yes' localhost echo yes 2>/dev/null`" = "yes" ]; then
154 rm -rf ${TO}
155 runtest "ssh: basic test" 'checkit "$RSYNC -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
157 mv ${TO}/${F1} ${TO}/ThisShouldGo
158 runtest "ssh: renamed file" 'checkit "$RSYNC --delete -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
159 else
160 printmsg "Skipping SSH tests because ssh conection to localhost not authorised"
162 else
163 printmsg "Skipping SSH tests because ssh is not in the path"
166 rm -rf ${TO}
167 mkdir -p ${FROM}2/dir/subdir
168 cp -a ${FROM}/dir/subdir/subsubdir ${FROM}2/dir/subdir
169 cp ${FROM}/dir/* ${FROM}2/dir 2>/dev/null
170 runtest "excludes" 'checkit "$RSYNC -vv -Hlrt --delete --include /dir/ --include /dir/\* --include /dir/\*/subsubdir --include /dir/\*/subsubdir/\*\* --exclude \*\* ${FROM}/dir ${TO}" ${FROM}2/ ${TO}'
171 rm -r ${FROM}2
173 checkforlogs ${LOG}.?