fdc1ee35af2a963960d4755552fdf76d269c1f03
[obnox/tinyproxy.git] / tests / scripts / run_tests.sh
1 #!/bin/sh
2
3 # testsuite runner for tinyproxy
4 #
5 # Copyright (C) 2009 Michael Adam <obnox@samba.org>
6 #
7 # This program is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by the Free
9 # Software Foundation; either version 2 of the License, or (at your option)
10 # any later version.
11 #
12 # This program is distributed in the hope that it will be useful, but WITHOUT
13 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15 # more details.
16 #
17 # You should have received a copy of the GNU General Public License along with
18 # this program; if not, see <http://www.gnu.org/licenses/>.
19
20
21 SCRIPTS_DIR=$(pwd)/$(dirname $0)
22 BASEDIR=$SCRIPTS_DIR/../..
23 TESTS_DIR=$SCRIPTS_DIR/..
24 TESTENV_DIR=$TESTS_DIR/env
25 LOG_DIR=$TESTENV_DIR/var/log
26
27 TINYPROXY_IP=127.0.0.2
28 TINYPROXY_PORT=12321
29 TINYPROXY_USER=$USER
30 TINYPROXY_PID_DIR=$TESTENV_DIR/var/run/tinyproxy
31 TINYPROXY_PID_FILE=$TINYPROXY_PID_DIR/tinyproxy.pid
32 TINYPROXY_LOG_DIR=$LOG_DIR
33 TINYPROXY_DATA_DIR=$TESTENV_DIR/usr/share/tinyproxy
34 TINYPROXY_CONF_DIR=$TESTENV_DIR/etc/tinyproxy
35 TINYPROXY_CONF_FILE=$TINYPROXY_CONF_DIR/tinyproxy.conf
36 TINYPROXY_FILTER_FILE=$TINYPROXY_CONF_DIR/filter
37 TINYPROXY_STDERR_LOG=$TINYPROXY_LOG_DIR/tinyproxy.stderr.log
38 TINYPROXY_BIN=$BASEDIR/src/tinyproxy
39 TINYPROXY_STATHOST_IP="127.0.0.127"
40
41 WEBSERVER_IP=127.0.0.3
42 WEBSERVER_PORT=32123
43 WEBSERVER_PID_DIR=$TESTENV_DIR/var/run/webserver
44 WEBSERVER_PID_FILE=$WEBSERVER_PID_DIR/webserver.pid
45 WEBSERVER_LOG_DIR=$TESTENV_DIR/var/log/webserver
46 WEBSERVER_BIN_FILE=webserver.pl
47 WEBSERVER_BIN=$SCRIPTS_DIR/$WEBSERVER_BIN_FILE
48
49 WEBCLIENT_LOG=$LOG_DIR/webclient.log
50 WEBCLIENT_BIN=$SCRIPTS_DIR/webclient.pl
51
52 provision_initial() {
53         if test -e $TESTENV_DIR ; then
54                 TESTENV_DIR_OLD=$TESTENV_DIR.old
55                 if test -e $TESTENV_DIR_OLD ; then
56                         rm -rf $TESTENV_DIR_OLD
57                 fi
58                 mv $TESTENV_DIR $TESTENV_DIR.old
59         fi
60
61         mkdir -p $LOG_DIR
62 }
63
64 provision_tinyproxy() {
65         mkdir -p $TINYPROXY_DATA_DIR
66         cp $BASEDIR/data/templates/default.html $TINYPROXY_DATA_DIR
67         cp $BASEDIR/data/templates/debug.html $TINYPROXY_DATA_DIR
68         cp $BASEDIR/data/templates/stats.html $TINYPROXY_DATA_DIR
69         mkdir -p $TINYPROXY_PID_DIR
70         mkdir -p $TINYPROXY_LOG_DIR
71         mkdir -p $TINYPROXY_CONF_DIR
72
73         cat >>$TINYPROXY_CONF_FILE<<EOF
74 User $TINYPROXY_USER
75 #Group $TINYPROXY_GROUP
76 Port $TINYPROXY_PORT
77 #Bind $TINYPROXY_IP
78 Listen $TINYPROXY_IP
79 Timeout 600
80 StatHost "$TINYPROXY_STATHOST_IP"
81 DefaultErrorFile "$TINYPROXY_DATA_DIR/debug.html"
82 StatFile "$TINYPROXY_DATA_DIR/stats.html"
83 Logfile "$TINYPROXY_LOG_DIR/tinyproxy.log"
84 PidFile "$TINYPROXY_PID_FILE"
85 LogLevel Info
86 MaxClients 100
87 MinSpareServers 5
88 MaxSpareServers 20
89 StartServers 10
90 MaxRequestsPerChild 0
91 Allow 127.0.0.0/8
92 ViaProxyName "tinyproxy"
93 #DisableViaHeader Yes
94 ConnectPort 443
95 ConnectPort 563
96 FilterURLs On
97 Filter "$TINYPROXY_FILTER_FILE"
98 XTinyproxy Yes
99 EOF
100
101         touch $TINYPROXY_FILTER_FILE
102 }
103
104 start_tinyproxy() {
105         echo -n "starting tinyproxy..."
106         $VALGRIND $TINYPROXY_BIN -c $TINYPROXY_CONF_FILE 2> $TINYPROXY_STDERR_LOG
107         echo " done (listening on $TINYPROXY_IP:$TINYPROXY_PORT)"
108 }
109
110 stop_tinyproxy() {
111         echo -n "killing tinyproxy..."
112         kill $(cat $TINYPROXY_PID_FILE)
113         if test "x$?" = "x0" ; then
114                 echo " ok"
115         else
116                 echo " error"
117         fi
118 }
119
120 provision_webserver() {
121         mkdir -p $WEBSERVER_PID_DIR
122         mkdir -p $WEBSERVER_LOG_DIR
123 }
124
125 start_webserver() {
126         echo -n "starting web server..."
127         $WEBSERVER_BIN --port $WEBSERVER_PORT --log-dir $WEBSERVER_LOG_DIR --pid-file $WEBSERVER_PID_FILE
128         echo " done (listening on $WEBSERVER_IP:$WEBSERVER_PORT)"
129 }
130
131 stop_webserver() {
132         echo -n "killing webserver..."
133         kill $(cat $WEBSERVER_PID_FILE)
134         if test "x$?" = "x0" ; then
135                 echo " ok"
136         else
137                 echo " error"
138         fi
139 }
140
141 wait_for_some_seconds() {
142         SECONDS=$1
143         if test "x$SECONDS" = "x" ; then
144                 SECONDS=1
145         fi
146
147         echo -n "waiting for $SECONDS seconds."
148
149         for COUNT in $(seq 1 $SECONDS) ; do
150                 sleep 1
151                 echo -n "."
152         done
153         echo " done"
154 }
155
156 run_basic_webclient_request() {
157         $WEBCLIENT_BIN $1 $2 >> $WEBCLIENT_LOG 2>&1
158         WEBCLIENT_EXIT_CODE=$?
159         if test "x$WEBCLIENT_EXIT_CODE" = "x0" ; then
160                 echo " ok"
161         else
162                 echo "ERROR ($EBCLIENT_EXIT_CODE)"
163                 echo "webclient output:"
164                 cat $WEBCLIENT_LOG
165         fi
166 }
167
168
169 # "main"
170
171 provision_initial
172 provision_tinyproxy
173 provision_webserver
174
175 start_webserver
176 start_tinyproxy
177
178 wait_for_some_seconds 3
179
180 echo -n "checking direct connection to web server..."
181 run_basic_webclient_request "$WEBSERVER_IP:$WEBSERVER_PORT" /
182
183 echo -n "testing connection through tinyproxy..."
184 run_basic_webclient_request "$TINYPROXY_IP:$TINYPROXY_PORT" "http://$WEBSERVER_IP:$WEBSERVER_PORT/"
185
186 echo -n "requesting statspage via stathost url..."
187 run_basic_webclient_request "$TINYPROXY_IP:$TINYPROXY_PORT" "http://$TINYPROXY_STATHOST_IP"
188
189 echo "You can continue using the webserver and tinyproxy."
190 echo -n "hit <enter> to stop the servers and exit: "
191 read READ
192
193 stop_tinyproxy
194 stop_webserver
195
196 echo "done"
197
198 exit 0