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