Import proposed fix from upstream for

atf-sh/atf_check_test:flush_stdout_on_timeout

Many thanks for jmmv for the fix!

MFC after: 1 week
PR: 197060

Original commit message:

From 0e546407567ea858e261e72f75c5ed61e07d0ddf Mon Sep 17 00:00:00 2001
From: Julio Merino <jmmv@google.com>
Date: Tue, 17 Feb 2015 18:10:11 -0500
Subject: [PATCH] Fix atf-sh/atf_check_test:flush_stdout_on_death

The test atf-sh/atf_check_test:flush_stdout_on_timeout was flaky as it
was playing solely with time.  Fix this by making the test more robust
and rename it while we are at it: there is nothing left about "timeouts"
in this test, considering that ATF itself does not enforce deadlines
any longer.

Fixes FreeBSD PR 197060.
This commit is contained in:
Enji Cooper 2015-05-21 05:06:08 +00:00
commit da3067c138
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=283170
2 changed files with 22 additions and 14 deletions

View file

@ -164,18 +164,22 @@ equal_body()
grep '^failed: \${x} != \${y} (a != b)$' resfile
}
atf_test_case flush_stdout_on_timeout
flush_stdout_on_timeout_body()
atf_test_case flush_stdout_on_death
flush_stdout_on_death_body()
{
"$(atf_get_srcdir)/misc_helpers" -s "$(atf_get_srcdir)" atf_check_timeout \
>out 2>err &
CONTROL_FILE="$(pwd)/done" "$(atf_get_srcdir)/misc_helpers" \
-s "$(atf_get_srcdir)" atf_check_flush_stdout >out 2>err &
pid="${!}"
sleep 1
kill "${pid}"
while [ ! -f ./done ]; do
echo "Still waiting for helper to create control file"
ls
sleep 1
done
kill -9 "${pid}"
grep 'Executing command.*true' out \
|| atf_fail 'First command not in output'
grep 'Executing command.*sleep 42' out \
grep 'Executing command.*false' out \
|| atf_fail 'Second command not in output'
}
@ -187,7 +191,7 @@ atf_init_test_cases()
atf_add_test_case null_stdout
atf_add_test_case null_stderr
atf_add_test_case equal
atf_add_test_case flush_stdout_on_timeout
atf_add_test_case flush_stdout_on_death
}
# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4

View file

@ -139,16 +139,20 @@ atf_check_equal_eval_fail_body()
atf_check_equal '${x}' '${y}'
}
atf_test_case atf_check_timeout
atf_check_timeout_head()
atf_test_case atf_check_flush_stdout
atf_check_flush_stdout_head()
{
atf_set "descr" "Helper test case for the t_atf_check test program"
atf_set "timeout" 1
atf_set "timeout" "30"
}
atf_check_timeout_body()
atf_check_flush_stdout_body()
{
atf_check true
atf_check sleep 42
atf_check -s exit:1 false
touch "${CONTROL_FILE:-done}"
while :; do
sleep 1
done
}
# -------------------------------------------------------------------------
@ -281,7 +285,7 @@ atf_init_test_cases()
atf_add_test_case atf_check_equal_fail
atf_add_test_case atf_check_equal_eval_ok
atf_add_test_case atf_check_equal_eval_fail
atf_add_test_case atf_check_timeout
atf_add_test_case atf_check_flush_stdout
# Add helper tests for t_config.
atf_add_test_case config_get