xref: /openbsd-src/usr.sbin/unbound/testcode/mini_tdir.sh (revision a43524d9cc222a049058246319ec6a29f2d9ca78)
1# tdir that only exes the files.
2args="../.."
3if test "$1" = "-a"; then
4	args=$2
5	shift
6	shift
7fi
8
9# This will keep the temporary directory around and return 1 when the test failed.
10DEBUG=0
11test -n "$DEBUG_TDIR" && DEBUG=1
12
13quiet=0
14if test "$1" = "-q"; then
15	quiet=1
16	shift
17fi
18
19if test "$1" = "clean"; then
20	if test $quiet = 0; then
21		echo "rm -f result.* .done* .skip* .tdir.var.master .tdir.var.test"
22	fi
23	rm -f result.* .done* .skip* .tdir.var.master .tdir.var.test
24	exit 0
25fi
26if test "$1" = "fake"; then
27	if test $quiet = 0; then
28		echo "minitdir fake $2"
29	fi
30	echo "fake" > .done-`basename $2 .tdir`
31	exit 0
32fi
33if test "$1" = "-f" && test "$2" = "report"; then
34	echo "Minitdir Long Report"
35	pass=0
36	fail=0
37	skip=0
38	echo "   STATUS    ELAPSED TESTNAME TESTDESCRIPTION"
39	for result in *.tdir; do
40		name=`basename $result .tdir`
41		timelen="     "
42		desc=""
43		if test -f "result.$name"; then
44			timestart=`grep ^DateRunStart: "result.$name" | sed -e 's/DateRunStart: //'`
45			timeend=`grep ^DateRunEnd: "result.$name" | sed -e 's/DateRunEnd: //'`
46			timesec=`expr $timeend - $timestart`
47			timelen=`printf %4ds $timesec`
48			if test $? -ne 0; then
49				timelen="$timesec""s"
50			fi
51			desc=`grep ^Description: "result.$name" | sed -e 's/Description: //'`
52		fi
53		if test -f ".done-$name"; then
54			if test $quiet = 0; then
55				echo "** PASSED ** $timelen $name: $desc"
56				pass=`expr $pass + 1`
57			fi
58		elif test -f ".skip-$name"; then
59			echo ".. SKIPPED.. $timelen $name: $desc"
60			skip=`expr $skip + 1`
61		else
62			if test -f "result.$name"; then
63				echo "!! FAILED !! $timelen $name: $desc"
64				fail=`expr $fail + 1`
65			else
66				echo ".. SKIPPED.. $timelen $name: $desc"
67				skip=`expr $skip + 1`
68			fi
69		fi
70	done
71	echo ""
72	if test "$skip" = "0"; then
73		echo "$pass pass, $fail fail"
74	else
75		echo "$pass pass, $fail fail, $skip skip"
76	fi
77	echo ""
78	exit 0
79fi
80if test "$1" = "report" || test "$2" = "report"; then
81	echo "Minitdir Report"
82	for result in *.tdir; do
83		name=`basename $result .tdir`
84		if test -f ".done-$name"; then
85			if test $quiet = 0; then
86				echo "** PASSED ** : $name"
87			fi
88		elif test -f ".skip-$name"; then
89			if test $quiet = 0; then
90				echo ".. SKIPPED.. : $name"
91			fi
92		else
93			if test -f "result.$name"; then
94				echo "!! FAILED !! : $name"
95			else
96				if test $quiet = 0; then
97					echo ".. SKIPPED.. : $name"
98				fi
99			fi
100		fi
101	done
102	exit 0
103fi
104
105if test "$1" != 'exe'; then
106	# usage
107	echo "mini tdir. Reduced functionality for old shells."
108	echo "	tdir [-q] exe <file>"
109	echo "	tdir [-q] fake <file>"
110	echo "	tdir [-q] clean"
111	echo "	tdir [-q|-f] report"
112	exit 1
113fi
114shift
115
116# do not execute if the disk is too full
117#DISKLIMIT=100000
118# This check is not portable (to Solaris 10).
119#avail=`df . | tail -1 | awk '{print $4}'`
120#if test "$avail" -lt "$DISKLIMIT"; then
121	#echo "minitdir: The disk is too full! Only $avail."
122	#exit 1
123#fi
124
125name=`basename $1 .tdir`
126dir=$name.$$
127result=result.$name
128done=.done-$name
129skip=.skip-$name
130asan_text="SUMMARY: AddressSanitizer"
131success="no"
132if test -x "`which bash`"; then
133	shell="bash"
134else
135	shell="sh"
136fi
137
138# check already done
139if test -f $done; then
140	echo "minitdir $done exists. skip test."
141	exit 0
142fi
143
144# Copy
145if test $quiet = 0; then
146	echo "minitdir copy $1 to $dir"
147fi
148mkdir $dir
149if cp --help 2>&1 | grep -- "-a" >/dev/null; then
150cp -a $name.tdir/* $dir/
151else
152cp -R $name.tdir/* $dir/
153fi
154cd $dir
155
156# EXE
157echo "minitdir exe $name" > $result
158grep "Description:" $name.dsc >> $result 2>&1
159echo "DateRunStart: "`date "+%s" 2>/dev/null` >> $result
160if test -f $name.pre; then
161	if test $quiet = 0; then
162		echo "minitdir exe $name.pre"
163	fi
164	echo "minitdir exe $name.pre" >> $result
165	$shell $name.pre $args >> $result
166	exit_value=$?
167	if test $exit_value -eq 3; then
168		echo "$name: SKIPPED" >> $result
169		echo "$name: SKIPPED" > ../$skip
170		echo "$name: SKIPPED"
171	elif test $exit_value -ne 0; then
172		echo "Warning: $name.pre did not exit successfully"
173	fi
174fi
175if test -f $name.test -a ! -f ../$skip; then
176	if test $quiet = 0; then
177		echo "minitdir exe $name.test"
178	fi
179	echo "minitdir exe $name.test" >> $result
180	$shell $name.test $args >>$result 2>&1
181	if test $? -ne 0; then
182		echo "$name: FAILED" >> $result
183		echo "$name: FAILED"
184		success="no"
185	else
186		echo "$name: PASSED" >> $result
187		echo "$name: PASSED" > ../$done
188		if test $quiet = 0; then
189			echo "$name: PASSED"
190		fi
191		success="yes"
192	fi
193fi
194if test -f $name.post -a ! -f ../$skip; then
195	if test $quiet = 0; then
196		echo "minitdir exe $name.post"
197	fi
198	echo "minitdir exe $name.post" >> $result
199	$shell $name.post $args >> $result
200	if test $? -ne 0; then
201		echo "Warning: $name.post did not exit successfully"
202	fi
203fi
204# Check if there were any AddressSanitizer errors
205# if compiled with -fsanitize=address
206if grep "$asan_text" $result >/dev/null 2>&1; then
207	if test -f ../$done; then
208		rm ../$done
209	fi
210	echo "$name: FAILED (AddressSanitizer)" >> $result
211	echo "$name: FAILED (AddressSanitizer)"
212	success="no"
213fi
214echo "DateRunEnd: "`date "+%s" 2>/dev/null` >> $result
215
216mv $result ..
217cd ..
218if test $DEBUG -eq 0; then
219	rm -rf $dir
220	# compat for windows where deletion may not succeed initially (files locked
221	# by processes that still have to exit).
222	if test $? -eq 1; then
223		echo "minitdir waiting for processes to terminate"
224		sleep 2 # some time to exit, and try again
225		rm -rf $dir
226	fi
227else
228	if test $success = "no"; then
229		exit 1
230	fi
231	exit 0
232fi
233