summaryrefslogtreecommitdiffstats
path: root/tests/rcvr_fail_restore.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rcvr_fail_restore.sh')
-rwxr-xr-xtests/rcvr_fail_restore.sh168
1 files changed, 168 insertions, 0 deletions
diff --git a/tests/rcvr_fail_restore.sh b/tests/rcvr_fail_restore.sh
new file mode 100755
index 0000000..53dd891
--- /dev/null
+++ b/tests/rcvr_fail_restore.sh
@@ -0,0 +1,168 @@
+#!/bin/bash
+# Copyright (C) 2011 by Rainer Gerhards
+# This file is part of the rsyslog project, released under ASL 2.0
+. ${srcdir:=.}/diag.sh init
+skip_platform "FreeBSD" "This test does not work on FreeBSD - problems with os utility option switches"
+#
+# STEP1: start both instances and send 1000 messages.
+# Note: receiver is instance 1, sender instance 2.
+#
+# start up the instances. Note that the environment settings can be changed to
+# set instance-specific debugging parameters!
+#export RSYSLOG_DEBUG="debug nostdout"
+#export RSYSLOG_DEBUGLOG="log2"
+echo starting receiver
+generate_conf
+add_conf '
+# then SENDER sends to this port (not tcpflood!)
+module(load="../plugins/imtcp/.libs/imtcp")
+input(type="imtcp" port="0" listenPortFileName="'$RSYSLOG_DYNNAME'.tcpflood_port" )
+
+$template outfmt,"%msg:F,58:2%\n"
+:msg, contains, "msgnum:" ./'$RSYSLOG_OUT_LOG';outfmt
+'
+startup
+export PORT_RCVR="$TCPFLOOD_PORT"
+#export RSYSLOG_DEBUG="debug nostdout"
+#export RSYSLOG_DEBUGLOG="log"
+#valgrind="valgrind"
+echo starting sender
+generate_conf 2
+export TCPFLOOD_PORT="$(get_free_port)"
+add_conf '
+$WorkDirectory '$RSYSLOG_DYNNAME'.spool
+$MainMsgQueueSize 2000
+$MainMsgQueueLowWaterMark 800
+$MainMsgQueueHighWaterMark 1000
+$MainMsgQueueDequeueBatchSize 1
+$MainMsgQueueMaxFileSize 1g
+$MainMsgQueueWorkerThreads 1
+$MainMsgQueueFileName mainq
+
+# we use the shortest resume interval a) to let the test not run too long
+# and b) make sure some retries happen before the reconnect
+$ActionResumeInterval 1
+$ActionSendResendLastMsgOnReconnect on
+$ActionResumeRetryCount -1
+*.* @@127.0.0.1:'$PORT_RCVR'
+' 2
+startup 2
+# re-set params so that new instances do not thrash it...
+#unset RSYSLOG_DEBUG
+#unset RSYSLOG_DEBUGLOG
+
+# now inject the messages into instance 2. It will connect to instance 1,
+# and that instance will record the data.
+injectmsg2 1 1000
+wait_queueempty
+./msleep 1000 # let things settle down a bit
+
+#
+# Step 2: shutdown receiver, then send some more data, which then
+# needs to go into the queue.
+#
+echo step 2
+
+shutdown_when_empty
+wait_shutdown
+
+injectmsg2 1001 10000
+./msleep 3000 # make sure some retries happen (retry interval is set to 3 second)
+get_mainqueuesize 2
+ls -l ${RSYSLOG_DYNNAME}.spool
+
+#
+# Step 3: restart receiver, wait that the sender drains its queue
+$InputTCPServerRun '$PORT_RCVR'
+#
+echo step 3
+#export RSYSLOG_DEBUGLOG="log2"
+generate_conf
+add_conf '
+# then SENDER sends to this port (not tcpflood!)
+module(load="../plugins/imtcp/.libs/imtcp")
+input(type="imtcp" port="'$PORT_RCVR'")
+
+$template outfmt,"%msg:F,58:2%\n"
+:msg, contains, "msgnum:" ./'$RSYSLOG_OUT_LOG';outfmt
+'
+startup
+echo waiting for sender to drain queue [may need a short while]
+wait_queueempty 2
+ls -l ${RSYSLOG_DYNNAME}.spool
+OLDFILESIZE=$(stat -c%s ${RSYSLOG_DYNNAME}.spool/mainq.00000001)
+echo file size to expect is $OLDFILESIZE
+
+
+#
+# Step 4: send new data. Queue files are not permitted to grow now
+# (but one file continuous to exist).
+#
+echo step 4
+injectmsg2 11001 10
+wait_queueempty 2
+
+# at this point, the queue file shall not have grown. Note
+# that we MUST NOT shut down the instance right now, because it
+# would clean up the queue files! So we need to do our checks
+# first (here!).
+ls -l ${RSYSLOG_DYNNAME}.spool
+NEWFILESIZE=$(stat -c%s ${RSYSLOG_DYNNAME}.spool/mainq.00000001)
+if [ $NEWFILESIZE != $OLDFILESIZE ]
+then
+ echo file sizes do not match, expected $OLDFILESIZE, actual $NEWFILESIZE
+ echo this means that data has been written to the queue file where it
+ echo no longer should be written.
+ # abort will happen below, because we must ensure proper system shutdown
+ # HOWEVER, during actual testing it may be useful to do an exit here (so
+ # that e.g. the debug log is pointed right at the correct spot).
+ # exit 1
+fi
+
+#
+# We now do an extra test (so this is two in one ;)) to see if the DA
+# queue can be reactivated after its initial shutdown. In essence, we
+# redo steps 2 and 3.
+#
+# Step 5: stop receiver again, then send some more data, which then
+# needs to go into the queue.
+#
+echo step 5
+echo "*** done primary test *** now checking if DA can be restarted"
+shutdown_when_empty
+wait_shutdown
+
+injectmsg2 11011 10000
+sleep 1 # we need to wait, otherwise we may be so fast that the receiver
+# comes up before we have finally suspended the action
+get_mainqueuesize 2
+ls -l ${RSYSLOG_DYNNAME}.spool
+
+#
+# Step 6: restart receiver, wait that the sender drains its queue
+#
+echo step 6
+startup
+echo waiting for sender to drain queue [may need a short while]
+wait_queueempty 2
+ls -l ${RSYSLOG_DYNNAME}.spool
+
+#
+# Queue file size checks done. Now it is time to terminate the system
+# and see if everything could be received (the usual check, done here
+# for completeness, more or less as a bonus).
+#
+shutdown_when_empty 2
+wait_shutdown 2
+
+# now it is time to stop the receiver as well
+shutdown_when_empty
+wait_shutdown
+
+# now abort test if we need to (due to filesize predicate)
+if [ $NEWFILESIZE != $OLDFILESIZE ]; then
+ error_exit 1
+fi
+# do the final check
+seq_check 1 21010 -m 100
+exit_test