summaryrefslogtreecommitdiff
path: root/tests/cp
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2016-02-12 10:59:20 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2016-02-12 10:59:54 -0800
commit632eda520f7cf49d9d1662835c7c37e17033e128 (patch)
tree98c84882401357a94af65e70bbd9a080272df542 /tests/cp
parent62e7af0326786a7dec91d982238948eddab9d6af (diff)
downloadcoreutils-632eda520f7cf49d9d1662835c7c37e17033e128.tar.xz
tests: don't wait forever on GNU/Hurd
* 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.
Diffstat (limited to 'tests/cp')
-rwxr-xr-xtests/cp/parent-perm-race.sh22
1 files changed, 8 insertions, 14 deletions
diff --git a/tests/cp/parent-perm-race.sh b/tests/cp/parent-perm-race.sh
index 7a737404e..0d0841c2e 100755
--- a/tests/cp/parent-perm-race.sh
+++ b/tests/cp/parent-perm-race.sh
@@ -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????-??-?* | \