added --backup-dir option from Bob Edwards
[rsync/rsync.git] / test.sh
... / ...
CommitLineData
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
13if 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
19else
20 cat <<EOF
21
22This set of tests is not completely portable. It is intended for developers
23not for end users. You may experience failures on some platforms that
24do not indicate a problem with rsync.
25
26EOF
27 export PATH=.:$PATH
28 runtest() {
29 echo -n "Test $1: "
30 eval "$2"
31 }
32 printmsg() {
33 echo ""
34 echo "**** ${1}^G ****"
35 echo ""
36 }
37fi
38
39TMP=/tmp/rsync-test.$$
40FROM=${TMP}/from
41TO=${TMP}/to
42F1=text1
43LOG=${TMP}/log
44
45mkdir $TMP
46mkdir $FROM
47mkdir $TO
48
49# set up test data
50touch ${FROM}/empty
51mkdir ${FROM}/emptydir
52ps ax > ${FROM}/pslist
53echo -n "This file has no trailing lf" > ${FROM}/nolf
54ln -s nolf ${FROM}/nolf-symlink
55cat /etc/inittab /etc/services /etc/resolv.conf > ${FROM}/${F1}
56mkdir ${FROM}/dir
57cp ${FROM}/${F1} ${FROM}/dir
58mkdir ${FROM}/dir/subdir
59mkdir ${FROM}/dir/subdir/subsubdir
60ls -ltr /etc > ${FROM}/dir/subdir/subsubdir/etc-ltr-list
61mkdir ${FROM}/dir/subdir/subsubdir2
62ls -lt /bin > ${FROM}/dir/subdir/subsubdir2/bin-lt-list
63
64checkit() {
65 testnum=`expr 0${testnum} + 1`
66 log=${LOG}.${testnum}
67 failed=
68 echo "Running: \"$1\"" >${log}
69 echo "">>${log}
70 eval "$1 || failed=YES" >>${log} 2>&1
71
72 echo "-------------">>${log}
73 echo "check how the files compare with diff:">>${log}
74 echo "">>${log}
75 diff -ur $2 $3 >>${log} 2>&1 || failed=YES
76 echo "-------------">>${log}
77 echo "check how the directory listings compare with diff:">>${log}
78 echo "">>${log}
79 ( cd $2 ; ls -laR ) > ${TMP}/ls-from 2>>${log}
80 ( cd $3 ; ls -laR ) > ${TMP}/ls-to 2>>${log}
81 diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} 2>&1 || failed=YES
82 if [ -z "${failed}" ] ; then
83 test -z "${Debian}" && echo " done."
84 rm $log
85 return 0
86 else
87 if test -n "${Debian}" ; then
88 cat ${log}
89 rm ${log}
90 else
91 echo " FAILED (test # ${testnum}).\a"
92 fi
93 return 1
94 fi
95}
96
97
98checkforlogs() {
99 # skip it if we're under debian-test
100 if test -n "${Debian}" ; then return 0 ; fi
101
102 if [ -f $1 ] ; then
103 cat <<EOF
104
105Failures have occured.
106
107You can find the output of the tests in these files:
108 $@
109
110Please hit <RETURN>
111EOF
112 read input
113 else
114
115 rm -rf ${TMP}
116 echo ""
117 echo "Tests Completed Successfully :-)"
118 fi
119}
120
121# Main script starts here
122
123runtest "basic operation" 'checkit "rsync -av ${FROM}/ ${TO}" ${FROM}/ ${TO}'
124
125ln ${FROM}/pslist ${FROM}/dir
126runtest "hard links" 'checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
127
128rm ${TO}/${F1}
129runtest "one file" 'checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
130
131echo "extra line" >> ${TO}/${F1}
132runtest "extra data" 'checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
133
134cp ${FROM}/${F1} ${TO}/ThisShouldGo
135runtest " --delete" 'checkit "rsync --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
136
137LONGDIR=${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
138mkdir -p ${LONGDIR}
139date > ${LONGDIR}/1
140ls -la / > ${LONGDIR}/2
141runtest "long paths" 'checkit "rsync --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
142
143if type ssh >/dev/null 2>&1; then
144 if [ "`ssh -o'BatchMode yes' localhost echo yes 2>/dev/null`" = "yes" ]; then
145 rm -rf ${TO}
146 runtest "ssh: basic test" 'checkit "rsync -avH -e ssh ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
147
148 mv ${TO}/${F1} ${TO}/ThisShouldGo
149 runtest "ssh: renamed file" 'checkit "rsync --delete -avH -e ssh ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
150 else
151 printmsg "Skipping SSH tests because ssh conection to localhost not authorised"
152 fi
153else
154 printmsg "Skipping SSH tests because ssh is not in the path"
155fi
156
157rm -rf ${TO}
158mkdir -p ${FROM}2/dir/subdir
159cp -a ${FROM}/dir/subdir/subsubdir ${FROM}2/dir/subdir
160cp ${FROM}/dir/* ${FROM}2/dir 2>/dev/null
161runtest "excludes" 'checkit "rsync -vv -Hlrt --delete --include /dir/ --include /dir/\* --include /dir/\*/subsubdir --include /dir/\*/subsubdir/\*\* --exclude \*\* ${FROM}/dir ${TO}" ${FROM}2/ ${TO}'
162rm -r ${FROM}2
163
164checkforlogs ${LOG}.?