Fix copyright.
[rsync/rsync.git] / test.sh
CommitLineData
d3394de1 1#!/bin/sh
ddddf27b 2
c8313794 3# Copyright (C) 1998,1999 Philip Hands <phil@hands.com>
ddddf27b
AT
4#
5# This program is distributable under the terms of the GNU GPL (see COPYING)
6#
5806b30f 7# This is a simple test script that tests a few rsync
ddddf27b
AT
8# features to make sure I haven't broken them before a release.
9#
10#
5806b30f 11
c8313794
AT
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
8c3b0473
AT
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
8b35435f
AT
27
28RSYNC=`pwd`/rsync
29
c8313794
AT
30 runtest() {
31 echo -n "Test $1: "
32 eval "$2"
33 }
34 printmsg() {
35 echo ""
36 echo "**** ${1}^G ****"
37 echo ""
38 }
39fi
8c3b0473 40
5806b30f 41TMP=/tmp/rsync-test.$$
ddddf27b
AT
42FROM=${TMP}/from
43TO=${TMP}/to
44F1=text1
45LOG=${TMP}/log
5806b30f
AT
46
47mkdir $TMP
ddddf27b
AT
48mkdir $FROM
49mkdir $TO
50
51# set up test data
52touch ${FROM}/empty
53mkdir ${FROM}/emptydir
54ps ax > ${FROM}/pslist
55echo -n "This file has no trailing lf" > ${FROM}/nolf
56ln -s nolf ${FROM}/nolf-symlink
6a46226b
MP
57
58# Gather some random text. We need files that will exist and be
59# publicly readable on all platforms: hopefully this will work.
60cat /etc/*tab /etc/services /etc/*.conf /etc/*rc > ${FROM}/${F1}
61
ddddf27b 62mkdir ${FROM}/dir
6a46226b 63cp ${FROM}/${F1} ${FROM}/dir/
c8313794
AT
64mkdir ${FROM}/dir/subdir
65mkdir ${FROM}/dir/subdir/subsubdir
66ls -ltr /etc > ${FROM}/dir/subdir/subsubdir/etc-ltr-list
67mkdir ${FROM}/dir/subdir/subsubdir2
68ls -lt /bin > ${FROM}/dir/subdir/subsubdir2/bin-lt-list
ddddf27b
AT
69
70checkit() {
c8313794
AT
71 testnum=`expr 0${testnum} + 1`
72 log=${LOG}.${testnum}
ddddf27b
AT
73 failed=
74 echo "Running: \"$1\"" >${log}
75 echo "">>${log}
bd36966b
AT
76 eval "$1" >>${log} 2>&1
77 status=$?
78 if [ $status != 0 ]; then
79 failed="YES";
80 fi
ddddf27b
AT
81 echo "-------------">>${log}
82 echo "check how the files compare with diff:">>${log}
83 echo "">>${log}
c8313794 84 diff -ur $2 $3 >>${log} 2>&1 || failed=YES
ddddf27b
AT
85 echo "-------------">>${log}
86 echo "check how the directory listings compare with diff:">>${log}
87 echo "">>${log}
c8313794
AT
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
ddddf27b 91 if [ -z "${failed}" ] ; then
c8313794 92 test -z "${Debian}" && echo " done."
ddddf27b 93 rm $log
c8313794 94 return 0
ddddf27b 95 else
c8313794
AT
96 if test -n "${Debian}" ; then
97 cat ${log}
98 rm ${log}
99 else
bd36966b 100 echo " FAILED (test # ${testnum} status=$status).\a"
c8313794
AT
101 fi
102 return 1
ddddf27b
AT
103 fi
104}
105
c8313794 106
ddddf27b 107checkforlogs() {
c8313794
AT
108 # skip it if we're under debian-test
109 if test -n "${Debian}" ; then return 0 ; fi
110
ddddf27b
AT
111 if [ -f $1 ] ; then
112 cat <<EOF
113
114Failures have occured.
115
116You can find the output of the tests in these files:
117 $@
118
119Please hit <RETURN>
120EOF
121 read input
122 else
5806b30f 123
ddddf27b
AT
124 rm -rf ${TMP}
125 echo ""
126 echo "Tests Completed Successfully :-)"
127 fi
5806b30f
AT
128}
129
ddddf27b
AT
130# Main script starts here
131
8b35435f 132runtest "basic operation" 'checkit "$RSYNC -av ${FROM}/ ${TO}" ${FROM}/ ${TO}'
ddddf27b
AT
133
134ln ${FROM}/pslist ${FROM}/dir
8b35435f 135runtest "hard links" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
ddddf27b
AT
136
137rm ${TO}/${F1}
8b35435f 138runtest "one file" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
ddddf27b
AT
139
140echo "extra line" >> ${TO}/${F1}
8b35435f 141runtest "extra data" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
ddddf27b
AT
142
143cp ${FROM}/${F1} ${TO}/ThisShouldGo
8b35435f 144runtest " --delete" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
ddddf27b 145
35f69d8a
AT
146LONGDIR=${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
147mkdir -p ${LONGDIR}
148date > ${LONGDIR}/1
149ls -la / > ${LONGDIR}/2
8b35435f 150runtest "long paths" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
35f69d8a 151
c8313794
AT
152if 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}
8b35435f 155 runtest "ssh: basic test" 'checkit "$RSYNC -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
ddddf27b 156
c8313794 157 mv ${TO}/${F1} ${TO}/ThisShouldGo
8b35435f 158 runtest "ssh: renamed file" 'checkit "$RSYNC --delete -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
c8313794
AT
159 else
160 printmsg "Skipping SSH tests because ssh conection to localhost not authorised"
161 fi
ddddf27b 162else
c8313794 163 printmsg "Skipping SSH tests because ssh is not in the path"
ddddf27b
AT
164fi
165
c8313794
AT
166rm -rf ${TO}
167mkdir -p ${FROM}2/dir/subdir
168cp -a ${FROM}/dir/subdir/subsubdir ${FROM}2/dir/subdir
a2edb26c 169cp ${FROM}/dir/* ${FROM}2/dir 2>/dev/null
8b35435f 170runtest "excludes" 'checkit "$RSYNC -vv -Hlrt --delete --include /dir/ --include /dir/\* --include /dir/\*/subsubdir --include /dir/\*/subsubdir/\*\* --exclude \*\* ${FROM}/dir ${TO}" ${FROM}2/ ${TO}'
c8313794
AT
171rm -r ${FROM}2
172
ddddf27b 173checkforlogs ${LOG}.?