X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/bb21ecac5bf5cb6e586476bbc754c709f71b3252..1c60d219472b3de0080cda807b014d011e3b5ccb:/testsuite/devices.test diff --git a/testsuite/devices.test b/testsuite/devices.test index 2a6c8a85..1c34477f 100644 --- a/testsuite/devices.test +++ b/testsuite/devices.test @@ -9,6 +9,9 @@ . "$suitedir/rsync.fns" +chkfile="$scratchdir/rsync.chk" +outfile="$scratchdir/rsync.out" + # Build some hardlinks case `id -u` in @@ -16,7 +19,7 @@ case `id -u` in 0) ;; *) if [ -f /usr/bin/fakeroot ]; then echo "Let's try re-running the script under fakeroot..." - exec /usr/bin/fakeroot /bin/sh "$0" + exec /usr/bin/fakeroot /bin/sh $RUNSHFLAGS "$0" fi test_skipped "Rsync won't copy devices unless we're root" ;; @@ -25,15 +28,84 @@ esac # TODO: Need to test whether hardlinks are possible on this OS/filesystem mkdir "$fromdir" +mkdir "$todir" mknod "$fromdir/char" c 41 67 || test_skipped "Can't create char device node unless root" mknod "$fromdir/char2" c 42 68 || test_skipped "Can't create char device node unless root" mknod "$fromdir/char3" c 42 69 || test_skipped "Can't create char device node unless root" mknod "$fromdir/block" b 42 69 || test_skipped "Can't create block device node unless root" mknod "$fromdir/block2" b 42 73 || test_skipped "Can't create block device node unless root" mknod "$fromdir/block3" b 105 73 || test_skipped "Can't create block device node unless root" +ln "$fromdir/block3" "$fromdir/block2.5" || echo "Skipping hard-linked device test..." mkfifo "$fromdir/fifo" || test_skipped "Can't run mkfifo" +touch -r "$fromdir/block" "$fromdir/block2" + +$RSYNC -ai "$fromdir/block" "$todir/block2" \ + | tee "$outfile" +cat <"$chkfile" +cD+++++++++ block +EOT +diff $diffopt "$chkfile" "$outfile" || test_fail "test 1 failed" + +$RSYNC -ai "$fromdir/block2" "$todir/block" \ + | tee "$outfile" +cat <"$chkfile" +cD+++++++++ block2 +EOT +diff $diffopt "$chkfile" "$outfile" || test_fail "test 2 failed" + +sleep 1 + +$RSYNC -Di "$fromdir/block3" "$todir/block" \ + | tee "$outfile" +cat <"$chkfile" +cD..T...... block3 +EOT +diff $diffopt "$chkfile" "$outfile" || test_fail "test 3 failed" + +$RSYNC -aiHvv "$fromdir/" "$todir/" \ + | tee "$outfile" +filter_outfile +cat <"$chkfile" +.d..t...... ./ +cD..t...... block +cD block2 +cD+++++++++ block3 +hD+++++++++ block2.5 => block3 +cD+++++++++ char +cD+++++++++ char2 +cD+++++++++ char3 +cS+++++++++ fifo +EOT +if test ! -b "$fromdir/block2.5"; then + sed -e '/block2\.5/d' \ + <"$chkfile" >"$chkfile.new" + mv "$chkfile.new" "$chkfile" +fi +diff $diffopt "$chkfile" "$outfile" || test_fail "test 4 failed" + +echo "check how the directory listings compare with diff:" +echo "" +( cd "$fromdir" && rsync_ls_lR . ) > "$tmpdir/ls-from" +( cd "$todir" && rsync_ls_lR . ) > "$tmpdir/ls-to" +diff $diffopt "$tmpdir/ls-from" "$tmpdir/ls-to" -checkit "$RSYNC -aHvv \"$fromdir/\" \"$todir/\"" "$fromdir" "$todir" skip_file_diff +if test -b "$fromdir/block2.5"; then + set -x + $RSYNC -aii --link-dest="$todir" "$fromdir/" "$chkdir/" \ + | tee "$outfile" + cat <"$chkfile" +cd ./ +hD block +hD block2 +hD block2.5 +hD block3 +hD char +hD char2 +hD char3 +hS fifo +EOT + diff $diffopt "$chkfile" "$outfile" || test_fail "test 4 failed" +fi # The script would have aborted on error, so getting here means we've won. exit 0