* [PATCH nft 0/2] tests/shell: workaround for bash
@ 2023-11-27 19:15 Thomas Haller
2023-11-27 19:15 ` [PATCH nft 1/2] tests/shell: workaround lack of `wait -p` before bash 5.1 Thomas Haller
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Thomas Haller @ 2023-11-27 19:15 UTC (permalink / raw)
To: NetFilter; +Cc: Thomas Haller
RHEL8 has bash 4.4. Make some adjustments so that the test script works
there.
*** BLURB HERE ***
Thomas Haller (2):
tests/shell: workaround lack of `wait -p` before bash 5.1
tests/shell: workaround lack of $SRANDOM before bash 5.1
tests/shell/run-tests.sh | 48 ++++++++++++++++++++++++++++++++++------
1 file changed, 41 insertions(+), 7 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH nft 1/2] tests/shell: workaround lack of `wait -p` before bash 5.1 2023-11-27 19:15 [PATCH nft 0/2] tests/shell: workaround for bash Thomas Haller @ 2023-11-27 19:15 ` Thomas Haller 2023-11-27 19:15 ` [PATCH nft 2/2] tests/shell: workaround lack of $SRANDOM " Thomas Haller 2023-11-29 18:55 ` [PATCH nft 0/2] tests/shell: workaround for bash Pablo Neira Ayuso 2 siblings, 0 replies; 4+ messages in thread From: Thomas Haller @ 2023-11-27 19:15 UTC (permalink / raw) To: NetFilter; +Cc: Thomas Haller Before bash 5.1, `wait -p` is not supported. So we cannot know which child process completed. As workaround, explicitly wait for the next PID. That works, but it significantly reduces parallel execution, because a long running job blocks the queue. Signed-off-by: Thomas Haller <thaller@redhat.com> --- tests/shell/run-tests.sh | 47 ++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh index 3cde97b7ea17..f1345bb14e7c 100755 --- a/tests/shell/run-tests.sh +++ b/tests/shell/run-tests.sh @@ -30,6 +30,23 @@ array_contains() { return 1 } +array_remove_first() { + local _varname="$1" + local _needle="$2" + local _result=() + local _a + + eval "local _input=( \"\${$_varname[@]}\" )" + for _a in "${_input[@]}" ; do + if [ -n "${_needle+x}" -a "$_needle" = "$_a" ] ; then + unset _needle + else + _result+=("$_a") + fi + done + eval "$_varname="'( "${_result[@]}" )' +} + colorize_keywords() { local out_variable="$1" local color="$2" @@ -598,13 +615,14 @@ if [ ! -x "$DIFF" ] ; then DIFF=true fi +JOBS_PIDLIST_ARR=() declare -A JOBS_PIDLIST _NFT_TEST_VALGRIND_VGDB_PREFIX= cleanup_on_exit() { pids_search='' - for pid in "${!JOBS_PIDLIST[@]}" ; do + for pid in "${JOBS_PIDLIST_ARR[@]}" ; do kill -- "-$pid" &>/dev/null pids_search="$pids_search\\|\\<$pid\\>" done @@ -858,17 +876,33 @@ job_start() { return "$rc_got" } +# `wait -p` is only supported since bash 5.1 +WAIT_SUPPORTS_P=1 +[ "${BASH_VERSINFO[0]}" -le 4 -o \( "${BASH_VERSINFO[0]}" -eq 5 -a "${BASH_VERSINFO[1]}" -eq 0 \) ] && WAIT_SUPPORTS_P=0 + job_wait() { local num_jobs="$1" + local JOBCOMPLETED + local rc_got + + while [ "${#JOBS_PIDLIST_ARR[@]}" -gt 0 -a "${#JOBS_PIDLIST_ARR[@]}" -ge "$num_jobs" ] ; do + if [ "$WAIT_SUPPORTS_P" = 1 ] ; then + wait -n -p JOBCOMPLETED + rc_got="$?" + array_remove_first JOBS_PIDLIST_ARR "$JOBCOMPLETED" + else + # Without `wait -p` support, we need to explicitly wait + # for a PID. That reduces parallelism. + JOBCOMPLETED="${JOBS_PIDLIST_ARR[0]}" + JOBS_PIDLIST_ARR=( "${JOBS_PIDLIST_ARR[@]:1}" ) + wait -n "$JOBCOMPLETED" + rc_got="$?" + fi - while [ "$JOBS_N_RUNNING" -gt 0 -a "$JOBS_N_RUNNING" -ge "$num_jobs" ] ; do - wait -n -p JOBCOMPLETED - local rc_got="$?" local testfile2="${JOBS_PIDLIST[$JOBCOMPLETED]}" unset JOBS_PIDLIST[$JOBCOMPLETED] print_test_result "${JOBS_TEMPDIR["$testfile2"]}" "$testfile2" "$rc_got" - ((JOBS_N_RUNNING--)) check_kmemleak done } @@ -878,7 +912,6 @@ if [ "$NFT_TEST_SHUFFLE_TESTS" = y ] ; then fi TESTIDX=0 -JOBS_N_RUNNING=0 for testfile in "${TESTS[@]}" ; do job_wait "$NFT_TEST_JOBS" @@ -897,7 +930,7 @@ for testfile in "${TESTS[@]}" ; do pid=$! eval "$set_old_state" JOBS_PIDLIST[$pid]="$testfile" - ((JOBS_N_RUNNING++)) + JOBS_PIDLIST_ARR+=( "$pid" ) done job_wait 0 -- 2.43.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH nft 2/2] tests/shell: workaround lack of $SRANDOM before bash 5.1 2023-11-27 19:15 [PATCH nft 0/2] tests/shell: workaround for bash Thomas Haller 2023-11-27 19:15 ` [PATCH nft 1/2] tests/shell: workaround lack of `wait -p` before bash 5.1 Thomas Haller @ 2023-11-27 19:15 ` Thomas Haller 2023-11-29 18:55 ` [PATCH nft 0/2] tests/shell: workaround for bash Pablo Neira Ayuso 2 siblings, 0 replies; 4+ messages in thread From: Thomas Haller @ 2023-11-27 19:15 UTC (permalink / raw) To: NetFilter; +Cc: Thomas Haller $SRANDOM is only supported since bash 5.1. Add a fallback to $RANDOM. Signed-off-by: Thomas Haller <thaller@redhat.com> --- tests/shell/run-tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh index f1345bb14e7c..e54f8bf3e3ee 100755 --- a/tests/shell/run-tests.sh +++ b/tests/shell/run-tests.sh @@ -314,6 +314,7 @@ DO_LIST_TESTS= if [ -z "$NFT_TEST_RANDOM_SEED" ] ; then # Choose a random value. n="$SRANDOM" + [ -z "$n" ] && n="$RANDOM" else # Parse as number. n="$(strtonum "$NFT_TEST_RANDOM_SEED")" -- 2.43.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH nft 0/2] tests/shell: workaround for bash 2023-11-27 19:15 [PATCH nft 0/2] tests/shell: workaround for bash Thomas Haller 2023-11-27 19:15 ` [PATCH nft 1/2] tests/shell: workaround lack of `wait -p` before bash 5.1 Thomas Haller 2023-11-27 19:15 ` [PATCH nft 2/2] tests/shell: workaround lack of $SRANDOM " Thomas Haller @ 2023-11-29 18:55 ` Pablo Neira Ayuso 2 siblings, 0 replies; 4+ messages in thread From: Pablo Neira Ayuso @ 2023-11-29 18:55 UTC (permalink / raw) To: Thomas Haller; +Cc: NetFilter On Mon, Nov 27, 2023 at 08:15:34PM +0100, Thomas Haller wrote: > RHEL8 has bash 4.4. Make some adjustments so that the test script works > there. Applied, thanks. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-11-29 18:55 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-11-27 19:15 [PATCH nft 0/2] tests/shell: workaround for bash Thomas Haller 2023-11-27 19:15 ` [PATCH nft 1/2] tests/shell: workaround lack of `wait -p` before bash 5.1 Thomas Haller 2023-11-27 19:15 ` [PATCH nft 2/2] tests/shell: workaround lack of $SRANDOM " Thomas Haller 2023-11-29 18:55 ` [PATCH nft 0/2] tests/shell: workaround for bash Pablo Neira Ayuso
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.