chiark / gitweb /
Reentrancy: Avoid reentrant callbacks
[adns.git] / regress / m1test
1 #!/bin/bash
2 # usage: m1test <name> <initfile> [<initflags>] <queryargs>'
3 # test recording script
4 #
5 #  This file is part of adns, which is
6 #    Copyright (C) 1997-2000,2003,2006  Ian Jackson
7 #    Copyright (C) 1999-2000,2003,2006  Tony Finch
8 #    Copyright (C) 1991 Massachusetts Institute of Technology
9 #  (See the file INSTALL for full details.)
10 #  
11 #  This program is free software; you can redistribute it and/or modify
12 #  it under the terms of the GNU General Public License as published by
13 #  the Free Software Foundation; either version 2, or (at your option)
14 #  any later version.
15 #  
16 #  This program is distributed in the hope that it will be useful,
17 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
18 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 #  GNU General Public License for more details.
20 #  
21 #  You should have received a copy of the GNU General Public License
22 #  along with this program; if not, write to the Free Software Foundation,
23 #  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
24
25 set -e
26
27 : ${srcdir=.}
28 if [ $# -lt 3 ]
29 then
30         echo >&2 \
31 'usage: m1test <name> <initfile> [-<initflags>] ["<"]
32               [=<hrecord-command-args>] <queryargs>
33 ("<" means read input from case-<name>.in)'
34         exit 1
35 fi
36
37 case="$srcdir/case-$1"; shift
38 initfile="$1"; shift
39
40 hrecord="./adnstest_record"
41
42 case "$1" in
43 -*)     initflags="$1"; shift
44 esac
45
46 if test "x$1" = "x<"
47 then
48         shift; exec <"$case.in"
49 fi
50
51 case "$1" in
52 =*)     hrecord="`echo \"$1\" | sed -e 's/^=//'`"; shift
53 esac
54
55 if test ! -f "$hrecord" -a -f "${hrecord}_record"
56 then
57         case "$hrecord" in
58         /*)     program="$hrecord"      ;;
59         *)      program="./$hrecord"    ;;
60         esac
61         hrecord="${program}_record"
62 else
63         program="$(echo "$hrecord" | sed -e 's/ .*//; s/_record$//')"
64 fi
65
66 queryargs="$*"
67
68 initstring="`cat $srcdir/init-$initfile.text`"
69 xinitflagsf=$srcdir/$program-xinitflags.text
70 if test -f $xinitflagsf
71 then
72         useinitflags="$initflags $(cat $xinitflagsf)";
73 else
74         useinitflags="$initflags /"
75 fi
76
77 echo $program $initfile $initflags >"$case.sys"
78 echo "$queryargs" >>"$case.sys"
79
80 EF_DISABLE_BANNER=1
81 export EF_DISABLE_BANNER
82
83 rm -f pipe.out pipe.err
84 mknod pipe.out p
85 mknod pipe.err p
86 tee <pipe.out "$case.out" &
87 tee_out=$!
88 tee <pipe.err "$case.err" &
89 tee_err=$!
90 exec 4>pipe.out
91 exec 5>pipe.err
92
93 echo running hrecord $initflags "... $queryargs"
94 set +e
95 ADNS_TEST_OUT_FD=3 3>>"$case.sys" >&4 2>&5 \
96  $hrecord $useinitflags"$initstring" $queryargs
97 rc=$?
98 set -e
99
100 echo "rc=$rc" >&4
101 exec 4>&-
102 exec 5>&-
103
104 wait $tee_out
105 wait $tee_err
106
107 echo "exit status: $rc"