Make sure secrets file is not other-accessible, and owned by root if the
[rsync/rsync.git] / test.sh
1 #!/bin/sh
2
3 #
4 # Copyright (C) 1998 Philip Hands <http://www.hands.com/~phil/>
5 #
6 # This program is distributable under the terms of the GNU GPL (see COPYING)
7 #
8 # This is a simple test script that tests a few rsync
9 # features to make sure I haven't broken them before a release.
10 #
11 #
12
13 cat <<EOF
14
15 This set of tests is not completely portable. It is intended for developers
16 not for end users. You may experience failures on some platforms that
17 do not indicate a problem with rsync.
18
19 EOF
20
21 export PATH=.:$PATH
22 TMP=/tmp/rsync-test.$$
23 FROM=${TMP}/from
24 TO=${TMP}/to
25 F1=text1
26 LOG=${TMP}/log
27
28 mkdir $TMP
29 mkdir $FROM
30 mkdir $TO
31
32 # set up test data
33 touch ${FROM}/empty
34 mkdir ${FROM}/emptydir
35 ps ax > ${FROM}/pslist
36 echo -n "This file has no trailing lf" > ${FROM}/nolf
37 ln -s nolf ${FROM}/nolf-symlink
38 cat /etc/inittab /etc/services /etc/resolv.conf > ${FROM}/${F1}
39 mkdir ${FROM}/dir
40 cp ${FROM}/${F1} ${FROM}/dir
41
42 checkit() {
43   echo -n "Test $4: $5:"
44   log=${LOG}.$4
45   failed=
46   echo "Running: \"$1\""  >${log}
47   echo "">>${log}
48   eval "$1 || failed=YES"  >>${log} 2>&1
49
50   echo "-------------">>${log}
51   echo "check how the files compare with diff:">>${log}
52   echo "">>${log}
53   diff -ur $2 $3 >>${log} || failed=YES
54   echo "-------------">>${log}
55   echo "check how the directory listings compare with diff:">>${log}
56   echo "">>${log}
57   ls -la $2 > ${TMP}/ls-from
58   ls -la $3 > ${TMP}/ls-to
59   diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} || failed=YES
60   if [ -z "${failed}" ] ; then
61     echo "      done."
62     rm $log
63   else
64     echo "      FAILED.\a"
65   fi
66 }
67
68 checkforlogs() {
69   if [ -f $1 ] ; then
70     cat <<EOF
71
72 Failures have occured.
73
74 You can find the output of the tests in these files:
75   $@
76
77 Please hit <RETURN>
78 EOF
79   read input
80   else
81
82     rm -rf ${TMP}
83     echo ""
84     echo "Tests Completed Successfully :-)"
85   fi
86 }
87
88 # Main script starts here
89
90 checkit "rsync -av ${FROM}/ ${TO}" ${FROM}/ ${TO} \
91   1 "basic operation"
92
93 ln ${FROM}/pslist ${FROM}/dir
94 checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
95   2 "hard links"
96
97 rm ${TO}/${F1}
98 checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
99   3 "one file"
100
101 echo "extra line" >> ${TO}/${F1}
102 checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
103   4 "extra data"
104
105 cp ${FROM}/${F1} ${TO}/ThisShouldGo
106 checkit "rsync --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
107   5 " --delete"
108
109 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
110 mkdir -p ${LONGDIR}
111 date > ${LONGDIR}/1
112 ls -la / > ${LONGDIR}/2
113 checkit "rsync --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
114   6 "long paths"
115
116 if type ssh >/dev/null ; then
117 rm -rf ${TO}
118   checkit "rsync -avH -e ssh ${FROM}/ localhost:${TO}" ${FROM}/ ${TO} \
119     7 "ssh: basic test"
120
121   mv ${TO}/${F1} ${TO}/ThisShouldGo
122   checkit "rsync --delete -avH -e ssh ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}\
123     8 "ssh: renamed file"
124 else
125   echo ""
126   echo "**** Skipping SSH tests because ssh is not in the path\a ****"
127   echo ""
128 fi
129
130 checkforlogs ${LOG}.?