#!/bin/sh # NOTE: This is verbose on purpose. set -e rm -fr results || true rm blob* || true SERVERLOGS=results/servers CLIENTOUT=results/clients mkdir -p $SERVERLOGS mkdir -p $CLIENTOUT echo "STARTING SERVERS..." for SERVERID in $(seq 1 5) do IDX=$(($SERVERID - 1)) SERVERCMD="../bin/server -v -i $IDX --config server-$SERVERID.yaml" $SERVERCMD > $SERVERLOGS/server-$SERVERID.console 2>&1 & RETVAL=$! echo "$SERVERCMD -- $RETVAL" done jobs -p > results/serverpids finish() { echo "STOPPING SERVERS..." # NOTE: jobs -p doesn't work in a signal handler for job in $(cat results/serverpids) do echo "KILLING $job" kill $job || true done tail $SERVERLOGS/* tail $CLIENTOUT/* diff -ruN clients.goldoutput $CLIENTOUT } trap finish EXIT trap finish INT sleep 20 # FIXME: We should not need this, but the servers don't respond quickly # enough on boot right now. LASTNODE="localhost:50004" NICK1="David" NICK2="Jim" NICK3="Ben" NICK4="Rick" echo "STARTING CLIENTS..." CTR=0 for cid in $(seq 1 4) do # TODO: Change the recipients to send multiple messages. We can't # run multiple clients with the same user id so we need # updates to make that work. # for nid in 1 2 3 4; do for nid in 1 do nid=$((($cid % 4) + 1)) eval NICK=\${NICK${cid}} CLIENTCMD="../bin/client -f blob$cid$nid --numnodes 5 -s $LASTNODE -i $cid -d $nid -m \"Hello, $nid\" --nick $NICK" eval $CLIENTCMD >> $CLIENTOUT/client$cid$nid.out 2>&1 & RETVAL=$! eval CLIENTS${CTR}=$RETVAL echo "$CLIENTCMD -- $RETVAL" CTR=$(($CTR + 1)) done done echo "WAITING FOR $CTR CLIENTS TO EXIT..." for i in $(seq 0 $(($CTR - 1))) do eval echo "Waiting on \${CLIENTS${i}} ..." eval wait \${CLIENTS${i}} done CTR=0 for cid in $(seq 1 4) do # TODO: Change the recipients to send multiple messages. We can't # run multiple clients with the same user id so we need # updates to make that work. # for nid in 1 2 3 4; do for nid in 1 do nid=$((($cid % 4) + 1)) eval NICK=\${NICK${cid}} CLIENTCMD="../bin/client -f blob$cid$nid --numnodes 5 -s $LASTNODE -i $cid -d $nid -m \"Hello, $nid\" --nick $NICK" eval $CLIENTCMD >> $CLIENTOUT/client$cid$nid.out 2>&1 & RETVAL=$! eval CLIENTS${CTR}=$RETVAL echo "$CLIENTCMD -- $RETVAL" CTR=$(($CTR + 1)) done done echo "WAITING FOR $CTR CLIENTS (2nd msg set) TO EXIT..." for i in $(seq 0 $(($CTR - 1))) do eval echo "Waiting on \${CLIENTS${i}} ..." eval wait \${CLIENTS${i}} done diff -ruN clients.goldoutput $CLIENTOUT cat $SERVERLOGS/*.log | grep "ERROR" > results/server-errors.txt diff -ruN results/server-errors.txt noerrors.txt echo "SUCCESS!"