procstat/tests: Fix flakiness by waiting for program to start

Some of the procstat tests start a program "while1" and examine the process
using procstat, but did not wait properly for it to start (kill -0 will
succeed immediately after the child process has been created).

Instead, have "while1" write something when it starts, and use a fifo to
wait for that.

PR:		233587, 233588
Reviewed by:	ngie
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D21519
This commit is contained in:
Jilles Tjoelker 2019-09-04 16:25:41 +00:00
parent 50c365c49a
commit ddc0daea20
2 changed files with 8 additions and 15 deletions

View File

@ -25,7 +25,6 @@
# $FreeBSD$ # $FreeBSD$
# #
MAX_TRIES=20
PROG_PID= PROG_PID=
PROG_PATH=$(atf_get_srcdir)/while1 PROG_PATH=$(atf_get_srcdir)/while1
@ -37,16 +36,13 @@ start_program()
PROG_COMM=while1 PROG_COMM=while1
PROG_PATH=$(atf_get_srcdir)/$PROG_COMM PROG_PATH=$(atf_get_srcdir)/$PROG_COMM
$PROG_PATH $* & mkfifo wait_for_start || atf_fail "mkfifo"
$PROG_PATH $* >wait_for_start &
PROG_PID=$! PROG_PID=$!
try=0 if ! read dummy <wait_for_start; then
while [ $try -lt $MAX_TRIES ] && ! kill -0 $PROG_PID; do atf_fail "Program did not start properly"
sleep 0.5
: $(( try += 1 ))
done
if [ $try -ge $MAX_TRIES ]; then
atf_fail "Polled for program start $MAX_TRIES tries and failed"
fi fi
rm wait_for_start
} }
atf_test_case binary_info atf_test_case binary_info
@ -78,8 +74,6 @@ command_line_arguments_head()
} }
command_line_arguments_body() command_line_arguments_body()
{ {
atf_skip "https://bugs.freebsd.org/233587"
arguments="my arguments" arguments="my arguments"
start_program $arguments start_program $arguments
@ -104,8 +98,6 @@ environment_head()
} }
environment_body() environment_body()
{ {
atf_skip "https://bugs.freebsd.org/233588"
var="MY_VARIABLE=foo" var="MY_VARIABLE=foo"
eval "export $var" eval "export $var"

View File

@ -33,7 +33,8 @@ int
main(void) main(void)
{ {
if (write(STDOUT_FILENO, "started\n", 8) != 8)
abort();
for (;;) for (;;)
usleep(100); pause();
exit(1);
} }