#! /bin/bash
# usage: testsubpub.sh [number_of_subscribers [number_of_publishers [publishing_times]]]
# default: testsubpub.sh 3 3 100
SUB_NUM=$1 #number of subscribers
PUB_NUM=$2 #number of publishers
NUM_PUB=$3 #publishing times each publisher does
######################
# set default values
######################
if [ -z "$SUB_NUM" ]; then
SUB_NUM=3
fi
if [ -z "$PUB_NUM" ]; then
PUB_NUM=3
fi
if [ -z "$NUM_PUB" ]; then
NUM_PUB=100
fi
#############################
#
# modify the settings to
# fit your environment
#
#############################
export JAVA_HOME="/home/ewu/java/j2sdk1.4.2_09"
JAVA="$JAVA_HOME/bin/java"
# xmlBlaster server
HOSTNAME=bond
SOCKET_PORT=7607
# xmlBlaster client
XMLBLASTER_HOME="/home/ewu/java/xmlBlaster_1.1.1"
export CLASSPATH="$XMLBLASTER_HOME/lib/xmlBlaster.jar:$XMLBLASTER_HOME/lib/jutils.jar"
LOG_PATH="/home/ewu/temp/xmlblaster"
SUBSCRIBER="javaclients.HelloWorldSubscribe"
SUB_OPTIONS="-interactive false -unSubscribe false -runAsDaemon true -notifyOnErase false"
SUB_OPTIONS="$SUB_OPTIONS -plugin/socket/hostname $HOSTNAME -plugin/socket/port $SOCKET_PORT"
SUB_XPATH="//service[.='AA_AA' and ../type[.='BB_BB']]"
PUBLISHER="javaclients.HelloWorldPublish"
#PUB_OPTIONS="-interactive false -sleep 0 -numPublish $NUM_PUB -persistent false -lifeTime 0 -erase true -destroyDelay 0"
PUB_OPTIONS="-interactive false -sleep 0 -numPublish $NUM_PUB -persistent false -lifeTime 0 -erase false -destroyDelay 60000"
PUB_OPTIONS="$PUB_OPTIONS -plugin/socket/hostname $HOSTNAME -plugin/socket/port $SOCKET_PORT"
MSG_MARK="NAVAHO-pub"
let "TOTAL = $SUB_NUM * $PUB_NUM * $NUM_PUB"
counter=1
while true
do
echo "running TEST-$counter ..."
###################
# clean up
###################
if ls /home/ewu/tmp/clientewu* &> /dev/null; then
rm /home/ewu/tmp/clientewu*
fi
cd $LOG_PATH
if ls sub*.log &> /dev/null; then
rm sub*.log
fi
if ls sub*.sort &> /dev/null; then
rm sub*.sort
fi
if ls pub*.log &> /dev/null; then
rm pub*.log
fi
##################
# run subcribers
##################
echo ""
echo "run $SUB_NUM subscribers at `date +\"%F %T.%N\"`"
echo ""
echo "$JAVA $SUBSCRIBER $SUB_OPTIONS -xpath \"$SUB_XPATH\" > $LOG_PATH/sub\$i.log 2>&1 &"
echo ""
for ((i=1; i <= SUB_NUM; i++))
do
$JAVA $SUBSCRIBER $SUB_OPTIONS -xpath "$SUB_XPATH" > $LOG_PATH/sub$i.log 2>&1 &
done
echo "sleep 20s to wait for sub finished ..."
sleep 20s
echo "sub running"
##################
# run publishers
##################
PUB_OID=AABB
CLIENT_TAGS="AA_AABB_BB%counter"
PUB_CONTENT="$MSG_MARK\$i-%counter"
echo ""
echo "running $PUB_NUM publishers, each publishing $NUM_PUB messages at `date +\"%F %T.%N\"`"
echo ""
echo "$JAVA $PUBLISHER $PUB_OPTIONS -oid $PUB_OID -clientTags \"$CLIENT_TAGS\" -content $PUB_CONTENT > $LOG_PATH/pub\$i.log 2>&1 &"
echo ""
for ((i=1; i <= PUB_NUM; i++))
do
CLIENT_TAGS="AA_AABB_BB%counter"
PUB_CONTENT="$MSG_MARK$i-%counter"
$JAVA $PUBLISHER $PUB_OPTIONS -oid $PUB_OID -clientTags "$CLIENT_TAGS" -content $PUB_CONTENT > $LOG_PATH/pub$i.log 2>&1 &
done
echo "sleep 100s to wait for pub finished ..."
sleep 100s
echo "pub done at `date +\"%F %T.%N\"`"
######################
# kill sub processes
######################
echo ""
#SUB_PID=`ps axl | grep $SUBSCRIBER | awk '$4==1 {print $3}' | xargs`
SUB_PID=`ps aux | grep $SUBSCRIBER | awk '{print $2}' | xargs`
if [ "$SUB_PID" != "" ]; then
echo "killing sub pid: $SUB_PID"
kill $SUB_PID
echo "kill sub done"
else
echo "ERROR: can not kill sub"
fi
#####################
# process log files
#####################
echo ""
echo "validating sub: $SUB_NUM, pub: $PUB_NUM"
echo ""
RECEIVED=0
for ((i=1; i <= SUB_NUM; i++))
do
for ((j=1; j <= PUB_NUM; j++))
do
if [ -e sub$i.log ]; then
msgs=`grep "$MSG_MARK$j" sub$i.log | wc -l`
echo "sub$i got $MSG_MARK$j: $msgs"
let "RECEIVED += $msgs"
fi
done
done
echo ""
echo "sorting messages..."
echo ""
for ((i=1; i <= SUB_NUM; i++))
do
for ((j=1; j <= PUB_NUM; j++))
do
if [ -e sub$i.log ]; then
cat sub$i.log | grep "$MSG_MARK$j" | sort > sub$i$j.sort
fi
done
done
echo "validation done"
######################
# check for msg lost
######################
let "LOST = $TOTAL - $RECEIVED"
if [ "$LOST" -eq 0 ]; then
echo "TEST-$counter done successfully. sleep 2m to continue testing"
sleep 2m
let "counter += 1"
else
echo "***************** ERROR: $LOST messages lost in TEST-$counter"
echo "***************** Only received $RECEIVED messages. Should get $TOTAL messages."
echo "***************** Stop test at `date +\"%F %T.%N\"`"
exit 1
fi
done