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