Split code to generate "rwx-----" strings into lib/permstring.c so it
[rsync/rsync.git] / test.sh
diff --git a/test.sh b/test.sh
index 51f73df..f74471c 100755 (executable)
--- a/test.sh
+++ b/test.sh
@@ -1,7 +1,6 @@
 #!/bin/sh
 
 #!/bin/sh
 
-#
-# Copyright (C) 1998 Philip Hands <http://www.hands.com/~phil/>
+# Copyright (C) 1998,1999 Philip Hands <phil@hands.com>
 #
 # This program is distributable under the terms of the GNU GPL (see COPYING)
 #
 #
 # This program is distributable under the terms of the GNU GPL (see COPYING)
 #
@@ -10,7 +9,15 @@
 #
 #
 
 #
 #
 
-cat <<EOF
+# check if we are running under debian-test, and change behaviour to suit
+if test -n "${DEBIANTEST_LIB}" ; then
+  # make sure rsync is installed
+  test -e /usr/bin/rsync || exit 0
+  
+  . ${DEBIANTEST_LIB}/functions.sh
+  Debian=1
+else
+  cat <<EOF
 
 This set of tests is not completely portable. It is intended for developers
 not for end users. You may experience failures on some platforms that
 
 This set of tests is not completely portable. It is intended for developers
 not for end users. You may experience failures on some platforms that
@@ -18,7 +25,19 @@ do not indicate a problem with rsync.
 
 EOF
 
 
 EOF
 
-export PATH=.:$PATH
+RSYNC=`pwd`/rsync
+
+  runtest() {
+    echo -n "Test $1: "
+    eval "$2"
+  }
+  printmsg() {
+    echo ""
+    echo "**** ${1}^G ****"
+    echo ""  
+  }
+fi
+
 TMP=/tmp/rsync-test.$$
 FROM=${TMP}/from
 TO=${TMP}/to
 TMP=/tmp/rsync-test.$$
 FROM=${TMP}/from
 TO=${TMP}/to
@@ -35,37 +54,60 @@ mkdir ${FROM}/emptydir
 ps ax > ${FROM}/pslist
 echo -n "This file has no trailing lf" > ${FROM}/nolf
 ln -s nolf ${FROM}/nolf-symlink
 ps ax > ${FROM}/pslist
 echo -n "This file has no trailing lf" > ${FROM}/nolf
 ln -s nolf ${FROM}/nolf-symlink
-cat /etc/inittab /etc/services /etc/resolv.conf > ${FROM}/${F1}
+
+# Gather some random text.  We need files that will exist and be
+# publicly readable on all platforms: hopefully this will work.
+cat /etc/*tab /etc/services /etc/*.conf /etc/*rc > ${FROM}/${F1}
+
 mkdir ${FROM}/dir
 mkdir ${FROM}/dir
-cp ${FROM}/${F1} ${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() {
 
 checkit() {
-  echo -n "Test $4: $5:"
-  log=${LOG}.$4
+  testnum=`expr 0${testnum} + 1`
+  log=${LOG}.${testnum}
   failed=
   echo "Running: \"$1\""  >${log}
   echo "">>${log}
   failed=
   echo "Running: \"$1\""  >${log}
   echo "">>${log}
-  eval "$1 || failed=YES"  >>${log} 2>&1
-
+  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}
   echo "-------------">>${log}
   echo "check how the files compare with diff:">>${log}
   echo "">>${log}
-  diff -ur $2 $3 >>${log} || failed=YES
+  diff -ur $2 $3 >>${log} 2>&1 || failed=YES
   echo "-------------">>${log}
   echo "check how the directory listings compare with diff:">>${log}
   echo "">>${log}
   echo "-------------">>${log}
   echo "check how the directory listings compare with diff:">>${log}
   echo "">>${log}
-  ls -la $2 > ${TMP}/ls-from
-  ls -la $3 > ${TMP}/ls-to
-  diff -u ${TMP}/ls-from ${TMP}/ls-to >>${log} || failed=YES
+  ( 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
   if [ -z "${failed}" ] ; then
-    echo "     done."
+    test -z "${Debian}" && echo "      done."
     rm $log
     rm $log
+    return 0
   else
   else
-    echo "     FAILED.\a"
+    if test -n "${Debian}" ; then
+      cat ${log}
+      rm ${log}
+    else
+      echo "   FAILED (test # ${testnum} status=$status).\a"
+    fi
+    return 1
   fi
 }
 
   fi
 }
 
+
 checkforlogs() {
 checkforlogs() {
+  # skip it if we're under debian-test
+  if test -n "${Debian}" ; then return 0 ; fi
+
   if [ -f $1 ] ; then
     cat <<EOF
 
   if [ -f $1 ] ; then
     cat <<EOF
 
@@ -87,44 +129,45 @@ EOF
 
 # Main script starts here
 
 
 # Main script starts here
 
-checkit "rsync -av ${FROM}/ ${TO}" ${FROM}/ ${TO} \
-  1 "basic operation"
+runtest "basic operation" 'checkit "$RSYNC -av ${FROM}/ ${TO}" ${FROM}/ ${TO}'
 
 ln ${FROM}/pslist ${FROM}/dir
 
 ln ${FROM}/pslist ${FROM}/dir
-checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
-  2 "hard links"
+runtest "hard links" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
 
 rm ${TO}/${F1}
 
 rm ${TO}/${F1}
-checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
-  3 "one file"
+runtest "one file" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
 
 echo "extra line" >> ${TO}/${F1}
 
 echo "extra line" >> ${TO}/${F1}
-checkit "rsync -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
-  4 "extra data"
+runtest "extra data" 'checkit "$RSYNC -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
 
 cp ${FROM}/${F1} ${TO}/ThisShouldGo
 
 cp ${FROM}/${F1} ${TO}/ThisShouldGo
-checkit "rsync --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
-  5 " --delete"
+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
 
 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
-checkit "rsync --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO} \
-  6 "long paths"
+runtest "long paths" 'checkit "$RSYNC --delete -avH ${FROM}/ ${TO}" ${FROM}/ ${TO}'
 
 
-if type ssh >/dev/null ; then
-rm -rf ${TO}
-  checkit "rsync -avH -e ssh ${FROM}/ localhost:${TO}" ${FROM}/ ${TO} \
-    7 "ssh: basic test"
+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
-  checkit "rsync --delete -avH -e ssh ${FROM}/ localhost:${TO}" ${FROM}/ ${TO}\
-    8 "ssh: renamed file"
+    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
 else
-  echo ""
-  echo "**** Skipping SSH tests because ssh is not in the path\a ****"
-  echo ""
+  printmsg "Skipping SSH tests because ssh is not in the path"
 fi
 
 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}.?
 checkforlogs ${LOG}.?