The --with-rsync-path configure option was using the wrong configure
[rsync/rsync.git] / test.sh
1 #!/bin/sh
2
3 # Copyright (C) 1998,1999 Philip Hands <phil@hands.com>
4 #
5 # This program is distributable under the terms of the GNU GPL (see COPYING)
6 #
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.
9 #
10 #
11
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
16   
17   . ${DEBIANTEST_LIB}/functions.sh
18   Debian=1
19 else
20   cat <<EOF
21
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.
25
26 EOF
27
28 RSYNC=`pwd`/rsync
29
30   runtest() {
31     echo -n "Test $1: "
32     eval "$2"
33   }
34   printmsg() {
35     echo ""
36     echo "**** ${1}^G ****"
37     echo ""  
38   }
39 fi
40
41 TMP=/tmp/rsync-test.$$
42 FROM=${TMP}/from
43 TO=${TMP}/to
44 F1=text1
45 LOG=${TMP}/log
46
47 mkdir $TMP
48 mkdir $FROM
49 mkdir $TO
50
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
57 cat /etc/inittab /etc/services /etc/resolv.conf > ${FROM}/${F1}
58 mkdir ${FROM}/dir
59 cp ${FROM}/${F1} ${FROM}/dir
60 mkdir ${FROM}/dir/subdir
61 mkdir ${FROM}/dir/subdir/subsubdir
62 ls -ltr /etc > ${FROM}/dir/subdir/subsubdir/etc-ltr-list
63 mkdir ${FROM}/dir/subdir/subsubdir2
64 ls -lt /bin > ${FROM}/dir/subdir/subsubdir2/bin-lt-list
65
66 checkit() {
67   testnum=`expr 0${testnum} + 1`
68   log=${LOG}.${testnum}
69   failed=
70   echo "Running: \"$1\""  >${log}
71   echo "">>${log}
72   eval "$1"  >>${log} 2>&1
73   status=$?
74   if [ $status != 0 ]; then
75     failed="YES";
76   fi
77   echo "-------------">>${log}
78   echo "check how the files compare with diff:">>${log}
79   echo "">>${log}
80   diff -ur $2 $3 >>${log} 2>&1 || failed=YES
81   echo "-------------">>${log}
82   echo "check how the directory listings compare with diff:">>${log}
83   echo "">>${log}
84   ( cd $2 ; ls -laR ) > ${TMP}/ls-from 2>>${log}
85   ( cd $3 ; ls -laR ) > ${TMP}/ls-to  2>>${log}
86   diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} 2>&1 || failed=YES
87   if [ -z "${failed}" ] ; then
88     test -z "${Debian}" && echo "       done."
89     rm $log
90     return 0
91   else
92     if test -n "${Debian}" ; then
93       cat ${log}
94       rm ${log}
95     else
96       echo "    FAILED (test # ${testnum} status=$status).\a"
97     fi
98     return 1
99   fi
100 }
101
102
103 checkforlogs() {
104   # skip it if we're under debian-test
105   if test -n "${Debian}" ; then return 0 ; fi
106
107   if [ -f $1 ] ; then
108     cat <<EOF
109
110 Failures have occured.
111
112 You can find the output of the tests in these files:
113   $@
114
115 Please hit <RETURN>
116 EOF
117   read input
118   else
119
120     rm -rf ${TMP}
121     echo ""
122     echo "Tests Completed Successfully :-)"
123   fi
124 }
125
126 # Main script starts here
127
128 runtest "basic operation" 'checkit "$RSYNC -av ${FROM}/ ${TO}" ${FROM}/ ${TO}'
129
130 ln ${FROM}/pslist ${FROM}/dir
131 runtest "hard links" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
132
133 rm ${TO}/${F1}
134 runtest "one file" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
135
136 echo "extra line" >> ${TO}/${F1}
137 runtest "extra data" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
138
139 cp ${FROM}/${F1} ${TO}/ThisShouldGo
140 runtest " --delete" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
141
142 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
143 mkdir -p ${LONGDIR}
144 date > ${LONGDIR}/1
145 ls -la / > ${LONGDIR}/2
146 runtest "long paths" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
147
148 if type ssh >/dev/null 2>&1; then
149   if [ "`ssh -o'BatchMode yes' localhost echo yes 2>/dev/null`" = "yes" ]; then
150   rm -rf ${TO}
151     runtest "ssh: basic test" 'checkit "$RSYNC -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
152
153     mv ${TO}/${F1} ${TO}/ThisShouldGo
154     runtest "ssh: renamed file" 'checkit "$RSYNC --delete -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
155   else
156   printmsg "Skipping SSH tests because ssh conection to localhost not authorised"
157   fi
158 else
159   printmsg "Skipping SSH tests because ssh is not in the path"
160 fi
161
162 rm -rf ${TO}
163 mkdir -p ${FROM}2/dir/subdir
164 cp -a ${FROM}/dir/subdir/subsubdir ${FROM}2/dir/subdir
165 cp ${FROM}/dir/* ${FROM}2/dir 2>/dev/null
166 runtest "excludes" 'checkit "$RSYNC -vv -Hlrt --delete --include /dir/ --include /dir/\* --include /dir/\*/subsubdir  --include /dir/\*/subsubdir/\*\* --exclude \*\* ${FROM}/dir ${TO}" ${FROM}2/ ${TO}'
167 rm -r ${FROM}2
168
169 checkforlogs ${LOG}.?