Drop SELECTEDTESTSONLY support
[strongswan.git] / testing / do-tests
1 #!/bin/bash
2 # Automatically execute the strongSwan test cases
3 #
4 # Copyright (C) 2004  Eric Marchionni, Patrik Rayo
5 # Zuercher Hochschule Winterthur
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
9 # Free Software Foundation; either version 2 of the License, or (at your
10 # option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
11 #
12 # This program is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 # for more details.
16
17 DIR=`dirname $0`
18
19 . $PWD/scripts/function.sh
20
21 [ -d $PWD/hosts ] || die "Directory 'hosts' not found"
22 [ -d $PWD/tests ] || die "Directory 'tests' not found"
23 [ -d $BUILDDIR ] || die "Directory '$BUILDDIR' does not exist, please run make-testing first"
24
25
26 ##############################################################################
27 # take care of new path and file variables
28 #
29
30 [ -d $TESTRESULTSDIR ] || mkdir $TESTRESULTSDIR
31
32 TESTDATE=`date +%Y%m%d-%H%M`
33
34 TODAYDIR=$TESTRESULTSDIR/$TESTDATE
35 mkdir $TODAYDIR
36 TESTRESULTSHTML=$TODAYDIR/all.html
37 INDEX=$TODAYDIR/index.html
38 DEFAULTTESTSDIR=$TESTDIR/testing/tests
39
40 SOURCEIP_ROUTING_TABLE=220
41
42 testnumber="0"
43 failed_cnt="0"
44 passed_cnt="0"
45
46
47 ##############################################################################
48 # copy default tests to $BUILDDIR
49 #
50
51 TESTSDIR=$BUILDDIR/tests
52 [ -d $TESTSDIR ] || mkdir $TESTSDIR
53
54 ##############################################################################
55 # assign IP for each host to hostname
56 #
57
58 for host in $STRONGSWANHOSTS
59 do
60     eval ipv4_${host}="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $1 }' | awk '{ print $1 }'`"
61     eval ipv6_${host}="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $1 }' | awk '{ print $1 }'`"
62
63     case $host in
64     moon)
65         eval ipv4_moon1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
66         eval ipv6_moon1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
67         ;;
68     sun)
69         eval ipv4_sun1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
70         eval ipv6_sun1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
71         ;;
72     alice)
73         eval ipv4_alice1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
74         eval ipv6_alice1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
75         ;;
76     venus)
77         ;;
78     bob)
79         ;;
80     carol)
81         eval ipv4_carol1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
82         eval ipv6_carol1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
83          ;;
84     dave)
85         eval ipv4_dave1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
86         eval ipv6_dave1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
87         ;;
88     winnetou)
89         ;;
90     esac
91 done
92
93
94 ##############################################################################
95 # open ssh sessions
96 #
97 for host in $STRONGSWANHOSTS
98 do
99     ssh $SSHCONF -N root@`eval echo \\\$ipv4_$host` >/dev/null 2>&1 &
100     eval ssh_pid_$host="`echo $!`"
101     do_on_exit kill `eval echo \\\$ssh_pid_$host`
102 done
103
104
105 ##############################################################################
106 # create header for the results html file
107 #
108
109 ENVIRONMENT_HEADER=$(cat <<@EOF
110   <table border="0" cellspacing="2" cellpadding="2">
111     <tr valign="top">
112       <td><b>Host</b></td>
113       <td colspan="3">`uname -a`</td>
114     </tr>
115     <tr valign="top">
116       <td><b>Guest kernel</b></td>
117       <td colspan="3">$KERNELVERSION</td>
118     </tr>
119     <tr valign="top">
120       <td><b>strongSwan</b></td>
121       <td colspan="3">$SWANVERSION</td>
122     </tr>
123     <tr valign="top">
124       <td><b>Date</b></td>
125       <td colspan="3">$TESTDATE</td>
126     </tr>
127     <tr>
128       <td width="100">&nbsp;</td>
129       <td width="300">&nbsp;</td>
130       <td width=" 50">&nbsp;</td>
131       <td >&nbsp;</td>
132     </tr>
133 @EOF
134 )
135
136 cat > $INDEX <<@EOF
137 <html>
138 <head>
139   <title>strongSwan UML Tests</title>
140 </head>
141 <body>
142   <h2>strongSwan UML Tests</h2>
143   $ENVIRONMENT_HEADER
144 @EOF
145
146 cat > $TESTRESULTSHTML <<@EOF
147 <html>
148 <head>
149   <title>strongSwan UML Tests - All Tests</title>
150 </head>
151 <body>
152   <div><a href="index.html">strongSwan UML Tests</a> / All Tests</div>
153   <h2>All Tests</h2>
154   $ENVIRONMENT_HEADER
155     <tr align="left">
156       <th>Number</th>
157       <th>Test</th>
158       <th colspan="2">Result</th>
159     </tr>
160 @EOF
161
162 echo "Guest kernel : $KERNELVERSION"
163 echo "strongSwan   : $SWANVERSION"
164 echo "Date         : $TESTDATE"
165 echo
166
167
168 ##############################################################################
169 # enter specific test directory
170 #
171
172 if [ $# -gt 0 ]
173 then
174     TESTS=$*
175 else
176     # set internal field seperator
177     TESTS="`ls $DEFAULTTESTSDIR`"
178 fi
179
180 for SUBDIR in $TESTS
181 do
182     SUBTESTS="`basename $SUBDIR`"
183
184     if [ $SUBTESTS = $SUBDIR ]
185     then
186         SUBTESTS="`ls $DEFAULTTESTSDIR/$SUBDIR`"
187     else
188         SUBDIR="`dirname $SUBDIR`"
189     fi
190
191     if [ ! -d $TODAYDIR/$SUBDIR ]
192     then
193         mkdir $TODAYDIR/$SUBDIR
194         if [ $testnumber == 0 ]
195         then
196             FIRST="<b>Category</b>"
197         else
198             FIRST="&nbsp;"
199         fi
200         echo "    <tr>" >> $INDEX
201     echo "      <td>$FIRST</td>">> $INDEX
202     echo "      <td><a href=\"$SUBDIR/index.html\">$SUBDIR</a></td>" >> $INDEX
203     echo "      <td align=\"right\">x</td>" >> $INDEX
204     echo "      <td>&nbsp;</td>" >> $INDEX
205     echo "    </tr>" >> $INDEX
206         SUBTESTSINDEX=$TODAYDIR/$SUBDIR/index.html
207         cat > $SUBTESTSINDEX <<@EOF
208 <html>
209 <head>
210   <title>strongSwan $SUBDIR Tests</title>
211 </head>
212 <body>
213   <div><a href="../index.html">strongSwan UML Tests</a> / $SUBDIR</div>
214   <h2>strongSwan $SUBDIR Tests</h2>
215   <table border="0" cellspacing="2" cellpadding="2">
216     <tr valign="top">
217       <td><b>UML kernel</b></td>
218       <td colspan="3">$KERNELVERSION</td>
219     </tr>
220     <tr valign="top">
221       <td><b>strongSwan</b></td>
222       <td colspan="3">$SWANVERSION</td>
223     </tr>
224     <tr valign="top">
225       <td><b>Date</b></td>
226       <td colspan="3">$TESTDATE</td>
227     </tr>
228     <tr>
229       <td width="100">&nbsp;</td>
230       <td width="300">&nbsp;</td>
231       <td width=" 50">&nbsp;</td>
232       <td >&nbsp;</td>
233     </tr>
234     <tr align="left">
235        <th>Number</th>
236        <th>Test</th>
237        <th colspan="2">Result</th>
238     </tr>
239 @EOF
240     fi
241
242     for name in $SUBTESTS
243     do
244         let "testnumber += 1"
245         testname=$SUBDIR/$name
246         log_action " $testnumber $testname:"
247
248         if [ ! -d $DEFAULTTESTSDIR/${testname} ]
249         then
250             echo "is missing..skipped"
251             continue
252         fi
253
254         if [ $SUBDIR = "ipv6" -o $name = "rw-psk-ipv6" ]
255         then
256             IPROUTE_CMD="ip -6 route list table $SOURCEIP_ROUTING_TABLE"
257             IPROUTE_DSP=$IPROUTE_CMD
258             IPTABLES_CMD="ip6tables -v -n -L"
259             IPTABLES_DSP="ip6tables -L"
260         else
261             IPROUTE_CMD="ip route list table $SOURCEIP_ROUTING_TABLE"
262             IPROUTE_DSP=$IPROUTE_CMD
263             IPTABLES_CMD="iptables -v -n -L"
264             IPTABLES_DSP="iptables -L"
265         fi
266
267         if [ $name = "net2net-ip4-in-ip6-ikev2" -o $name = "net2net-ip6-in-ip4-ikev2" ]
268         then
269             IPROUTE_CMD="ip route list table $SOURCEIP_ROUTING_TABLE; echo; ip -6 route list table $SOURCEIP_ROUTING_TABLE"
270             IPROUTE_DSP="ip (-6) route list table $SOURCEIP_ROUTING_TABLE"
271             IPTABLES_CMD="iptables -v -n -L ; echo ; ip6tables -v -n -L"
272             IPTABLES_DSP="iptables -L ; ip6tables -L"
273         fi
274
275         [ -f $DEFAULTTESTSDIR/${testname}/description.txt ] || die "!! File 'description.txt' is missing"
276         [ -f $DEFAULTTESTSDIR/${testname}/test.conf ]       || die "!! File 'test.conf' is missing"
277         [ -f $DEFAULTTESTSDIR/${testname}/pretest.dat ]     || die "!! File 'pretest.dat' is missing"
278         [ -f $DEFAULTTESTSDIR/${testname}/posttest.dat ]    || die "!! File 'posttest.dat' is missing"
279         [ -f $DEFAULTTESTSDIR/${testname}/evaltest.dat ]    || die "!! File 'evaltest.dat' is missing"
280
281         TESTRESULTDIR=$TODAYDIR/$testname
282         mkdir -p $TESTRESULTDIR
283         CONSOLE_LOG=$TESTRESULTDIR/console.log
284         touch $CONSOLE_LOG
285
286         TESTDIR=$TESTSDIR/${testname}
287         rm -rf $TESTDIR
288         mkdir -p $TESTDIR
289         cp -rfp $DEFAULTTESTSDIR/${testname}/* $TESTDIR
290
291
292         ##############################################################################
293         # replace IP wildcards with actual IPv4 and IPv6 addresses
294         #
295
296         for host in $STRONGSWANHOSTS
297         do
298             case $host in
299             moon)
300                 searchandreplace PH_IP_MOON1     $ipv4_moon1 $TESTDIR
301                 searchandreplace PH_IP_MOON      $ipv4_moon  $TESTDIR
302                 searchandreplace PH_IP6_MOON1    $ipv6_moon1 $TESTDIR
303                 searchandreplace PH_IP6_MOON     $ipv6_moon  $TESTDIR
304                 ;;
305             sun)
306                 searchandreplace PH_IP_SUN1      $ipv4_sun1 $TESTDIR
307                 searchandreplace PH_IP_SUN       $ipv4_sun  $TESTDIR
308                 searchandreplace PH_IP6_SUN1     $ipv6_sun1 $TESTDIR
309                 searchandreplace PH_IP6_SUN      $ipv6_sun  $TESTDIR
310                 ;;
311             alice)
312                 searchandreplace PH_IP_ALICE1    $ipv4_alice1 $TESTDIR
313                 searchandreplace PH_IP_ALICE     $ipv4_alice  $TESTDIR
314                 searchandreplace PH_IP6_ALICE1   $ipv6_alice1 $TESTDIR
315                 searchandreplace PH_IP6_ALICE    $ipv6_alice  $TESTDIR
316                 ;;
317             venus)
318                 searchandreplace PH_IP_VENUS     $ipv4_venus $TESTDIR
319                 searchandreplace PH_IP6_VENUS    $ipv6_venus $TESTDIR
320                 ;;
321             bob)
322                 searchandreplace PH_IP_BOB       $ipv4_bob $TESTDIR
323                 searchandreplace PH_IPV6_BOB     $ipv6_bob $TESTDIR
324                 ;;
325             carol)
326                 searchandreplace PH_IP_CAROL1    $ipv4_carol1 $TESTDIR
327                 searchandreplace PH_IP_CAROL     $ipv4_carol  $TESTDIR
328                 searchandreplace PH_IP6_CAROL1   $ipv6_carol1 $TESTDIR
329                 searchandreplace PH_IP6_CAROL    $ipv6_carol  $TESTDIR
330                 ;;
331             dave)
332                 searchandreplace PH_IP_DAVE1     $ipv4_dave1 $TESTDIR
333                 searchandreplace PH_IP_DAVE      $ipv4_dave  $TESTDIR
334                 searchandreplace PH_IP6_DAVE1    $ipv6_dave1 $TESTDIR
335                 searchandreplace PH_IP6_DAVE     $ipv6_dave  $TESTDIR
336                 ;;
337             winnetou)
338                 searchandreplace PH_IP_WINNETOU  $ipv4_winnetou $TESTDIR
339                 searchandreplace PH_IP6_WINNETOU $ipv6_winnetou $TESTDIR
340                 ;;
341             esac
342         done
343
344
345         ##########################################################################
346         # copy test specific configurations to uml hosts and clear auth.log files
347         #
348
349         $DIR/scripts/load-testconfig $testname
350         unset RADIUSHOSTS
351         source $TESTDIR/test.conf
352
353
354         ##########################################################################
355         # run tcpdump in the background
356         #
357
358         if [ "$TCPDUMPHOSTS" != "" ]
359         then
360             echo -e "TCPDUMP\n" >> $CONSOLE_LOG 2>&1
361
362             for host_iface in $TCPDUMPHOSTS
363             do
364                 host=`echo $host_iface | awk -F ":" '{print $1}'`
365                 iface=`echo $host_iface | awk -F ":" '{if ($2 != "") { print $2 } else { printf("eth0") }}'`
366                 tcpdump_cmd="tcpdump -i $iface not port ssh and not port domain > /tmp/tcpdump.log 2>&1 &"
367                 echo "${host}# $tcpdump_cmd" >> $CONSOLE_LOG
368                 ssh $SSHCONF root@`eval echo \\\$ipv4_$host '$tcpdump_cmd'`
369                 eval TDUP_${host}="true"
370             done
371         fi
372
373
374         ##########################################################################
375         # execute pre-test commands
376         #
377
378         echo -n "pre.."
379         echo -e "\nPRE-TEST\n" >> $CONSOLE_LOG 2>&1
380
381         eval `awk -F "::" '{
382             if ($2 != "")
383             {
384                 printf("echo \"%s# %s\"; ", $1, $2)
385                 printf("ssh \044SSHCONF root@\044ipv4_%s \"%s\"; ", $1, $2)
386                 printf("echo;\n")
387             }
388         }' $TESTDIR/pretest.dat` >> $CONSOLE_LOG 2>&1
389
390
391         ##########################################################################
392         # stop tcpdump
393         #
394
395         function stop_tcpdump {
396             echo "${1}# killall tcpdump" >> $CONSOLE_LOG
397             eval ssh $SSHCONF root@\$ipv4_${1} killall tcpdump
398             eval TDUP_${1}="false"
399             echo ""
400         }
401
402
403         ##########################################################################
404         # get and evaluate test results
405         #
406
407         echo -n "test.."
408         echo -e "\nTEST\n" >> $CONSOLE_LOG 2>&1
409
410         STATUS="passed"
411
412         eval `awk -F "::" '{
413             host=$1
414             command=$2
415             pattern=$3
416             hit=$4
417             if (command != "")
418             {
419                 if (command == "tcpdump")
420                 {
421                     printf("if [ \044TDUP_%s == \"true\" ]; then stop_tcpdump %s; fi; \n", host, host)
422                     printf("echo \"%s# cat /tmp/tcpdump.log | grep \047%s\047  [%s]\"; ", host, pattern, hit)
423                     printf("ssh \044SSHCONF root@\044ipv4_%s cat /tmp/tcpdump.log | grep \"%s\"; ", host, pattern)
424                 }
425                 else
426                 {
427                     printf("echo \"%s# %s | grep \047%s\047  [%s]\"; ", host, command, pattern, hit)
428                     printf("ssh \044SSHCONF root@\044ipv4_%s %s | grep \"%s\"; ",  host, command, pattern)
429                 }
430                 printf("cmd_exit=\044?; ")
431                 printf("echo; ")
432                 printf("if [ \044cmd_exit -eq 0 -a \"%s\" = \"NO\"  ] ", hit)
433                 printf("|| [ \044cmd_exit -ne 0 -a \"%s\" = \"YES\" ] ", hit)
434                 printf("; then STATUS=\"failed\"; fi; \n")
435             }
436         }' $TESTDIR/evaltest.dat` >> $CONSOLE_LOG 2>&1
437
438
439         ##########################################################################
440         # set counters
441         #
442
443         if [ $STATUS = "failed" ]
444         then
445             let "failed_cnt += 1"
446         else
447             let "passed_cnt += 1"
448         fi
449
450
451         ##########################################################################
452         # log statusall and listall output
453         # get copies of ipsec.conf, ipsec.secrets
454         # create index.html for the given test case
455
456         cat > $TESTRESULTDIR/index.html <<@EOF
457 <html>
458 <head>
459   <title>Test $testname</title>
460 </head>
461 <body>
462 <table border="0" cellpadding="0" cellspacing="0" width="600">
463   <tr><td>
464     <div><a href="../../index.html">strongSwan UML Tests</a> / <a href="../index.html">$SUBDIR</a> / $name</div>
465     <h2>Test $testname</h2>
466     <h3>Description</h3>
467 @EOF
468
469         cat $TESTDIR/description.txt >> $TESTRESULTDIR/index.html
470
471         cat >> $TESTRESULTDIR/index.html <<@EOF
472     <ul>
473       <li><a href="console.log">console.log</a></li>
474     </ul>
475     <img src="../../images/$DIAGRAM" alt="$UMLHOSTS">
476 @EOF
477
478         for host in $IPSECHOSTS
479         do
480             eval HOSTLOGIN=root@\$ipv4_${host}
481
482             for command in statusall listall
483             do
484                 ssh $SSHCONF $HOSTLOGIN ipsec $command \
485                     > $TESTRESULTDIR/${host}.$command 2>/dev/null
486             done
487
488             for file in strongswan.conf ipsec.conf ipsec.secrets
489             do
490                 scp $SSHCONF $HOSTLOGIN:/etc/$file \
491                     $TESTRESULTDIR/${host}.$file  > /dev/null 2>&1
492             done
493
494             scp $SSHCONF $HOSTLOGIN:/etc/ipsec.d/ipsec.sql \
495                 $TESTRESULTDIR/${host}.ipsec.sql  > /dev/null 2>&1
496
497             ssh $SSHCONF $HOSTLOGIN ip -s xfrm policy \
498                     > $TESTRESULTDIR/${host}.ip.policy 2>/dev/null
499             ssh $SSHCONF $HOSTLOGIN ip -s xfrm state \
500                     > $TESTRESULTDIR/${host}.ip.state 2>/dev/null
501             ssh $SSHCONF $HOSTLOGIN $IPROUTE_CMD \
502                     > $TESTRESULTDIR/${host}.ip.route 2>/dev/null
503             ssh $SSHCONF $HOSTLOGIN $IPTABLES_CMD \
504                     > $TESTRESULTDIR/${host}.iptables 2>/dev/null
505             chmod a+r $TESTRESULTDIR/*
506             cat >> $TESTRESULTDIR/index.html <<@EOF
507     <h3>$host</h3>
508       <table border="0" cellspacing="0" width="600">
509       <tr>
510         <td valign="top">
511           <ul>
512             <li><a href="$host.ipsec.conf">ipsec.conf</a></li>
513             <li><a href="$host.ipsec.secrets">ipsec.secrets</a></li>
514             <li><a href="$host.ipsec.sql">ipsec.sql</a></li>
515             <li><a href="$host.strongswan.conf">strongswan.conf</a></li>
516           </ul>
517         </td>
518         <td valign="top">
519           <ul>
520             <li><a href="$host.statusall">ipsec statusall</a></li>
521             <li><a href="$host.listall">ipsec listall</a></li>
522             <li><a href="$host.auth.log">auth.log</a></li>
523             <li><a href="$host.daemon.log">daemon.log</a></li>
524           </ul>
525       </td>
526         <td valign="top">
527           <ul>
528             <li><a href="$host.ip.policy">ip -s xfrm policy</a></li>
529             <li><a href="$host.ip.state">ip -s xfrm state</a></li>
530             <li><a href="$host.ip.route">$IPROUTE_DSP</a></li>
531             <li><a href="$host.iptables">$IPTABLES_DSP</a></li>
532           </ul>
533       </td>
534     </tr>
535     </table>
536 @EOF
537
538         done
539
540         for host in $RADIUSHOSTS
541         do
542             eval HOSTLOGIN=root@\$ipv4_${host}
543
544             for file in clients.conf eap.conf radiusd.conf proxy.conf users
545             do
546                 scp $SSHCONF $HOSTLOGIN:/etc/freeradius/$file \
547                     $TESTRESULTDIR/${host}.$file  > /dev/null 2>&1
548             done
549
550                 scp $SSHCONF $HOSTLOGIN:/etc/strongswan.conf \
551                     $TESTRESULTDIR/${host}.strongswan.conf  > /dev/null 2>&1
552
553             scp $SSHCONF $HOSTLOGIN:/var/log/freeradius/radius.log \
554                 $TESTRESULTDIR/${host}.radius.log  > /dev/null 2>&1
555
556             chmod a+r $TESTRESULTDIR/*
557             cat >> $TESTRESULTDIR/index.html <<@EOF
558     <h3>$host</h3>
559       <table border="0" cellspacing="0" width="600">
560       <tr>
561         <td valign="top">
562           <ul>
563             <li><a href="$host.clients.conf">clients.conf</a></li>
564             <li><a href="$host.radiusd.conf">radiusd.conf</a></li>
565             <li><a href="$host.strongswan.conf">strongswan.conf</a></li>
566           </ul>
567         </td>
568         <td valign="top">
569           <ul>
570             <li><a href="$host.eap.conf">eap.conf</a></li>
571             <li><a href="$host.radius.log">radius.log</a></li>
572           </ul>
573       </td>
574         <td valign="top">
575           <ul>
576             <li><a href="$host.proxy.conf">proxy.conf</a></li>
577             <li><a href="$host.users">users</a></li>
578           </ul>
579       </td>
580     </tr>
581     </table>
582 @EOF
583
584         done
585
586         cat >> $TESTRESULTDIR/index.html <<@EOF
587         <h3>tcpdump</h3>
588         <ul>
589 @EOF
590
591         for host in $TCPDUMPHOSTS
592         do
593             eval HOSTLOGIN=root@\$ipv4_${host}
594
595                 scp $SSHCONF $HOSTLOGIN:/tmp/tcpdump.log \
596                         $TESTRESULTDIR/${host}.tcpdump.log > /dev/null 2>&1
597
598             cat >> $TESTRESULTDIR/index.html <<@EOF
599             <li><a href="$host.tcpdump.log">$host tcpdump.log</a></li>
600 @EOF
601
602         done
603
604         cat >> $TESTRESULTDIR/index.html <<@EOF
605         </ul>
606 @EOF
607
608         cat >> $TESTRESULTDIR/index.html <<@EOF
609   </td></tr>
610 </table>
611 </body>
612 </html>
613 @EOF
614
615
616         ##########################################################################
617         # execute post-test commands
618         #
619
620         echo -n "post"
621         echo -e "\nPOST-TEST\n" >> $CONSOLE_LOG 2>&1
622
623         eval `awk -F "::" '{
624             if ($2 != "")
625             {
626                 printf("echo \"%s# %s\"; ", $1, $2)
627                 printf("ssh \044SSHCONF root@\044ipv4_%s \"%s\"; ", $1, $2)
628                 printf("echo;\n")
629             }
630         }' $TESTDIR/posttest.dat` >> $CONSOLE_LOG 2>&1
631
632
633         ##########################################################################
634         # get a copy of /var/log/auth.log
635         #
636
637         for host in $IPSECHOSTS
638         do
639             eval HOSTLOGIN=root@\$ipv4_${host}
640             ssh $SSHCONF $HOSTLOGIN "grep -E 'charon|last message repeated' \
641                 /var/log/auth.log" >> $TESTRESULTDIR/${host}.auth.log
642         done
643
644
645         ##########################################################################
646         # get a copy of /var/log/daemon.log
647         #
648
649         for host in $IPSECHOSTS
650         do
651             eval HOSTLOGIN=root@\$ipv4_${host}
652             ssh $SSHCONF $HOSTLOGIN "grep -E 'charon|last message repeated' \
653                 /var/log/daemon.log" >> $TESTRESULTDIR/${host}.daemon.log
654         done
655
656
657         ##########################################################################
658         # stop tcpdump if necessary
659         #
660
661         for host in $TCPDUMPHOSTS
662         do
663             if [ "`eval echo \\\$TDUP_${host}`" = "true" ]
664             then
665                 echo "${host}# killall tcpdump" >> $CONSOLE_LOG
666                 eval ssh $SSHCONF root@\$ipv4_$host killall tcpdump
667                 eval TDUP_${host}="false"
668             fi
669         done
670
671
672         ##########################################################################
673         # copy default host config back if necessary
674         #
675
676         $DIR/scripts/restore-defaults $testname
677
678
679         ##########################################################################
680         # write test status to html file
681         #
682
683         if [ $STATUS = "passed" ]
684         then
685                 COLOR="green"
686                 log_status 0
687         else
688                 COLOR="red"
689                 log_status 1
690         fi
691
692         cat >> $TESTRESULTSHTML << @EOF
693   <tr>
694     <td>$testnumber</td>
695     <td><a href="$testname/index.html">$testname</a></td>
696     <td><a href="$testname/console.log"><font color="$COLOR">$STATUS</font></a></td>
697     <td>&nbsp;</td>
698   </tr>
699 @EOF
700         cat >> $SUBTESTSINDEX << @EOF
701   <tr>
702     <td>$testnumber</td>
703     <td><a href="$name/index.html">$name</a></td>
704     <td><a href="$name/console.log"><font color="$COLOR">$STATUS</font></a></td>
705     <td>&nbsp;</td>
706   </tr>
707 @EOF
708
709
710         ##########################################################################
711         # remove any charon.pid files that still may exist
712         #
713
714         for host in $IPSECHOSTS
715         do
716             eval HOSTLOGIN=root@\$ipv4_${host}
717             ssh $SSHCONF $HOSTLOGIN 'if [ -f /var/run/charon.pid ]; then rm /var/run/charon.pid; echo "    removed charon.pid on `hostname`"; fi'
718         done
719
720     done
721
722 done
723
724
725 ##############################################################################
726 # finish the results html file
727 #
728
729 cat >> $TESTRESULTSHTML << @EOF
730     <tr>
731       <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
732     </tr>
733     <tr>
734       <td><b>Passed</b></td><td><b><font color="green">$passed_cnt</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
735     </tr>
736     <tr>
737       <td><b>Failed</b></td><td><b><font color="red">$failed_cnt</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
738     </tr>
739   </table>
740 </body>
741 </html>
742 @EOF
743
744 let "all_cnt = $passed_cnt + $failed_cnt"
745
746 cat >> $INDEX << @EOF
747     <tr>
748       <td>&nbsp;</td>
749       <td><a href="all.html"><b>all</b></a></td>
750       <td align="right"><b>$all_cnt</b></td>
751       <td>&nbsp;</td>
752     </tr>
753     <tr>
754       <td><b>Failed</b></td>
755       <td>&nbsp;</td>
756       <td align="right"><b><font color="red">$failed_cnt</font></b></td>
757       <td>&nbsp;</td>
758     </tr>
759   </table>
760 </body>
761 </html>
762 @EOF
763
764 echo
765 echo_ok     "Passed : $passed_cnt"
766 echo_failed "Failed : $failed_cnt"
767 echo
768
769
770 ##############################################################################
771 # copy the test results to the apache server
772 #
773
774 HTDOCS="/var/www"
775
776 ssh $SSHCONF root@${ipv4_winnetou} mkdir -p $HTDOCS/testresults > /dev/null 2>&1
777 scp $SSHCONF -r $TODAYDIR root@${ipv4_winnetou}:$HTDOCS/testresults > /dev/null 2>&1
778 ssh $SSHCONF root@${ipv4_winnetou} ln -s $HTDOCS/images $HTDOCS/testresults/$TESTDATE/images > /dev/null 2>&1
779 echo
780 echo "The results are available in $TODAYDIR"
781 echo "or via the link http://$ipv4_winnetou/testresults/$TESTDATE"
782
783 ENDDATE=`date +%Y%m%d-%H%M`
784 echo
785 echo "Finished : $ENDDATE"