X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/1c3344a105f656a45f6b46e1710c3fc4ab862a9a..71daa07fb1c791c0f5eba3fc1b615df3a46441fc:/testsuite/devices.test diff --git a/testsuite/devices.test b/testsuite/devices.test index 1c34477f..6bdd4b1a 100644 --- a/testsuite/devices.test +++ b/testsuite/devices.test @@ -14,14 +14,53 @@ outfile="$scratchdir/rsync.out" # Build some hardlinks -case `id -u` in -'') ;; # If "id" failed, try to continue... -0) ;; -*) if [ -f /usr/bin/fakeroot ]; then - echo "Let's try re-running the script under fakeroot..." - exec /usr/bin/fakeroot /bin/sh $RUNSHFLAGS "$0" - fi - test_skipped "Rsync won't copy devices unless we're root" +case $0 in +*fake*) + $RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests" + RSYNC="$RSYNC --fake-super" + TLS_ARGS=--fake-super + case "`xattr 2>&1`" in + *--list:*) + mknod() { + fn="$1" + case "$2" in + p) mode=10644 ;; + c) mode=20644 ;; + b) mode=60644 ;; + esac + maj="${3:-0}" + min="${4:-0}" + touch "$fn" + xattr -s 'rsync.%stat' "$mode $maj,$min 0:0" "$fn" + } + ;; + *) + mknod() { + fn="$1" + case "$2" in + p) mode=10644 ;; + c) mode=20644 ;; + b) mode=60644 ;; + esac + maj="${3:-0}" + min="${4:-0}" + touch "$fn" + setfattr -n 'user.rsync.%stat' -v "$mode $maj,$min 0:0" "$fn" + } + ;; + esac + ;; +*) + case `id -u` in + '') ;; # If "id" failed, try to continue... + 0) ;; + *) if [ -f /usr/bin/fakeroot ]; then + echo "Let's try re-running the script under fakeroot..." + exec /usr/bin/fakeroot /bin/sh $RUNSHFLAGS "$0" + fi + test_skipped "Rsync needs root/fakeroot for device tests" + ;; + esac ;; esac @@ -29,14 +68,14 @@ esac 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" +mknod "$fromdir/char" c 41 67 || test_skipped "Can't create char device node" +mknod "$fromdir/char2" c 42 68 || test_skipped "Can't create char device node" +mknod "$fromdir/char3" c 42 69 || test_skipped "Can't create char device node" +mknod "$fromdir/block" b 42 69 || test_skipped "Can't create block device node" +mknod "$fromdir/block2" b 42 73 || test_skipped "Can't create block device node" +mknod "$fromdir/block3" b 105 73 || test_skipped "Can't create block device node" ln "$fromdir/block3" "$fromdir/block2.5" || echo "Skipping hard-linked device test..." -mkfifo "$fromdir/fifo" || test_skipped "Can't run mkfifo" +mkfifo "$fromdir/fifo" || mknod "$fromdir/fifo" p || test_skipped "Can't run mkfifo" touch -r "$fromdir/block" "$fromdir/block2" $RSYNC -ai "$fromdir/block" "$todir/block2" \ @@ -76,9 +115,8 @@ cD+++++++++ char2 cD+++++++++ char3 cS+++++++++ fifo EOT -if test ! -b "$fromdir/block2.5"; then - sed -e '/block2\.5/d' \ - <"$chkfile" >"$chkfile.new" +if test ! -r "$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"