tests: cp/perm (usually not run) was failing on systems with SELinux
authorJim Meyering <meyering@redhat.com>
Thu, 24 Apr 2008 10:43:20 +0000 (12:43 +0200)
committerJim Meyering <meyering@redhat.com>
Sun, 27 Apr 2008 19:31:32 +0000 (21:31 +0200)
* tests/cp/perm: Use stat to get the permission string, not ls.
This test was run only when RUN_VERY_EXPENSIVE_TESTS=yes was set
in the environment.  It would fail on SELinux-enable systems
because ls-generated permission strings would not match, e.g.,
"test _-rw-r--r--+ = _-rw-r--r--" would fail.

tests/cp/perm

index b24221f..b482c17 100755 (executable)
@@ -41,9 +41,7 @@ for u in 31 37 2; do
          for o_perm in r w x rw wx xr rwx; do
            touch src || exit 1
            chmod u=r,g=rx,o= src || exit 1
-           set _ `ls -l src`
-           shift
-           expected_perms=$1
+           expected_perms=$(stat --format=%A src)
            rm -f dest
            test $existing_dest = yes && {
              touch dest || exit 1
@@ -52,8 +50,7 @@ for u in 31 37 2; do
            $cmd $force src dest || exit 1
            test "$cmd" = mv && test -f src && exit 1
            test "$cmd" = cp && { test -f src || exit 1; }
-           set _ `ls -l dest`
-           shift
+           actual_perms=$(stat --format=%A dest)
 
            case "$cmd:$force:$existing_dest" in
              cp:*:yes)
@@ -68,7 +65,7 @@ for u in 31 37 2; do
                  expected_perms=`echo $expected_perms|sed 's/..\(..\).$/--\1-/'`
                ;;
            esac
-           test _$1 = _$expected_perms || exit 1
+           test _$actual_perms = _$expected_perms || exit 1
            # Perform only one iteration when there's no existing destination.
            test $existing_dest = no && break 3
          done