Skip to content

Commit

Permalink
procstat/tests: Fix flakiness by waiting for program to start
Browse files Browse the repository at this point in the history
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
  • Loading branch information
jillest committed Sep 4, 2019
1 parent 50c365c commit ddc0dae
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 15 deletions.
18 changes: 5 additions & 13 deletions usr.bin/procstat/tests/procstat_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
# $FreeBSD$
#

MAX_TRIES=20
PROG_PID=
PROG_PATH=$(atf_get_srcdir)/while1

Expand All @@ -37,16 +36,13 @@ start_program()
PROG_COMM=while1
PROG_PATH=$(atf_get_srcdir)/$PROG_COMM

$PROG_PATH $* &
mkfifo wait_for_start || atf_fail "mkfifo"
$PROG_PATH $* >wait_for_start &
PROG_PID=$!
try=0
while [ $try -lt $MAX_TRIES ] && ! kill -0 $PROG_PID; do
sleep 0.5
: $(( try += 1 ))
done
if [ $try -ge $MAX_TRIES ]; then
atf_fail "Polled for program start $MAX_TRIES tries and failed"
if ! read dummy <wait_for_start; then
atf_fail "Program did not start properly"
fi
rm wait_for_start
}

atf_test_case binary_info
Expand Down Expand Up @@ -78,8 +74,6 @@ command_line_arguments_head()
}
command_line_arguments_body()
{
atf_skip "https://bugs.freebsd.org/233587"

arguments="my arguments"

start_program $arguments
Expand All @@ -104,8 +98,6 @@ environment_head()
}
environment_body()
{
atf_skip "https://bugs.freebsd.org/233588"

var="MY_VARIABLE=foo"
eval "export $var"

Expand Down
5 changes: 3 additions & 2 deletions usr.bin/procstat/tests/while1.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ int
main(void)
{

if (write(STDOUT_FILENO, "started\n", 8) != 8)
abort();
for (;;)
usleep(100);
exit(1);
pause();
}

0 comments on commit ddc0dae

Please sign in to comment.