--- embedaddon/rsync/testsuite/devices.test 2012/02/17 15:09:30 1.1 +++ embedaddon/rsync/testsuite/devices.test 2021/03/17 00:32:36 1.1.1.3 @@ -16,11 +16,11 @@ outfile="$scratchdir/rsync.out" case $0 in *fake*) - $RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests" + $RSYNC --version | grep "[, ] xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests" RSYNC="$RSYNC --fake-super" TLS_ARGS="$TLS_ARGS --fake-super" - case "`xattr 2>&1`" in - *--list:*) + case "$HOST_OS" in + darwin*) mknod() { fn="$1" case "$2" in @@ -34,6 +34,36 @@ case $0 in xattr -s 'rsync.%stat' "$mode $maj,$min 0:0" "$fn" } ;; + solaris*) + mknod() { + fn="$1" + case "$2" in + p) mode=10644 ;; + c) mode=20644 ;; + b) mode=60644 ;; + esac + maj="${3:-0}" + min="${4:-0}" + touch "$fn" + runat "$fn" "$SHELL_PATH" < rsync.%stat +EOF + } + ;; + freebsd*) + mknod() { + fn="$1" + case "$2" in + p) mode=10644 ;; + c) mode=20644 ;; + b) mode=60644 ;; + esac + maj="${3:-0}" + min="${4:-0}" + touch "$fn" + setextattr -h user "rsync.%stat" "$mode $maj,$min 0:0" "$fn" + } + ;; *) mknod() { fn="$1" @@ -51,21 +81,24 @@ case $0 in esac ;; *) - case `get_testuid` in - '') ;; # If "id" failed, try to continue... - 0) ;; - *) if [ -f /usr/bin/fakeroot ]; then + my_uid=`get_testuid` + root_uid=`get_rootuid` + if test x"$my_uid" = x; then + : # If "id" failed, try to continue... + elif test x"$my_uid" != x"$root_uid"; then + if [ -e "$FAKEROOT_PATH" ]; then echo "Let's try re-running the script under fakeroot..." - exec /usr/bin/fakeroot /bin/sh $RUNSHFLAGS "$0" + exec "$FAKEROOT_PATH" "$SHELL_PATH" $RUNSHFLAGS "$0" fi test_skipped "Rsync needs root/fakeroot for device tests" - ;; - esac + fi ;; esac # TODO: Need to test whether hardlinks are possible on this OS/filesystem +$RSYNC --version | grep "[, ] hardlink-special" >/dev/null && CAN_HLINK_SPECIAL=yes || CAN_HLINK_SPECIAL=no + mkdir "$fromdir" mkdir "$todir" mknod "$fromdir/char" c 41 67 || test_skipped "Can't create char device node" @@ -74,7 +107,11 @@ mknod "$fromdir/char3" c 42 69 || test_skipped "Can't 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..." +if test "$CAN_HLINK_SPECIAL" = yes; then + ln "$fromdir/block3" "$fromdir/block3.5" +else + echo "Skipping hard-linked device test..." +fi mkfifo "$fromdir/fifo" || mknod "$fromdir/fifo" p || test_skipped "Can't run mkfifo" # Work around time rounding/truncating issue by touching both files. touch -r "$fromdir/block" "$fromdir/block" "$fromdir/block2" @@ -110,14 +147,14 @@ cat <"$chkfile" cDc.t.$dots block cDc...$dots block2 cD$all_plus block3 -hD$all_plus block2.5 => block3 +hD$all_plus block3.5 => block3 cD$all_plus char cD$all_plus char2 cD$all_plus char3 cS$all_plus fifo EOT -if test ! -r "$fromdir/block2.5"; then - grep -v block2.5 <"$chkfile" >"$chkfile.new" +if test "$CAN_HLINK_SPECIAL" = no; then + grep -v block3.5 <"$chkfile" >"$chkfile.new" mv "$chkfile.new" "$chkfile" fi diff $diffopt "$chkfile" "$outfile" || test_fail "test 4 failed" @@ -128,7 +165,7 @@ echo "" ( cd "$todir" && rsync_ls_lR . ) > "$tmpdir/ls-to" diff $diffopt "$tmpdir/ls-from" "$tmpdir/ls-to" -if test -r "$fromdir/block2.5"; then +if test "$CAN_HLINK_SPECIAL" = yes; then set -x $RSYNC -aii --link-dest="$todir" "$fromdir/" "$chkdir/" \ | tee "$outfile" @@ -136,8 +173,8 @@ if test -r "$fromdir/block2.5"; then cd$allspace ./ hD$allspace block hD$allspace block2 -hD$allspace block2.5 hD$allspace block3 +hD$allspace block3.5 hD$allspace char hD$allspace char2 hD$allspace char3