tests: rx/perf wait for server init before client

The rx/perf test can occasionally fail due to the rxperf server not
being fully initialized before the client started. This can cause test
errors, even without changes to the rx code.

 C_TAP_VERBOSE=1 make check TESTS="rx/perf"
 ...
 rx/perf

 1..4
 ok 1 - Started rxperf server
 not ok 2 - single threaded client ran successfully
 RPC: threads	30, times	1, write bytes	1048576, read bytes...
 ok 3 - multi threaded client ran succesfully
 ok 4 - Server exited succesfully
 FAILED 2 (exit status 1)

Add a routine that waits for the rx_perf server to become available.
Loop several times trying the connection via the rx_perf client, with
a short delay between retries.  If the connection cannot be established,
fail the test.

Clean up trailing whitespace on a couple of lines.

Note: This failure was observed in an OpenAFS buildbot worker that
included a make tests, and which would occasionally fail when there was
no rx related code changes. The intermittent failure could be duplicated
on a slower virtual test system, but would not fail on a faster system.

Thanks to mmeffie@sinenomine.net for the 'wait_for_server' contribution.

Change-Id: Ie11e0d726ce287c45a677f3bb799388121aafc1e
Reviewed-on: https://gerrit.openafs.org/15676
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
This commit is contained in:
Cheyenne Wills 2024-03-15 16:24:05 -06:00 committed by Benjamin Kaduk
parent e6bc50524e
commit 6ace773fdc

View File

@ -11,6 +11,27 @@ use POSIX qw(:sys_wait_h :signal_h);
my $port = 4000;
my $rxperf = obj_path("src/tools/rxperf/rxperf");
# Wait for the server to finish initializing.
sub
wait_for_server {
my $pid = shift;
for (my $i = 0; $i < 10; $i++) {
if ($i > 0) {
sleep(1);
}
my $rc = system($rxperf, "client", "-c", "rpc", "-p", $port, "-S",
"128", "-R", "128", "-T", "1", "-H", "-N",
"-o", "/dev/null");
if ($rc == 0) {
return;
}
}
kill("TERM", $pid);
waitpid($pid, 0);
die("Unable to contact rxperf server.");
}
# Start up an rxperf server
my $pid = fork();
@ -22,6 +43,9 @@ if ($pid == -1) {
"rxperf", "server", "-p", $port, "-u", "1024", "-H", "-N");
die("Kabooom ?");
}
# Give the server some time to initialize
wait_for_server($pid);
pass("Started rxperf server");
# Start up an rxperf client, and run a test
@ -45,5 +69,3 @@ if (WIFSIGNALED($ecode) && WTERMSIG($ecode) != SIGTERM) {
} else {
pass("Server exited succesfully");
}