rsyslog/tests/imfile-symlink.sh
Rainer Gerhards 5c6b290487
testbench bugfix: imfile-symlink failed w/ parallel test run
This test sometimes failed. It used a symlinkl to a hardcoded name
rsyslog-link.*.log. This symlink was created but then disappears.
The reason is that upon (every!) test exit, rsyslog-link.*.log is
deleted. So a parallel test running the exit procedure just at the
"right" time can removed that file.

The bug is that the file name should be created using the tests's
dynamic name. This is done now.

closes https://github.com/rsyslog/rsyslog/issues/3550
2019-05-06 13:18:09 +02:00

67 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# This test creates multiple symlinks (all watched by rsyslog via wildcard)
# chained to target files via additional symlinks and checks that all files
# are recorded with correct corresponding metadata (name of symlink
# matching configuration).
# This is part of the rsyslog testbench, released under ASL 2.0
. ${srcdir:=.}/diag.sh init
. $srcdir/diag.sh check-inotify
export IMFILEINPUTFILES="10"
export IMFILELASTINPUTLINES="3"
export IMFILECHECKTIMEOUT="60"
# generate input files first. Note that rsyslog processes it as
# soon as it start up (so the file should exist at that point).
generate_conf
add_conf '
# comment out if you need more debug info:
global( debug.whitelist="on"
debug.files=["imfile.c"])
module(load="../plugins/imfile/.libs/imfile"
mode="inotify" normalizePath="off")
input(type="imfile" File="./'$RSYSLOG_DYNNAME'.input-symlink.log" Tag="file:"
Severity="error" Facility="local7" addMetadata="on")
input(type="imfile" File="./'$RSYSLOG_DYNNAME'.input.*.log" Tag="file:"
Severity="error" Facility="local7" addMetadata="on")
template(name="outfmt" type="list") {
constant(value="HEADER ")
property(name="msg" format="json")
constant(value=", filename: ")
property(name="$!metadata!filename")
constant(value=", fileoffset: ")
property(name="$!metadata!fileoffset")
constant(value="\n")
}
if $msg contains "msgnum:" then
action( type="omfile" file="'${RSYSLOG_OUT_LOG}'" template="outfmt")
'
./inputfilegen -m 1 > $RSYSLOG_DYNNAME.input-symlink.log
mkdir $RSYSLOG_DYNNAME.targets
# Start rsyslog now before adding more files
startup
for i in $(seq 2 $IMFILEINPUTFILES);
do
printf '\ncreating %s\n' $RSYSLOG_DYNNAME.targets/$i.log
./inputfilegen -m 1 -i $((i-1)) > $RSYSLOG_DYNNAME.targets/$i.log
ls -l $RSYSLOG_DYNNAME.targets/$i.log
ln -sv $RSYSLOG_DYNNAME.targets/$i.log $RSYSLOG_DYNNAME.link.$i.log
ln -sv $RSYSLOG_DYNNAME.link.$i.log $RSYSLOG_DYNNAME.input.$i.log
printf '%s generated file %s\n' "$(tb_timestamp)" "$i"
ls -l $RSYSLOG_DYNNAME.link.$i.log
# wait until this file has been processed
content_check_with_count "HEADER msgnum:000000" $i $IMFILECHECKTIMEOUT
done
./inputfilegen -m $IMFILELASTINPUTLINES > $RSYSLOG_DYNNAME.input.$((IMFILEINPUTFILES + 1)).log
ls -l $RSYSLOG_DYNNAME.input.* $RSYSLOG_DYNNAME.link.* $RSYSLOG_DYNNAME.targets
# Content check with timeout
content_check_with_count "input.11.log" $IMFILELASTINPUTLINES $IMFILECHECKTIMEOUT
shutdown_when_empty
wait_shutdown
exit_test