#!/bin/bash
# added 2025-02-27 by RGerhards, released under ASL 2.0
# This checks primarily that impstats and imtcp work together. There is little
# we can tell about the actual stats.
. ${srcdir:=.}/diag.sh init
export NUM_WORKERS=${NUM_WORKERS:-4}
export NUMMESSAGES=40000
export QUEUE_EMPTY_CHECK_FUNC=wait_file_lines
export STATSFILE="$RSYSLOG_DYNNAME.stats"
generate_conf
add_conf '
module(load="../plugins/imtcp/.libs/imtcp")
module(load="../plugins/impstats/.libs/impstats" log.file="'$STATSFILE'" interval="1")

input(type="imtcp" address="127.0.0.1" name="pstats-test" port="0" listenPortFileName="'$RSYSLOG_DYNNAME'.tcpflood_port"
	workerthreads="'$NUM_WORKERS'")

template(name="outfmt" type="string" string="%msg:F,58:2%\n")
:msg, contains, "msgnum:" action(type="omfile" template="outfmt"
			         file="'$RSYSLOG_OUT_LOG'")
'
startup
tcpflood -m $NUMMESSAGES
echo sleeping 2secs to ensure we have at least one stats interval
sleep 2
shutdown_when_empty
wait_shutdown

cat -n $STATSFILE | grep 'w./pstats-test'
NUM_STATS=$(grep 'w./pstats-test' "$STATSFILE" | wc -l)
if [ "$NUM_WORKERS" -gt 1 ]; then
    EXPECTED_COUNT=$NUM_WORKERS
else
    EXPECTED_COUNT=0
fi
# Check if the count matches NUM_WORKERS
if [ "$EXPECTED_COUNT" -gt 0 ]; then
    if [ "$NUM_STATS" -le "$EXPECTED_COUNT" ]; then
        echo "ERROR: Expected at most $EXPECTED_COUNT lines, but found $NUM_STATS in pstats"
        error_exit 1
    fi
else
    if [ "$NUM_STATS" -ne "$EXPECTED_COUNT" ]; then
        echo "ERROR: Expected $EXPECTED_COUNT lines, but found $NUM_STATS in pstats"
        error_exit 1
    fi
fi

seq_check
exit_test
