alison.schofield@ wrote:
> From: Alison Schofield <alison.schofi...@intel.com>
> 
> monitor.sh runs for 50 seconds and spends 48 of those seconds sleeping
> after sync. It sleeps for 3 seconds each time it restarts the monitor,
> and 3 seconds before checking for expected log entries, a total of
> 16 naps.
> 
> Replace the sleeps with polling that waits for a max of 3 seconds but
> does so in 30 0.1 second intervals. This leaves the current behavior
> in place but offers a shorter run time for system configs capable of
> a faster sync.
> 
> Again - I'd like to see some Tested-by's on this one because it wouldn't
> be the first time my golden environment wasn't representative of all
> environments where these tests are run. Thanks!
> 
> Signed-off-by: Alison Schofield <alison.schofi...@intel.com>
> ---
> 
> Changes in v2:
> - Poll for 3 seconds instead of removing sleep entirely (MarcH)
> - Update commit msg & log
> Link to v1: 
> https://lore.kernel.org/nvdimm/20250514014133.1431846-1-alison.schofi...@intel.com/
> 
>  test/monitor.sh | 43 ++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 40 insertions(+), 3 deletions(-)
> 
> diff --git a/test/monitor.sh b/test/monitor.sh
> index be8e24d6f3aa..61cad098d87c 100755
> --- a/test/monitor.sh
> +++ b/test/monitor.sh
> @@ -21,12 +21,45 @@ trap 'err $LINENO' ERR
>  
>  check_min_kver "4.15" || do_skip "kernel $KVER may not support monitor 
> service"
>  
> +wait_for_logfile_update()
> +{
> +     local file="$1"
> +     local prev_size="$2"
> +     local timeout=30
> +     local i=0
> +
> +     # prev_size is always zero because start_monitor truncates it.
> +     # Set and check against it anyway to future proof.
> +     while [ $i -lt $timeout ]; do
> +             local new_size=$(stat -c%s "$file" 2>/dev/null || echo 0)
> +             if [ "$new_size" -gt "$prev_size" ]; then
> +                     return 0
> +             fi
> +             sleep 0.1
> +             i=$((i+1))
> +     done
> +
> +     echo "logfile not updated within 3 seconds"
> +     err "$LINENO"

Hmm... not a fan of this open coded "wait for file to change" bash
function. This feels like something that a tool can do... (searches)

Does inotifywait fit the bill here?

https://linux.die.net/man/1/inotifywait

> +}
> +
>  start_monitor()
>  {
>       logfile=$(mktemp)
>       $NDCTL monitor -c "$monitor_conf" -l "$logfile" $1 &
>       monitor_pid=$!
> -     sync; sleep 3
> +     sync
> +     for i in {1..30}; do
> +             if ps -p "$monitor_pid" > /dev/null; then
> +                     sleep 0.1
> +                     break
> +             fi
> +             sleep 0.1
> +     done
> +     if ! ps -p "$monitor_pid" > /dev/null; then
> +             echo "monitor not ready within 3 seconds"
> +             err "$LINENO"
> +     fi

This does not make sense to. The shell got the pid from the launching
the executable. This is effectively testing that bash command execution
works. About the only use I can imagine for this is checking that the
monitor did not die early, but that should be determined by other parts
of the test.

Reply via email to