Improved the daemon testing, including adding a test to ensure that
[rsync/rsync.git] / testsuite / daemon.test
index 7afe16e..113d6a5 100644 (file)
@@ -5,10 +5,10 @@
 # This program is distributable under the terms of the GNU GPL (see
 # COPYING)
 
-# This test starts up an rsync daemon on a high-numbered port using a
-# configuration file from the test directory.  I can't think of a good
-# way to choose it dynamically at the moment, so we just use 2612.  If
-# that's in use then you lose.
+# We don't really want to start the server listening, because that
+# might interfere with the security or operation of the test machine.
+# Instead we use the fake-connect feature to dynamically assign a pair
+# of ports.
 
 # Having started the server we try some basic operations against it:
 
 # checking the log file
 # password authentication
 
-# TODO: Put the common framework in a common file, so that we can have
-# subtests fail and keep going.
+. "$suitedir/rsync.fns"
+
+chkfile="$scratchdir/rsync.chk"
+outfile="$scratchdir/rsync.out"
+
+SSH="src/support/lsh --no-cd"
+DIR_REPL='s/^\(d[^ ]*\)  *[0-9][0-9]* /\1         DIR /'
+LS_REPL='s;[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9];####/##/## ##:##:##;'
+
+build_rsyncd_conf
+
+makepath "$fromdir/foo" "$fromdir/bar/baz"
+makepath "$todir"
+echo one >"$fromdir/foo/one"
+echo two >"$fromdir/bar/two"
+echo three >"$fromdir/bar/baz/three"
+
+cd "$scratchdir"
+
+ln -s test-rsyncd.conf rsyncd.conf
+
+confopt=''
+case `id -u` in
+0)
+    # Root needs to specify the config file, or it uses /etc/rsyncd.conf.
+    echo "Forcing --config=$conf"
+    confopt=" --config=$conf"
+    ;;
+esac
+
+$RSYNC -ve "$SSH" --rsync-path="$RSYNC$confopt" localhost::
+
+RSYNC_CONNECT_PROG="$RSYNC --config=$conf --daemon"
+export RSYNC_CONNECT_PROG
+
+$RSYNC -v localhost:: \
+    | tee "$outfile"
+# These have a space-padded 15-char name, then a tab, then a comment.
+sed 's/NOCOMMENT//' <<EOT >"$chkfile"
+test-from              r/o
+test-to                r/w
+test-scratch           NOCOMMENT
+EOT
+diff $diffopt "$chkfile" "$outfile" || test_fail "test 1 failed"
+
+$RSYNC -r localhost::test-hidden \
+    | sed "$DIR_REPL" | sed "$LS_REPL" \
+    | tee "$outfile"
+cat <<EOT >"$chkfile"
+drwxr-xr-x         DIR ####/##/## ##:##:## .
+drwxr-xr-x         DIR ####/##/## ##:##:## bar
+-rw-r--r--           4 ####/##/## ##:##:## bar/two
+drwxr-xr-x         DIR ####/##/## ##:##:## bar/baz
+-rw-r--r--           6 ####/##/## ##:##:## bar/baz/three
+drwxr-xr-x         DIR ####/##/## ##:##:## foo
+-rw-r--r--           4 ####/##/## ##:##:## foo/one
+EOT
+diff $diffopt "$chkfile" "$outfile" || test_fail "test 2 failed"
+
+$RSYNC -r localhost::test-from/f* \
+    | sed "$DIR_REPL" | sed "$LS_REPL" \
+    | tee "$outfile"
+cat <<EOT >"$chkfile"
+drwxr-xr-x         DIR ####/##/## ##:##:## foo
+-rw-r--r--           4 ####/##/## ##:##:## foo/one
+EOT
+diff $diffopt "$chkfile" "$outfile" || test_fail "test 3 failed"
 
-source "$suitedir/rsync.fns"
-
-# Build an appropriate configuration file
-conf="$scratchdir/test-rsyncd.conf"
-echo "building configuration $conf"
-
-port=2612
-pidfile="$scratchdir/rsyncd.pid"
-logfile="$scratchdir/rsyncd.log"
-
-cat >$conf <<EOF
-# rsyncd configuration file autogenerated by $0
-
-pid file = $pidfile
-use chroot = no
-hosts allow = localhost, 127.0.0.1
-log file = $logfile
-
-[test-from] = $scratchdir/daemon-from/
-       read only = yes
-
-[test-to] = $scratchdir/daemon-to/
-       read only = no
-
-EOF
-
-
-
-echo starting daemon
-$rsync_bin --daemon --port $port --config $conf
-sleep 2
-pid=`cat "$pidfile"`
-echo rsyncd running as process $pid
-
-
-# We need to make sure that we always kill rsync, even if there's an
-# error.  Otherwise it might hang around, and be insecure or at any
-# rate keep the port bound and prevent the tests running in the
-# future.
-
-trap "echo killing off process $pid; kill $pid" EXIT