summaryrefslogtreecommitdiff
path: root/testsuite/hands.test
blob: ba1b1766d9a91d549e90c9da27645cc0dee6edd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/sh

# Copyright (C) 1998,1999 Philip Hands <phil@hands.com>
#
# This program is distributable under the terms of the GNU GPL (see COPYING)
#
# This is a simple test script that tests a few rsync
# features to make sure I haven't broken them before a release.
#
#

RSYNC="$rsync_bin"

  runtest() {
    echo $ECHO_N "Test $1: $ECHO_C"
    eval "$2"
  }
  printmsg() {
    echo ""
    echo "**** ${1}^G ****"
    echo ""  
  }

TMP=/tmp/rsync-test.$$
FROM=${TMP}/from
TO=${TMP}/to
F1=text1
LOG=${TMP}/log

mkdir $TMP
mkdir $FROM
mkdir $TO

# set up test data
touch ${FROM}/empty
mkdir ${FROM}/emptydir
ps ax > ${FROM}/pslist

# This might fail on systems that don't have -n
echo $ECHO_N "This file has no trailing lf$ECHO_C" > ${FROM}/nolf
ln -s nolf ${FROM}/nolf-symlink
cat /etc/inittab /etc/services /etc/resolv.conf > ${FROM}/${F1}
mkdir ${FROM}/dir
cp ${FROM}/${F1} ${FROM}/dir
mkdir ${FROM}/dir/subdir
mkdir ${FROM}/dir/subdir/subsubdir
ls -ltr /etc > ${FROM}/dir/subdir/subsubdir/etc-ltr-list
mkdir ${FROM}/dir/subdir/subsubdir2
ls -lt /bin > ${FROM}/dir/subdir/subsubdir2/bin-lt-list

checkit() {
  testnum=`expr 0${testnum} + 1`
  log=${LOG}.${testnum}
  failed=
  echo "Running: \"$1\""  >${log}
  echo "">>${log}
  eval "$1"  >>${log} 2>&1
  status=$?
  if [ $status != 0 ]; then
    failed="YES";
  fi
  echo "-------------">>${log}
  echo "check how the files compare with diff:">>${log}
  echo "">>${log}
  diff -ur $2 $3 >>${log} 2>&1 || failed=YES
  echo "-------------">>${log}
  echo "check how the directory listings compare with diff:">>${log}
  echo "">>${log}
  ( cd $2 ; ls -laR ) > ${TMP}/ls-from 2>>${log}
  ( cd $3 ; ls -laR ) > ${TMP}/ls-to  2>>${log}
  diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} 2>&1 || failed=YES
  if [ -z "${failed}" ] ; then
    echo "${ECHO_T}	done."
    rm $log
    return 0
  else
    if test -n "${Debian}" ; then
      cat ${log}
      rm ${log}
    else
      echo "${ECHO_T}	FAILED (test # ${testnum} status=$status)."
    fi
    return 1
  fi
}


checkforlogs() {
  # skip it if we're under debian-test
  if test -n "${Debian}" ; then return 0 ; fi

  if [ -f $1 ] ; then
    cat <<EOF

Failures have occured.

You can find the output of the tests in these files:
  $@
EOF
    exit 1
  else

    rm -rf ${TMP}
    echo ""
    echo "Tests Completed Successfully :-)"
  fi
}

# Main script starts here

runtest "basic operation" 'checkit "$RSYNC -av ${FROM}/ ${TO}" ${FROM}/ ${TO}'

ln ${FROM}/pslist ${FROM}/dir
runtest "hard links" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'

rm ${TO}/${F1}
runtest "one file" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'

echo "extra line" >> ${TO}/${F1}
runtest "extra data" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'

cp ${FROM}/${F1} ${TO}/ThisShouldGo
runtest " --delete" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'

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
mkdir -p ${LONGDIR}
date > ${LONGDIR}/1
ls -la / > ${LONGDIR}/2
runtest "long paths" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'

if type ssh >/dev/null 2>&1; then
  if [ "`ssh -o'BatchMode yes' localhost echo yes 2>/dev/null`" = "yes" ]; then
  rm -rf ${TO}
    runtest "ssh: basic test" 'checkit "$RSYNC -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'

    mv ${TO}/${F1} ${TO}/ThisShouldGo
    runtest "ssh: renamed file" 'checkit "$RSYNC --delete -avH -e ssh --rsync-path=$RSYNC ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}'
  else
  printmsg "Skipping SSH tests because ssh conection to localhost not authorised"
  fi
else
  printmsg "Skipping SSH tests because ssh is not in the path"
fi

rm -rf ${TO}
mkdir -p ${FROM}2/dir/subdir
cp -a ${FROM}/dir/subdir/subsubdir ${FROM}2/dir/subdir
cp ${FROM}/dir/* ${FROM}2/dir 2>/dev/null
runtest "excludes" 'checkit "$RSYNC -vv -Hlrt --delete --include /dir/ --include /dir/\* --include /dir/\*/subsubdir  --include /dir/\*/subsubdir/\*\* --exclude \*\* ${FROM}/dir ${TO}" ${FROM}2/ ${TO}'
rm -r ${FROM}2

checkforlogs ${LOG}.?