summaryrefslogtreecommitdiffstats
path: root/tests/rcvr_fail_restore.sh
blob: 79486f10805ca32af092a051085d76ad498d23a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Copyright (C) 2011 by Rainer Gerhards
# This file is part of the rsyslog project, released  under GPLv3
echo ===============================================================================
echo \[rcvr_fail_restore.sh\]: test failed receiver restore case
source $srcdir/diag.sh init
#
# STEP1: start both instances and send 1000 messages.
# Note: receiver is instance 2, sender instance 1.
#
# start up the instances. Note that the envrionment settings can be changed to
# set instance-specific debugging parameters!
#export RSYSLOG_DEBUG="debug nostdout"
#export RSYSLOG_DEBUGLOG="log2"
source $srcdir/diag.sh startup rcvr_fail_restore_rcvr.conf 2
#export RSYSLOG_DEBUGLOG="log"
#valgrind="valgrind"
source $srcdir/diag.sh startup rcvr_fail_restore_sender.conf
# 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.
source $srcdir/diag.sh injectmsg  1 1000
source $srcdir/diag.sh 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.
#

source $srcdir/diag.sh shutdown-when-empty 2
source $srcdir/diag.sh wait-shutdown 2

source $srcdir/diag.sh injectmsg  1001 10000
./msleep 3000 # make sure some retries happen (retry interval is set to 3 second)
source $srcdir/diag.sh get-mainqueuesize
ls -l test-spool

#
# Step 3: restart receiver, wait that the sender drains its queue
#
#export RSYSLOG_DEBUGLOG="log2"
source $srcdir/diag.sh startup rcvr_fail_restore_rcvr.conf 2
echo waiting for sender to drain queue [may need a short while]
source $srcdir/diag.sh wait-queueempty
ls -l test-spool
OLDFILESIZE=$(stat -c%s test-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 continous to exist).
#
source $srcdir/diag.sh injectmsg  11001 10
source $srcdir/diag.sh wait-queueempty

# 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 test-spool
NEWFILESIZE=$(stat -c%s test-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 "*** done primary test *** now checking if DA can be restarted"
source $srcdir/diag.sh shutdown-when-empty 2
source $srcdir/diag.sh wait-shutdown 2

source $srcdir/diag.sh injectmsg  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
source $srcdir/diag.sh get-mainqueuesize
ls -l test-spool

#
# Step 6: restart receiver, wait that the sender drains its queue
#
source $srcdir/diag.sh startup rcvr_fail_restore_rcvr.conf 2
echo waiting for sender to drain queue [may need a short while]
source $srcdir/diag.sh wait-queueempty
ls -l test-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).
#
source $srcdir/diag.sh shutdown-when-empty
source $srcdir/diag.sh wait-shutdown

# now it is time to stop the receiver as well
source $srcdir/diag.sh shutdown-when-empty 2
source $srcdir/diag.sh wait-shutdown 2

# now abort test if we need to (due to filesize predicate)
if [ $NEWFILESIZE != $OLDFILESIZE ]
then
   exit 1
fi
# do the final check
source $srcdir/diag.sh seq-check 1 21010
source $srcdir/diag.sh exit