]> git.pond.sub.org Git - empserver/blob - tests/test-common.sh
tests: Make helper begin_test accept any number of arguments
[empserver] / tests / test-common.sh
1 export EMPIREHOST=127.0.0.1 LOGNAME=tester
2
3 if [ -x ./config.status ] && ./config.status --version | grep -q '^Wolfpack Empire'
4 then :
5 else echo "$0: Must be run in root of build tree" >&2; exit 1
6 fi
7
8 test=${0##*/}
9 test=${test%-test}
10
11 create_sandbox()
12 {
13     rm -rf sandbox
14     mkdir -p sandbox/etc/empire sandbox/share/empire/builtin sandbox/var/empire
15     touch sandbox/etc/empire/schedule
16     cat >sandbox/etc/empire/econfig <<EOF
17 data "../../var/empire"
18 info "../../../../info.nr"
19 builtin "../../share/empire/builtin"
20 listen_addr "$EMPIREHOST"
21 keep_journal 2
22 EOF
23     cp `git ls-files "$srcdir"/src/lib/global | grep '\.config$'` sandbox/share/empire/builtin
24 }
25
26 now()
27 {
28     # date +%s isn't portable...
29     perl -e 'printf "%s\n", time'
30 }
31
32 start_server()
33 {
34     local pidfile=sandbox/var/empire/server.pid
35     local timeout
36     pid=
37     trap 'if [ "$pid" ]; then kill -9 "$pid" 2>/dev/null || true; fi' EXIT
38     src/server/emp_server -e sandbox/etc/empire/econfig -R 1 -s
39     timeout=$((`now`+5))
40     until pid=`cat $pidfile 2>/dev/null` && [ -n "$pid" ]
41     do
42         if [ `now` -gt $timeout ]
43         then
44             echo "Timed out waiting for server to create $pidfile" >&2
45             exit 1
46         fi
47     done
48     while src/client/empire red herring 2>&1 | grep -q "Connection refused"
49     do
50         if [ `now` -gt $timeout ]
51         then
52             echo "Timed out waiting for server to accept connections" >&2
53             exit 1
54         fi
55     done
56 }
57
58 stop_server()
59 {
60     local timeout
61     kill "$pid"
62     timeout=$((`now`+5))
63     while kill -0 "$pid" 2>/dev/null
64     do
65         if [ `now` -gt $timeout ]
66         then
67             echo "Timed out waiting for server to terminate" >&2
68             exit 1
69         fi
70     done
71 }
72
73 feed_input()
74 {
75     c=$1
76     r=$2
77     shift 2
78     sed '/^|/d' "$@" | src/client/empire "$c" "$r" >/dev/null
79 }
80
81 begin_test()
82 {
83     src/util/files -e sandbox/etc/empire/econfig -f >/dev/null
84     local xd=
85     case "$1" in
86     *.xdump)
87         xd="$1"
88         src/util/empdump -e sandbox/etc/empire/econfig -i "$xd"
89         shift
90         ;;
91     esac
92     if [ -z "$xd" ] || [ "$#" -ne 0 ]
93     then
94         cp -r sandbox/var/empire/tel sandbox/var/empire/empty.tel
95         start_server
96         feed_input POGO peter "$@"
97         stop_server
98         mv sandbox/var/empire/tel sandbox/var/empire/init.tel
99         mv sandbox/var/empire/empty.tel sandbox/var/empire/tel
100         mv sandbox/var/empire/journal.log sandbox/var/empire/init.journal.log
101         mv sandbox/var/empire/server.log sandbox/var/empire/init.server.log
102     fi
103     start_server
104 }
105
106 end_test ()
107 {
108     stop_server
109     src/util/empdump -e sandbox/etc/empire/econfig -x >sandbox/$test.xdump
110 }
111
112 cmp_out()
113 {
114     local opt exp act nrm msg ret=0
115     for i
116     do
117         case "$i" in
118         */journal.log)  opt=-j ;;
119         */server.log)   opt=-s ;;
120         *)              opt= ;;
121         esac
122         exp="$srcdir/tests/$test/${i##*/}"
123         act="sandbox/$i"
124         nrm="sandbox/normalized-${i##*/}"
125         perl "$srcdir"/tests/normalize.pl $opt "$act" >"$nrm"
126         if msg=`diff -q "$exp" "$nrm"`
127         then
128             echo "$exp OK"
129         else
130             ret=$?
131             echo "$exp FAIL"
132             echo $msg
133         fi
134     done
135     return $ret
136 }