mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-02-17 21:02:25 +02:00
* tests/tail-2/assert: Avoid spurious failure due to race condition. Rather than sleeping for 1 second and crossing fingers, wait explicitly for backgrounded tail process to start. Otherwise, this test would fail under heavy load.
69 lines
1.7 KiB
Bash
Executable File
69 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# Test for assertion failure in "test".
|
|
|
|
# Copyright (C) 1999, 2000, 2004, 2006-2009 Free Software Foundation, Inc.
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
# This test fails with tail from textutils-2.0.
|
|
# It would get something like this:
|
|
# tail: tail.c:718: recheck: Assertion `valid_file_spec (f)' failed.
|
|
# Aborted
|
|
# due to a race condition in which a dev/inode pair is reused.
|
|
|
|
if test "$VERBOSE" = yes; then
|
|
set -x
|
|
tail --version
|
|
fi
|
|
|
|
# Not "expensive" per se, but sleeping for so long is annoying.
|
|
. $srcdir/test-lib.sh
|
|
very_expensive_
|
|
|
|
ok='ok ok ok'
|
|
|
|
touch a foo
|
|
tail --follow=name a foo > err 2>&1 &
|
|
tail_pid=$!
|
|
# Arrange for the tail process to die after 12 seconds.
|
|
(sleep 12; kill $tail_pid) &
|
|
|
|
echo sleeping for 7 seconds...
|
|
|
|
# Wait for the backgrounded `tail' to start before removing foo.
|
|
# Otherwise, without --retry, tail wouldn't try to open `foo' again.
|
|
while :; do
|
|
env kill -0 $tail_pid && break
|
|
echo sleep .1
|
|
sleep .1
|
|
done
|
|
|
|
rm -f foo
|
|
sleep 6
|
|
echo $ok > f
|
|
mv f foo
|
|
|
|
# echo waiting....
|
|
wait
|
|
|
|
case "`cat err`" in
|
|
*$ok) fail=0;;
|
|
*) fail=1;;
|
|
esac
|
|
|
|
test $fail = 1 && cat err
|
|
|
|
Exit $fail
|