test/lib: Wait on iperf3 clients to be done, then send SIGINT to servers

An iperf3 client might fail to send the control message indicating
the end of the test, if the kernel buffer doesn't accept it, and exit
without having sent it, as the control socket is non-blocking. Should
this happen, the server will just wait forever for this message,
instead of terminating.

Restore some of the behaviour that went away with the
"test: Rewrite test_iperf3" patch: instead of waiting on servers to
terminate, wait on the clients. When they are done, wait 2 seconds,
and then send SIGINT to the servers, which make them still write
out the JSON report before terminating.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
Stefano Brivio 2022-09-21 01:00:39 +02:00
parent 119bb265a3
commit 9f8b783d4a

View file

@ -32,13 +32,11 @@ test_iperf3() {
__time="${1}"; shift __time="${1}"; shift
pane_or_context_run_bg "${__sctx}" \ pane_or_context_run_bg "${__sctx}" \
'(' \
'for i in $(seq 0 '${__procs}'); do' \ 'for i in $(seq 0 '${__procs}'); do' \
' iperf3 -s1J -p'${__port}' -i'${__time} \ ' (iperf3 -s1J -p'${__port}' -i'${__time} \
' > s${i}.json &' \ ' > s${i}.json) &' \
' done;' \ ' echo $! > s${i}.pid &' \
' wait' \ 'done' \
')'
sleep 1 # Wait for server to be ready sleep 1 # Wait for server to be ready
@ -51,7 +49,9 @@ test_iperf3() {
' wait' \ ' wait' \
')' ')'
pane_or_context_wait "${__sctx}" # If client fails to deliver control message, tell server we're done
pane_or_context_run "${__sctx}" \
'sleep 2; kill -INT $(cat s*.pid); rm s*.pid'
__jval=".end.sum_received.bits_per_second" __jval=".end.sum_received.bits_per_second"
for __opt in ${@}; do for __opt in ${@}; do