#!/bin/sh LABEL=dp8390 EXEDIR=/service/dp8390 EXE=$EXEDIR/$LABEL DAYTIME_HOST=jetsam.cs.vu.nl FAULTS_PER_BLOCK=1 :>log fault_blocks=0 connect_blocks=0 dont_connect=0 do_one() { # $1 = test-nr, $2 = count, $3 = seed pid='' while [ X"$pid" = X ] do pid=`ps ax | grep $LABEL | grep -v grep | sed 's,^[ ]*,,;s,[ ].*,,'` if [ X"$pid" != X ] then break fi sleep 10 done echo pid = $pid swifi -f $EXE $pid $1 $2 $3 >/tmp/out sleep 1 fault_blocks=`expr $fault_blocks + 1` if kill -0 $pid then if [ $dont_connect -eq 0 ] then if ./socket -t 10 $DAYTIME_HOST daytime < /dev/null then connect_blocks=`expr $connect_blocks + 1` else dont_connect=1 fi fi echo "driver failed to die, params: test $1, count $2, seed $3" else connect_blocks=`expr $connect_blocks + 1` echo "driver crashed after $fault_blocks blocks" echo "driver failed to connect after $connect_blocks blocks" fault_blocks=0 connect_blocks=0 dont_connect=0 fi } one_round() { # $1 = count, $2 = seed count=$1 seed=$2 echo "Seed: $seed" >> log sync do_one 6 $count $seed # Source fault do_one 5 $count $seed # Destination fault do_one 8 $count $seed # Pointer fault do_one 14 $count $seed # Interface fault do_one 12 $count $seed # Loop fault do_one 0 $count $seed # Text fault do_one 4 $count $seed # Nop fault } usage() { echo "Usage: run_t2 " >&2 echo \ "Valid types are: source destination pointer interface loop text nop random" >&2 exit 1 } select_from() { # $1 = index, $2... = choices index="$1" index=`expr "$index" + 1` shift v=`eval echo '$'$index` echo "$v" } random_type() { # $1 = seed seed="$1" r=`./rnd -m 7 -s "$seed"` select_from "$r" 6 5 8 14 12 0 4 } if [ $# -ne 3 ]; then usage; fi count="$1" type="$2" seed="$3" case "$type" in source) type_arg=6 ;; destination) type_arg=5 ;; pointer) type_arg=8 ;; interface) type_arg=14 ;; loop) type_arg=12 ;; text) type_arg=0 ;; nop) type_arg=4 ;; random) ;; *) usage esac # Start our own driver. service down $LABEL sleep 10 # Allow driver to die service up $EXE -script `pwd`/rs.restart_imm -period 3HZ i=0 while [ $i -lt "$count" ] do echo "Seed: $seed" if [ "$type" = "random" ] then type_arg=`random_type $seed` fi do_one "$type_arg" $FAULTS_PER_BLOCK $seed i=`expr $i + 1` seed=`expr $seed + 1` done connect_blocks=`expr $connect_blocks + 1` echo "driver crashed after $fault_blocks blocks" echo "driver failed to connect after $connect_blocks blocks" # Restart the driver service refresh $LABEL