xref: /minix/minix/commands/swifi/tests/run_t2 (revision ebfedea0)
1#!/bin/sh
2
3LABEL=dp8390
4EXEDIR=/service/dp8390
5EXE=$EXEDIR/$LABEL
6DAYTIME_HOST=jetsam.cs.vu.nl
7FAULTS_PER_BLOCK=1
8
9:>log
10
11fault_blocks=0
12connect_blocks=0
13dont_connect=0
14
15do_one()
16{
17	# $1 = test-nr, $2 = count, $3 = seed
18	pid=''
19	while [ X"$pid" = X ]
20	do
21		pid=`ps ax | grep $LABEL | grep -v grep |
22			sed 's,^[ 	]*,,;s,[ 	].*,,'`
23		if [ X"$pid" != X ]
24		then
25			break
26		fi
27		sleep 10
28	done
29	echo pid = $pid
30	swifi -f $EXE $pid $1 $2 $3 >/tmp/out
31	sleep 1
32	fault_blocks=`expr $fault_blocks + 1`
33	if kill -0 $pid
34	then
35		if [ $dont_connect -eq 0 ]
36		then
37			if ./socket -t 10 $DAYTIME_HOST daytime < /dev/null
38			then
39				connect_blocks=`expr $connect_blocks + 1`
40			else
41				dont_connect=1
42			fi
43		fi
44		echo "driver failed to die, params: test $1, count $2, seed $3"
45	else
46		connect_blocks=`expr $connect_blocks + 1`
47		echo "driver crashed after $fault_blocks blocks"
48		echo "driver failed to connect after $connect_blocks blocks"
49		fault_blocks=0
50		connect_blocks=0
51		dont_connect=0
52	fi
53}
54
55one_round()
56{
57	# $1 = count, $2 = seed
58	count=$1
59	seed=$2
60	echo "Seed: $seed" >> log
61	sync
62	do_one 6 $count $seed	# Source fault
63	do_one 5 $count $seed	# Destination fault
64	do_one 8 $count $seed	# Pointer fault
65	do_one 14 $count $seed	# Interface fault
66	do_one 12 $count $seed	# Loop fault
67	do_one 0 $count $seed	# Text fault
68	do_one 4 $count $seed	# Nop fault
69}
70
71usage()
72{
73	echo "Usage: run_t2 <count> <type> <seed>" >&2
74	echo \
75"Valid types are: source destination pointer interface loop text nop random" >&2
76	exit 1
77}
78
79select_from()
80{
81	# $1 = index, $2... = choices
82	index="$1"
83	index=`expr "$index" + 1`
84	shift
85	v=`eval echo '$'$index`
86	echo "$v"
87}
88
89random_type()
90{
91	# $1 = seed
92	seed="$1"
93	r=`./rnd -m 7 -s "$seed"`
94	select_from "$r" 6 5 8 14 12 0 4
95}
96
97if [ $# -ne 3 ]; then usage; fi
98count="$1"
99type="$2"
100seed="$3"
101
102case "$type" in
103source)		type_arg=6
104;;
105destination)	type_arg=5
106;;
107pointer)	type_arg=8
108;;
109interface)	type_arg=14
110;;
111loop)		type_arg=12
112;;
113text)		type_arg=0
114;;
115nop)		type_arg=4
116;;
117random)
118;;
119*)
120	usage
121esac
122
123# Start our own driver.
124service down $LABEL
125sleep 10	# Allow driver to die
126service up $EXE -script `pwd`/rs.restart_imm -period 3HZ
127
128i=0
129while [ $i -lt "$count" ]
130do
131	echo "Seed: $seed"
132	if [ "$type" = "random" ]
133	then
134		type_arg=`random_type $seed`
135	fi
136	do_one "$type_arg" $FAULTS_PER_BLOCK $seed
137	i=`expr $i + 1`
138	seed=`expr $seed + 1`
139done
140
141connect_blocks=`expr $connect_blocks + 1`
142echo "driver crashed after $fault_blocks blocks"
143echo "driver failed to connect after $connect_blocks blocks"
144
145# Restart the driver
146service refresh $LABEL
147