]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: don't wait forever on GNU/Hurd
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 12 Feb 2016 18:59:20 +0000 (10:59 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 12 Feb 2016 18:59:54 +0000 (10:59 -0800)
* tests/cp/parent-perm-race.sh: Add timeouts so that the test does
not wait forever on GNU/Hurd.  This does not fix the underlying
bug but at least lets the tests make progress.
Problem reported by Nelson H.F. Beebe in: http://bugs.gnu.org/22624
Also, check that 'cp' actually copies the data; this is a better
test anyway, and simplifies the test code.
Also, avoid unlikely race if 'pid' is set in the environment.

tests/cp/parent-perm-race.sh

index 7a737404e2f890a872d9b0e1f088c68af7e007a4..0d0841c2e8b17c2d6ca892883d5e0d7d476d29a9 100755 (executable)
@@ -26,7 +26,8 @@ umask 002
 mkdir mode ownership d || framework_failure_
 chmod g+s d 2>/dev/null # The cp test is valid either way.
 
-# Terminate any background cp process
+# Terminate any background cp process.
+pid=
 cleanup_() { kill $pid 2>/dev/null && wait $pid; }
 
 for attr in mode ownership
@@ -35,21 +36,14 @@ do
 
   # Copy a fifo's contents.  That way, we can examine d/$attr's
   # state while cp is running.
-  cp --preserve=$attr -R --copy-contents --parents $attr d & pid=$!
+  timeout 10 cp --preserve=$attr -R --copy-contents --parents $attr d & pid=$!
 
-  (
-    # Now 'cp' is reading the fifo.
-    # Check the permissions of the temporary destination
-    # directory that 'cp' has made.
-    ls -ld d/$attr >d/$attr.ls
+  # Check the permissions of the destination directory that 'cp' has made.
+  # 'ls' won't start until after 'cp' has made the destination directory
+  # $d/attr and has started to read the source file $attr/fifo.
+  timeout 10 sh -c "ls -ld d/$attr >$attr/fifo" || fail=1
 
-    # Close the fifo so that "cp" can continue.  But output first,
-    # before exiting, otherwise some shells would optimize away the file
-    # descriptor that holds the fifo open.
-    echo foo
-  ) >$attr/fifo
-
-  ls_output=$(cat d/$attr.ls) || fail=1
+  ls_output=$(cat d/$attr/fifo) || fail=1
   case $attr,$ls_output in
   ownership,d???--[-S]--[-S]* | \
   mode,d????-??-?* | \