summaryrefslogtreecommitdiffstats
path: root/systemtest/scripts/test_error-par.sh
blob: 748d285ea6eee1cc5d54ad27ffd53eaed87eeca4 (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
123
124
125
126
127
128
129
130
#!/bin/bash
#
# This file is part of rasdaman community.
#
# Rasdaman community is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Rasdaman community is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with rasdaman community.  If not, see <http://www.gnu.org/licenses/>.
#
# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
# rasdaman GmbH.
#
# For more information please see <http://www.rasdaman.org>
# or contact Peter Baumann via <baumann@rasdaman.com>.
# test_errors-par.sh - test multi-server availability
#
# SYNOPSIS:
# test_errors-par.sh
#
# DESCRIPTION
# Performs test queries to check that multiple servers are really available.
# To this end, several "ping" programs are spawned each keeping a server busy.
# If a pinger fails then there is no (more) server available.
# This way, the script determines the number of servers available.
#
# RESPONDING TO INCIDENT
# none
#
# PROCEDURE
# see above.
#
# PRECONDITIONS
# - rasdaman up and running, with database having user/password as defined below
#
# RETURN CODES
  RC_OK=0         # everything went fine
  RC_ERROR=1      # something went wrong
#


RCTEXT_OK="OK"
RCTEXT_ERROR="NOT_OK"

# --- CONSTANTS -----------------------------------------------------

# number of servers to be probed
NO_OF_SERVERS=10

# name of script
PROG=`basename $0`

# name of test program
TESTPROG=`basename $0 .sh`

# log output
LOGFILE=/tmp/`basename $PROG .sh`.log

# old log file for regression comparison:
OLDFILE=`basename $PROG .sh`.old

# how to react on error
function raiseError() { echo "$PROG: fatal error, aborting."; exit $RC_ERROR; }
#function raiseError() { echo "$PROG: error in test; resuming."; RC=$RC_ERROR; }

# string to determine that a server connection suceeded; see test prog src!
SUCCESS_INDICATOR=SUCCESS

# --- ACTION --------------------------------------------------------

echo $PROG: testing client/server communication for open/close db/ta, protocol is $RMANPROTOCOL
echo $PROG: testing client/server communication for open/close db/ta, protocol is $RMANPROTOCOL >$LOGFILE

# initialize overall return code
RC=$RC_OK

# --- make test progs
( cd $TESTPROG; make )

# --- check no of available servers
for (( i=$NO_OF_SERVERS; $i > 0; i=`expr $i - 1` ))
do
	# each tester runs infinitely, thereby definitely blocking its server
	$TESTPROG/$TESTPROG --wait 100 --requests 1000000 --id $i 2>&1 >${LOGFILE}_$i &
	# collect process ids so that wen can kill them again lateron
	PIDS="$PIDS $!"
done

echo -n "$PROG: waiting for test progs to settle down"
for i in 1 2 3 4 5
do
	sleep 1
	echo -n "."
done
echo

# cleanup processes; we're not interested whether they really are alive still
kill -TERM $PIDS 2>/dev/null

# evaluate log file
SUCCEEDS=`grep $SUCCESS_INDICATOR ${LOGFILE}*| wc -l`
echo $PROG: $NO_OF_SERVERS probed, $SUCCEEDS reached, `expr $NO_OF_SERVERS - $SUCCEEDS` failed.
echo $PROG: $NO_OF_SERVERS probed, $SUCCEEDS reached, `expr $NO_OF_SERVERS - $SUCCEEDS` failed. >>$LOGFILE

# --- compare files against old ones
if [ `diff $OLDFILE $LOGFILE | wc -l` -ne 0 ]
then
	echo "$PROG: Error: regression discrepancy between files $OLDFILE $LOGFILE -- $RCTEXT_ERROR"
	RC=$RC_ERROR
fi

# --- cleanup and summarise
if [ $RC -eq $RC_OK ]
then
	rm -f ${LOGFILE}*
	RCTEXT=$RCTEXT_OK
else
	RCTEXT=$RCTEXT_ERROR
fi

echo $PROG: done, result is $RCTEXT.
exit $RC