xref: /openbsd/regress/lib/libc/asr/regress.subr (revision d89ec533)
1#!/bin/sh
2#	$OpenBSD: regress.subr,v 1.4 2017/03/14 20:22:06 eric Exp $
3
4set -e
5
6fail()
7{
8	echo "*** ERROR: $@"
9	exit 1
10}
11
12regress()
13{
14	local cmd="$1"
15	local bin0="/bin/${cmd}${A}"
16	local bin1="/bin/${cmd}${B}"
17	local out="${OUTDIR}/test-${COUNT}.out"
18	local out0="${OUTDIR}/test-${COUNT}${A}.out"
19	local out1="${OUTDIR}/test-${COUNT}${B}.out"
20	local err0="${OUTDIR}/test-${COUNT}${A}.err"
21	local err1="${OUTDIR}/test-${COUNT}${B}.err"
22	local outdiff="${OUTDIR}/test-${COUNT}${A}${B}.diff"
23	shift
24
25	test -x "${ROOTDIR}${bin0}" || fail "${ROOTDIR}${bin0}" not executable
26	test -x "${ROOTDIR}${bin1}" || fail "${ROOTDIR}${bin1}" not executable
27
28	echo -n "${cmd} $@ ."
29
30	set +e
31	chroot -u bin "${ROOTDIR}" ${bin0} $@ > ${out0}
32	echo -n .
33	chroot -u bin "${ROOTDIR}" ${bin1} $@ > ${out1}
34	echo -n "."
35
36	diff -u ${out0} ${out1} > ${outdiff}
37	set -e
38	if test -s ${outdiff}; then
39		FAIL=$((FAIL+1))
40		echo fail
41		echo "### FAIL [#${COUNT} env=${REGRESSENV}] ${cmd} $@" >> $ERR
42		cat ${outdiff} >> $ERR
43		echo >> $ERR
44	else
45		rm ${outdiff}
46		rm ${out1}
47		mv ${out0} ${out}
48		OK=$((OK+1))
49		echo ok
50		echo "### OK [#${COUNT} env=$REGRESSENV] ${cmd} $@" >> $OUT
51		cat ${out} >> $OUT
52		echo >> $OUT
53	fi
54
55	COUNT=$((COUNT+1))
56}
57
58regress_setenv()
59{
60	local _name="$1"
61
62	echo "==> using env $_name"
63
64	mkdir -p "${ROOTDIR}/etc/"
65	cp /etc/hosts "${ROOTDIR}/etc/"
66	cp /etc/resolv.conf "${ROOTDIR}/etc/"
67	cp /etc/protocols "${ROOTDIR}/etc/"
68	cp /etc/networks "${ROOTDIR}/etc/"
69	cp /etc/services "${ROOTDIR}/etc/"
70
71	case $_name in
72	empty)
73		rm -f "${ROOTDIR}/etc/*"
74		;;
75	local)
76		;;
77	file)
78		grep -v lookup /etc/resolv.conf > "${ROOTDIR}/etc/resolv.conf"
79		echo "lookup file" >> "${ROOTDIR}/etc/resolv.conf"
80		;;
81	bind)
82		grep -v lookup /etc/resolv.conf > "${ROOTDIR}/etc/resolv.conf"
83		echo "lookup bind" >> "${ROOTDIR}/etc/resolv.conf"
84		;;
85	*)
86		fail unknown env $_name
87		;;
88	esac
89	REGRESSENV=$_name
90}
91
92regress_digest()
93{
94	echo "===> done"
95 	test -f $ERR && (echo; cat $ERR; echo "===> errfile=$ERR")
96	echo "===> logfile=$OUT"
97	echo "===> run=$COUNT ok=$OK fail=$FAIL error=$ERROR"
98
99}
100
101# needed for chroot
102test "$(id -u)" -ne 0 && fail need root privileges to run this script
103
104# we really really want to avoid erasing /etc later
105test "${RUNDIR}" || fail RUNDIR is not set
106
107ROOTDIR=$(readlink -fn ${RUNDIR})
108test "${ROOTDIR}" == "/" && fail RUNDIR is root dir: ${RUNDIR}
109
110COUNT=0
111OK=0
112FAIL=0
113ERROR=0
114A=${A:=.a}
115B=${B:=.b}
116
117OUTDIR=$(mktemp -d -p $ROOTDIR)
118chmod a+rx ${OUTDIR}
119echo "===> ${OUTDIR}"
120
121OUT=$OUTDIR/regress.log
122ERR=$OUTDIR/regress.err
123