rsyslog/tests/omhttp-batch-retry-metadata.sh
Rainer Gerhards 48d8a61fa7
testbench: reduce flakiness for omhttp-batch-retry-metadata.sh test
The test results were not deterministic. Sometimes it passed, sometimes
it failed. The omhttp-validate-response.py script tried to parse the
json input line by line, but sometimes the message and response fields
are on separate lines, thus it failed to parse. This is the case
for both files used to control the checking.

This patch updates the check program so that it reads in complete
lines when parsing fails, thus removing this condition for flakiness.

HOWEVER, after doing so the test still sometimes fails. This may
point into a problem with the contributed omhttp module. Unfortunately,
I do not have enough insight into that module (nor time) to try to
address the root cause.

closes https://github.com/rsyslog/rsyslog/issues/5439
2025-01-27 15:33:19 +01:00

91 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# This file is part of the rsyslog project, released under ASL 2.0
# Starting actual testbench
. ${srcdir:=.}/diag.sh init
export NUMMESSAGES=50000
port="$(get_free_port)"
omhttp_start_server $port --fail-every 100 --fail-with 207
generate_conf
add_conf '
module(load="../contrib/omhttp/.libs/omhttp")
main_queue(queue.dequeueBatchSize="2048")
template(name="tpl" type="string"
string="{\"msgnum\":\"%msg:F,58:2%\"}")
# Echo message as-is for retry
template(name="tpl_echo" type="string" string="%msg%\n")
# Echo response as-is for retry
template(name="tpl_response" type="string" string="{ \"message\": %msg%, \"response\": %$!omhttp!response% }\n")
ruleset(name="ruleset_omhttp_retry") {
#action(type="omfile" file="'$RSYSLOG_DYNNAME/omhttp.message.log'" template="tpl_echo")
# log the response
action(type="omfile" file="'$RSYSLOG_DYNNAME/omhttp.response.log'" template="tpl_response")
action(
name="action_omhttp"
type="omhttp"
errorfile="'$RSYSLOG_DYNNAME/omhttp.error.log'"
template="tpl_echo"
server="localhost"
serverport="'$port'"
restpath="my/endpoint"
batch="on"
batch.maxsize="100"
batch.format="kafkarest"
httpretrycodes=["207","500"]
retry="on"
retry.ruleset="ruleset_omhttp_retry"
retry.addmetadata="on"
# Auth
usehttps="off"
) & stop
}
ruleset(name="ruleset_omhttp") {
action(
name="action_omhttp"
type="omhttp"
errorfile="'$RSYSLOG_DYNNAME/omhttp.error.log'"
template="tpl"
server="localhost"
serverport="'$port'"
restpath="my/endpoint"
batch="on"
batch.maxsize="100"
batch.format="kafkarest"
httpretrycodes=["207", "500"]
retry="on"
retry.ruleset="ruleset_omhttp_retry"
retry.addmetadata="on"
# Auth
usehttps="off"
) & stop
}
if $msg contains "msgnum:" then
call ruleset_omhttp
'
startup
injectmsg
shutdown_when_empty
wait_shutdown
omhttp_get_data $port my/endpoint kafkarest
omhttp_stop_server
seq_check
cat -n ${RSYSLOG_DYNNAME}/omhttp.response.log
omhttp_validate_metadata_response
exit_test