Rename UML to KVM 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 `readlink -f $0`)
18 . $DIR/testing.conf
19 . $DIR/scripts/function.sh
20
21 [ -d $DIR/hosts ] || die "Directory 'hosts' not found"
22 [ -d $DIR/tests ] || die "Directory 'tests' not found"
23 [ -d $BUILDDIR ] ||
24         die "Directory '$BUILDDIR' does not exist, please run make-testing first"
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 KVM Tests</title>
140 </head>
141 <body>
142   <h2>strongSwan KVM Tests</h2>
143   $ENVIRONMENT_HEADER
144 @EOF
145
146 cat > $TESTRESULTSHTML <<@EOF
147 <html>
148 <head>
149   <title>strongSwan KVM Tests - All Tests</title>
150 </head>
151 <body>
152   <div><a href="index.html">strongSwan KVM 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 KVM 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>Guest 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 KVM 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             ssh $SSHCONF $HOSTLOGIN grep imcv /var/log/daemon.log \
557                 >> $TESTRESULTDIR/${host}.daemon.log
558
559             chmod a+r $TESTRESULTDIR/*
560             cat >> $TESTRESULTDIR/index.html <<@EOF
561     <h3>$host</h3>
562       <table border="0" cellspacing="0" width="600">
563       <tr>
564         <td valign="top">
565           <ul>
566             <li><a href="$host.clients.conf">clients.conf</a></li>
567             <li><a href="$host.radiusd.conf">radiusd.conf</a></li>
568             <li><a href="$host.strongswan.conf">strongswan.conf</a></li>
569           </ul>
570         </td>
571         <td valign="top">
572           <ul>
573             <li><a href="$host.eap.conf">eap.conf</a></li>
574             <li><a href="$host.radius.log">radius.log</a></li>
575             <li><a href="$host.daemon.log">daemon.log</a></li>
576           </ul>
577       </td>
578         <td valign="top">
579           <ul>
580             <li><a href="$host.proxy.conf">proxy.conf</a></li>
581             <li><a href="$host.users">users</a></li>
582           </ul>
583       </td>
584     </tr>
585     </table>
586 @EOF
587
588         done
589
590         cat >> $TESTRESULTDIR/index.html <<@EOF
591         <h3>tcpdump</h3>
592         <ul>
593 @EOF
594
595         for host in $TCPDUMPHOSTS
596         do
597             eval HOSTLOGIN=root@\$ipv4_${host}
598
599                 scp $SSHCONF $HOSTLOGIN:/tmp/tcpdump.log \
600                         $TESTRESULTDIR/${host}.tcpdump.log > /dev/null 2>&1
601
602             cat >> $TESTRESULTDIR/index.html <<@EOF
603             <li><a href="$host.tcpdump.log">$host tcpdump.log</a></li>
604 @EOF
605
606         done
607
608         cat >> $TESTRESULTDIR/index.html <<@EOF
609         </ul>
610 @EOF
611
612         cat >> $TESTRESULTDIR/index.html <<@EOF
613   </td></tr>
614 </table>
615 </body>
616 </html>
617 @EOF
618
619
620         ##########################################################################
621         # execute post-test commands
622         #
623
624         echo -n "post"
625         echo -e "\nPOST-TEST\n" >> $CONSOLE_LOG 2>&1
626
627         eval `awk -F "::" '{
628             if ($2 != "")
629             {
630                 printf("echo \"%s# %s\"; ", $1, $2)
631                 printf("ssh \044SSHCONF root@\044ipv4_%s \"%s\"; ", $1, $2)
632                 printf("echo;\n")
633             }
634         }' $TESTDIR/posttest.dat` >> $CONSOLE_LOG 2>&1
635
636
637         ##########################################################################
638         # get a copy of /var/log/auth.log
639         #
640
641         for host in $IPSECHOSTS
642         do
643             eval HOSTLOGIN=root@\$ipv4_${host}
644             ssh $SSHCONF $HOSTLOGIN "grep -E 'charon|last message repeated' \
645                 /var/log/auth.log" >> $TESTRESULTDIR/${host}.auth.log
646         done
647
648
649         ##########################################################################
650         # get a copy of /var/log/daemon.log
651         #
652
653         for host in $IPSECHOSTS
654         do
655             eval HOSTLOGIN=root@\$ipv4_${host}
656             ssh $SSHCONF $HOSTLOGIN "grep -E 'charon|last message repeated' \
657                 /var/log/daemon.log" >> $TESTRESULTDIR/${host}.daemon.log
658         done
659
660
661         ##########################################################################
662         # stop tcpdump if necessary
663         #
664
665         for host in $TCPDUMPHOSTS
666         do
667             if [ "`eval echo \\\$TDUP_${host}`" = "true" ]
668             then
669                 echo "${host}# killall tcpdump" >> $CONSOLE_LOG
670                 eval ssh $SSHCONF root@\$ipv4_$host killall tcpdump
671                 eval TDUP_${host}="false"
672             fi
673         done
674
675
676         ##########################################################################
677         # copy default host config back if necessary
678         #
679
680         $DIR/scripts/restore-defaults $testname
681
682
683         ##########################################################################
684         # write test status to html file
685         #
686
687         if [ $STATUS = "passed" ]
688         then
689                 COLOR="green"
690                 log_status 0
691         else
692                 COLOR="red"
693                 log_status 1
694         fi
695
696         cat >> $TESTRESULTSHTML << @EOF
697   <tr>
698     <td>$testnumber</td>
699     <td><a href="$testname/index.html">$testname</a></td>
700     <td><a href="$testname/console.log"><font color="$COLOR">$STATUS</font></a></td>
701     <td>&nbsp;</td>
702   </tr>
703 @EOF
704         cat >> $SUBTESTSINDEX << @EOF
705   <tr>
706     <td>$testnumber</td>
707     <td><a href="$name/index.html">$name</a></td>
708     <td><a href="$name/console.log"><font color="$COLOR">$STATUS</font></a></td>
709     <td>&nbsp;</td>
710   </tr>
711 @EOF
712
713
714         ##########################################################################
715         # remove any charon.pid files that still may exist
716         #
717
718         for host in $IPSECHOSTS
719         do
720             eval HOSTLOGIN=root@\$ipv4_${host}
721             ssh $SSHCONF $HOSTLOGIN 'if [ -f /var/run/charon.pid ]; then rm /var/run/charon.pid; echo "    removed charon.pid on `hostname`"; fi'
722         done
723
724     done
725
726 done
727
728
729 ##############################################################################
730 # finish the results html file
731 #
732
733 cat >> $TESTRESULTSHTML << @EOF
734     <tr>
735       <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
736     </tr>
737     <tr>
738       <td><b>Passed</b></td><td><b><font color="green">$passed_cnt</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
739     </tr>
740     <tr>
741       <td><b>Failed</b></td><td><b><font color="red">$failed_cnt</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
742     </tr>
743   </table>
744 </body>
745 </html>
746 @EOF
747
748 let "all_cnt = $passed_cnt + $failed_cnt"
749
750 cat >> $INDEX << @EOF
751     <tr>
752       <td>&nbsp;</td>
753       <td><a href="all.html"><b>all</b></a></td>
754       <td align="right"><b>$all_cnt</b></td>
755       <td>&nbsp;</td>
756     </tr>
757     <tr>
758       <td><b>Failed</b></td>
759       <td>&nbsp;</td>
760       <td align="right"><b><font color="red">$failed_cnt</font></b></td>
761       <td>&nbsp;</td>
762     </tr>
763   </table>
764 </body>
765 </html>
766 @EOF
767
768 echo
769 echo_ok     "Passed : $passed_cnt"
770 echo_failed "Failed : $failed_cnt"
771 echo
772
773
774 ##############################################################################
775 # copy the test results to the apache server
776 #
777
778 HTDOCS="/var/www"
779
780 ssh $SSHCONF root@${ipv4_winnetou} mkdir -p $HTDOCS/testresults > /dev/null 2>&1
781 scp $SSHCONF -r $TODAYDIR root@${ipv4_winnetou}:$HTDOCS/testresults > /dev/null 2>&1
782 ssh $SSHCONF root@${ipv4_winnetou} ln -s $HTDOCS/images $HTDOCS/testresults/$TESTDATE/images > /dev/null 2>&1
783 echo
784 echo "The results are available in $TODAYDIR"
785 echo "or via the link http://$ipv4_winnetou/testresults/$TESTDATE"
786
787 ENDDATE=`date +%Y%m%d-%H%M`
788 echo
789 echo "Finished : $ENDDATE"