]> git.ipfire.org Git - thirdparty/strongswan.git/blame - testing/do-tests
Version bump to 5.7.2dr4
[thirdparty/strongswan.git] / testing / do-tests
CommitLineData
997358a6
MW
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.
997358a6 16
aafc0a17
RB
17DIR=$(dirname `readlink -f $0`)
18. $DIR/testing.conf
19. $DIR/scripts/function.sh
b5f3c1f7 20SSHCONF="-F $DIR/ssh_config"
aafc0a17
RB
21
22[ -d $DIR/hosts ] || die "Directory 'hosts' not found"
23[ -d $DIR/tests ] || die "Directory 'tests' not found"
24[ -d $BUILDDIR ] ||
25 die "Directory '$BUILDDIR' does not exist, please run make-testing first"
008a9ad1 26running_any $STRONGSWANHOSTS || die "Please start test environment before running $0"
997358a6 27
49b1655a
RB
28ln -sfT $DIR $TESTDIR/testing
29
997358a6
MW
30##############################################################################
31# take care of new path and file variables
32#
33
34[ -d $TESTRESULTSDIR ] || mkdir $TESTRESULTSDIR
35
e3a30133 36TESTDATE=`date +%Y%m%d-%H%M-%S`
997358a6
MW
37
38TODAYDIR=$TESTRESULTSDIR/$TESTDATE
39mkdir $TODAYDIR
ad9da6ec
AS
40TESTRESULTSHTML=$TODAYDIR/all.html
41INDEX=$TODAYDIR/index.html
bf48ee33 42DEFAULTTESTSDIR=$TESTDIR/testing/tests
997358a6 43
d94f6a2f 44SOURCEIP_ROUTING_TABLE=220
90b21fde 45
997358a6
MW
46testnumber="0"
47failed_cnt="0"
48passed_cnt="0"
bdd7c42f 49subdir_cnt="0"
997358a6 50
c11d13c4
TB
51##############################################################################
52# parse optional arguments
53#
c7a74fd3 54while getopts "vt" opt
c11d13c4
TB
55do
56 case "$opt" in
57 v)
58 verbose=YES
c7a74fd3
TB
59 timestamps=YES
60 ;;
61 t)
62 timestamps=YES
c11d13c4
TB
63 ;;
64 esac
65done
66shift $((OPTIND-1))
67
68
69function print_time()
70{
c7a74fd3 71 [ "$timestamps" == "YES" ] && echo "$(date +%T.%N) ~ "
c11d13c4
TB
72}
73
997358a6
MW
74##############################################################################
75# copy default tests to $BUILDDIR
76#
77
78TESTSDIR=$BUILDDIR/tests
79[ -d $TESTSDIR ] || mkdir $TESTSDIR
997358a6
MW
80
81##############################################################################
82# assign IP for each host to hostname
83#
84
85for host in $STRONGSWANHOSTS
86do
fc0afb68
AS
87 eval ipv4_${host}="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $1 }' | awk '{ print $1 }'`"
88 eval ipv6_${host}="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $1 }' | awk '{ print $1 }'`"
016816b8 89
997358a6
MW
90 case $host in
91 moon)
fc0afb68 92 eval ipv4_moon1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
fc0afb68 93 eval ipv6_moon1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
997358a6
MW
94 ;;
95 sun)
fc0afb68 96 eval ipv4_sun1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
fc0afb68 97 eval ipv6_sun1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
997358a6
MW
98 ;;
99 alice)
c598ac63
AS
100 eval ipv4_alice1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
101 eval ipv6_alice1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
997358a6
MW
102 ;;
103 venus)
997358a6
MW
104 ;;
105 bob)
997358a6
MW
106 ;;
107 carol)
fc0afb68 108 eval ipv4_carol1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
fc0afb68 109 eval ipv6_carol1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
016816b8 110 ;;
997358a6 111 dave)
fc0afb68 112 eval ipv4_dave1="`echo $HOSTNAMEIPV4 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
fc0afb68 113 eval ipv6_dave1="`echo $HOSTNAMEIPV6 | sed -n -e "s/^.*${host},//gp" | awk -F, '{ print $2 }' | awk '{ print $1 }'`"
997358a6
MW
114 ;;
115 winnetou)
997358a6
MW
116 ;;
117 esac
118done
119
120
7ec11936
TB
121##############################################################################
122# open ssh sessions
123#
124for host in $STRONGSWANHOSTS
125do
18bce26e 126 ssh $SSHCONF -N root@`eval echo \\\$ipv4_$host` >/dev/null 2>&1 &
7ec11936 127 eval ssh_pid_$host="`echo $!`"
50fb9b84 128 do_on_exit kill `eval echo \\\$ssh_pid_$host`
7ec11936
TB
129done
130
bcad0f76
TB
131##############################################################################
132# determine actual software versions
133#
134
135[ -f $SHAREDDIR/.strongswan-version ] && SWANVERSION=`cat $SHAREDDIR/.strongswan-version`
136KERNELVERSION=`ssh $SSHCONF root@\$ipv4_winnetou uname -r 2>/dev/null`
7ec11936 137
63acd803
TB
138# check if tcpdump supports --immediate-mode
139ssh $SSHCONF root@$ipv4_winnetou tcpdump --immediate-mode -c 1 >/dev/null 2>&1
140if [ $? -eq 0 ]
141then
142 TCPDUMP_IM=--immediate-mode
143fi
144
997358a6
MW
145##############################################################################
146# create header for the results html file
147#
148
e296fc2d 149ENVIRONMENT_HEADER=$(cat <<@EOF
beff82dd 150 <table border="0" cellspacing="2" cellpadding="2">
ad9da6ec 151 <tr valign="top">
beff82dd 152 <td><b>Host</b></td>
ad9da6ec
AS
153 <td colspan="3">`uname -a`</td>
154 </tr>
155 <tr valign="top">
8cb4628f 156 <td><b>Guest kernel</b></td>
beff82dd 157 <td colspan="3">$KERNELVERSION</td>
ad9da6ec
AS
158 </tr>
159 <tr valign="top">
beff82dd
RB
160 <td><b>strongSwan</b></td>
161 <td colspan="3">$SWANVERSION</td>
ad9da6ec
AS
162 </tr>
163 <tr valign="top">
beff82dd 164 <td><b>Date</b></td>
ad9da6ec
AS
165 <td colspan="3">$TESTDATE</td>
166 </tr>
167 <tr>
168 <td width="100">&nbsp;</td>
d94f6a2f 169 <td width="300">&nbsp;</td>
d4908c06 170 <td width=" 80">&nbsp;</td>
ad9da6ec
AS
171 <td >&nbsp;</td>
172 </tr>
997358a6 173@EOF
e296fc2d
TB
174)
175
176cat > $INDEX <<@EOF
177<html>
178<head>
b2783641 179 <title>strongSwan KVM Tests</title>
e296fc2d
TB
180</head>
181<body>
b2783641 182 <h2>strongSwan KVM Tests</h2>
e296fc2d
TB
183 $ENVIRONMENT_HEADER
184@EOF
997358a6 185
e296fc2d
TB
186cat > $TESTRESULTSHTML <<@EOF
187<html>
188<head>
b2783641 189 <title>strongSwan KVM Tests - All Tests</title>
e296fc2d
TB
190</head>
191<body>
b2783641 192 <div><a href="index.html">strongSwan KVM Tests</a> / All Tests</div>
e296fc2d
TB
193 <h2>All Tests</h2>
194 $ENVIRONMENT_HEADER
ad9da6ec
AS
195 <tr align="left">
196 <th>Number</th>
197 <th>Test</th>
d4908c06
TB
198 <th align="right">Time [s]</th>
199 <th>Result</th>
ad9da6ec 200 </tr>
7e4f8db2
AS
201@EOF
202
8cb4628f
RB
203echo "Guest kernel : $KERNELVERSION"
204echo "strongSwan : $SWANVERSION"
205echo "Date : $TESTDATE"
206echo
997358a6 207
379d94eb
TB
208##############################################################################
209# trap CTRL-C to properly terminate a long run
210#
211
212function abort_tests()
213{
214 echo -n "...aborting..." > /dev/tty
215 aborted=YES
216}
217trap abort_tests INT
997358a6
MW
218
219##############################################################################
220# enter specific test directory
221#
997358a6
MW
222if [ $# -gt 0 ]
223then
bdd7c42f 224 TESTS=$(printf "%s\n" $* | sort -u)
997358a6 225else
bdd7c42f 226 TESTS=$(ls $DEFAULTTESTSDIR)
997358a6
MW
227fi
228
d9a883c3 229for SUBDIR in $TESTS
997358a6 230do
d9a883c3 231 SUBTESTS="`basename $SUBDIR`"
016816b8 232
49917f00
TB
233 if [ $SUBTESTS = $SUBDIR ]
234 then
235 SUBTESTS="`ls $DEFAULTTESTSDIR/$SUBDIR`"
236 else
237 if [[ $SUBTESTS == *'*'* ]]
238 then
239 SUBTESTS="`basename -a $DEFAULTTESTSDIR/$SUBDIR`"
240 fi
241 SUBDIR="`dirname $SUBDIR`"
242 fi
997358a6 243
7e4f8db2
AS
244 if [ ! -d $TODAYDIR/$SUBDIR ]
245 then
246 mkdir $TODAYDIR/$SUBDIR
ad9da6ec
AS
247 if [ $testnumber == 0 ]
248 then
beff82dd 249 FIRST="<b>Category</b>"
ad9da6ec
AS
250 else
251 FIRST="&nbsp;"
252 fi
bdd7c42f
TB
253
254 if [ $subdir_cnt != 0 ]
255 then
256 echo " <td align=\"right\">$subdir_cnt</td>" >> $INDEX
257 echo " <td>&nbsp;</td>" >> $INDEX
258 echo " </tr>" >> $INDEX
259 subdir_cnt="0"
260 fi
3367fa8b
AS
261 echo " <tr>" >> $INDEX
262 echo " <td>$FIRST</td>">> $INDEX
263 echo " <td><a href=\"$SUBDIR/index.html\">$SUBDIR</a></td>" >> $INDEX
bdd7c42f 264
ad9da6ec
AS
265 SUBTESTSINDEX=$TODAYDIR/$SUBDIR/index.html
266 cat > $SUBTESTSINDEX <<@EOF
267<html>
268<head>
269 <title>strongSwan $SUBDIR Tests</title>
270</head>
271<body>
b2783641 272 <div><a href="../index.html">strongSwan KVM Tests</a> / $SUBDIR</div>
ad9da6ec 273 <h2>strongSwan $SUBDIR Tests</h2>
beff82dd 274 <table border="0" cellspacing="2" cellpadding="2">
ad9da6ec 275 <tr valign="top">
b2783641 276 <td><b>Guest kernel</b></td>
beff82dd 277 <td colspan="3">$KERNELVERSION</td>
ad9da6ec
AS
278 </tr>
279 <tr valign="top">
beff82dd
RB
280 <td><b>strongSwan</b></td>
281 <td colspan="3">$SWANVERSION</td>
ad9da6ec
AS
282 </tr>
283 <tr valign="top">
beff82dd 284 <td><b>Date</b></td>
ad9da6ec
AS
285 <td colspan="3">$TESTDATE</td>
286 </tr>
287 <tr>
288 <td width="100">&nbsp;</td>
d94f6a2f 289 <td width="300">&nbsp;</td>
ad9da6ec
AS
290 <td width=" 50">&nbsp;</td>
291 <td >&nbsp;</td>
292 </tr>
293 <tr align="left">
294 <th>Number</th>
295 <th>Test</th>
296 <th colspan="2">Result</th>
297 </tr>
298@EOF
7e4f8db2
AS
299 fi
300
d9a883c3
AS
301 for name in $SUBTESTS
302 do
303 let "testnumber += 1"
bdd7c42f 304 let "subdir_cnt += 1"
d9a883c3 305 testname=$SUBDIR/$name
8cb4628f 306 log_action " $testnumber $testname:"
997358a6 307
d4908c06
TB
308 teststart=$(date +%s)
309
d9a883c3
AS
310 if [ ! -d $DEFAULTTESTSDIR/${testname} ]
311 then
8cb4628f 312 echo "is missing..skipped"
d9a883c3
AS
313 continue
314 fi
997358a6 315
d9a883c3
AS
316 [ -f $DEFAULTTESTSDIR/${testname}/description.txt ] || die "!! File 'description.txt' is missing"
317 [ -f $DEFAULTTESTSDIR/${testname}/test.conf ] || die "!! File 'test.conf' is missing"
318 [ -f $DEFAULTTESTSDIR/${testname}/pretest.dat ] || die "!! File 'pretest.dat' is missing"
319 [ -f $DEFAULTTESTSDIR/${testname}/posttest.dat ] || die "!! File 'posttest.dat' is missing"
320 [ -f $DEFAULTTESTSDIR/${testname}/evaltest.dat ] || die "!! File 'evaltest.dat' is missing"
016816b8 321
d9a883c3
AS
322 TESTRESULTDIR=$TODAYDIR/$testname
323 mkdir -p $TESTRESULTDIR
324 CONSOLE_LOG=$TESTRESULTDIR/console.log
325 touch $CONSOLE_LOG
016816b8 326
d9a883c3 327 TESTDIR=$TESTSDIR/${testname}
997358a6 328
d9a883c3 329 ##########################################################################
d8b2980a 330 # copy test specific configurations to hosts and clear log files
d9a883c3 331 #
997358a6 332
e873cb5a
TB
333 DBDIR=/etc/db.d
334
d9a883c3 335 $DIR/scripts/load-testconfig $testname
fc293c96 336 unset RADIUSHOSTS
e873cb5a 337 unset DBHOSTS
6b265c5e
AS
338 unset IPV6
339 unset SWANCTL
d9a883c3 340 source $TESTDIR/test.conf
997358a6 341
997358a6 342
d9a883c3
AS
343 ##########################################################################
344 # run tcpdump in the background
345 #
997358a6 346
d9a883c3
AS
347 if [ "$TCPDUMPHOSTS" != "" ]
348 then
349 echo -e "TCPDUMP\n" >> $CONSOLE_LOG 2>&1
350
351 for host_iface in $TCPDUMPHOSTS
352 do
353 host=`echo $host_iface | awk -F ":" '{print $1}'`
354 iface=`echo $host_iface | awk -F ":" '{if ($2 != "") { print $2 } else { printf("eth0") }}'`
63acd803 355 tcpdump_cmd="tcpdump -l $TCPDUMP_IM -i $iface not port ssh and not port domain >/tmp/tcpdump.log 2>/tmp/tcpdump.err.log &"
c11d13c4 356 echo "$(print_time)${host}# $tcpdump_cmd" >> $CONSOLE_LOG
7ec11936 357 ssh $SSHCONF root@`eval echo \\\$ipv4_$host '$tcpdump_cmd'`
d9a883c3
AS
358 eval TDUP_${host}="true"
359 done
360 fi
361
e873cb5a
TB
362 ##########################################################################
363 # create database directory in RAM
364 #
365
366 for host in $DBHOSTS
367 do
368 eval HOSTLOGIN=root@\$ipv4_${host}
369 ssh $SSHCONF $HOSTLOGIN "mkdir -p $DBDIR; mount -t ramfs -o size=5m ramfs $DBDIR" >/dev/null 2>&1
370 ssh $SSHCONF $HOSTLOGIN "chgrp www-data $DBDIR; chmod g+w $DBDIR" >/dev/null 2>&1
371 done
372
7a61bf90
TB
373 ##########################################################################
374 # flush conntrack table on all hosts
375 #
376
377 for host in $STRONGSWANHOSTS
378 do
379 ssh $SSHCONF root@`eval echo \\\$ipv4_$host` 'conntrack -F' >/dev/null 2>&1
380 done
381
d8b2980a
TB
382 ##########################################################################
383 # remove leak detective log on all hosts
384 #
385
386 export LEAK_DETECTIVE_LOG=/var/log/leak-detective.log
387 for host in $STRONGSWANHOSTS
388 do
389 ssh $SSHCONF root@`eval echo \\\$ipv4_$host` 'rm -f $LEAK_DETECTIVE_LOG' >/dev/null 2>&1
390 done
391
c91682d1
TB
392 ##########################################################################
393 # flush IPsec state on all hosts
394 #
395
396 for host in $STRONGSWANHOSTS
397 do
398 ssh $SSHCONF root@`eval echo \\\$ipv4_$host` 'ip xfrm state flush; ip xfrm policy flush' >/dev/null 2>&1
399 done
d9a883c3
AS
400
401 ##########################################################################
402 # execute pre-test commands
403 #
997358a6 404
8cb4628f 405 echo -n "pre.."
d9a883c3 406 echo -e "\nPRE-TEST\n" >> $CONSOLE_LOG 2>&1
997358a6 407
d9a883c3 408 eval `awk -F "::" '{
92ccc0b4 409 if ($1 !~ /^#.*/ && $2 != "")
d9a883c3 410 {
c11d13c4 411 printf("echo \"$(print_time)%s# %s\"; ", $1, $2)
7ec11936 412 printf("ssh \044SSHCONF root@\044ipv4_%s \"%s\"; ", $1, $2)
d9a883c3
AS
413 printf("echo;\n")
414 }
415 }' $TESTDIR/pretest.dat` >> $CONSOLE_LOG 2>&1
997358a6 416
997358a6 417
d9a883c3
AS
418 ##########################################################################
419 # stop tcpdump
420 #
997358a6 421
d9a883c3 422 function stop_tcpdump {
63acd803
TB
423 # wait for packets to get processed, but don't wait longer than 1s
424 eval ssh $SSHCONF root@\$ipv4_${1} "\"i=100; while [ \\\$i -gt 0 ]; do pkill -USR1 tcpdump; tail -1 /tmp/tcpdump.err.log | perl -n -e '/(\\d+).*?(\\d+)/; exit (\\\$1 == \\\$2)' || break; sleep 0.01; i=\\\$((\\\$i-1)); done;\""
c11d13c4 425 echo "$(print_time)${1}# killall tcpdump" >> $CONSOLE_LOG
71424a2f 426 eval ssh $SSHCONF root@\$ipv4_${1} "\"killall tcpdump; while true; do killall -q -0 tcpdump || break; sleep 0.01; done;\""
d9a883c3 427 eval TDUP_${1}="false"
71424a2f 428 echo "" >> $CONSOLE_LOG
d9a883c3 429 }
997358a6 430
997358a6 431
d9a883c3
AS
432 ##########################################################################
433 # get and evaluate test results
434 #
997358a6 435
8cb4628f 436 echo -n "test.."
d9a883c3
AS
437 echo -e "\nTEST\n" >> $CONSOLE_LOG 2>&1
438
439 STATUS="passed"
440
441 eval `awk -F "::" '{
99cf64e9
TB
442 host=$1
443 command=$2
444 pattern=$3
445 hit=$4
446 if (host ~ /^#.*/ || command == "")
447 {
448 next
449 }
f0d051f1 450 printf("cmd_err=\044(tempfile -p test -s err); ")
5cfd7311 451 printf("cmd_out=\044(tempfile -p test -s out); ")
d9a883c3
AS
452 if (command == "tcpdump")
453 {
99cf64e9 454 printf("if [ \044TDUP_%s == \"true\" ]; then stop_tcpdump %s; fi; \n", host, host)
5cfd7311 455 printf("ssh \044SSHCONF root@\044ipv4_%s cat /tmp/tcpdump.log > \044cmd_out; ", host)
d9a883c3
AS
456 }
457 else
458 {
5cfd7311 459 printf("ssh \044SSHCONF root@\044ipv4_%s %s >\044cmd_out 2>\044cmd_err; ", host, command)
d9a883c3 460 }
5cfd7311 461 printf("cmd_res=\044(cat \044cmd_out | grep \"%s\"); ", pattern)
d9a883c3 462 printf("cmd_exit=\044?; ")
87c6247e 463 printf("cmd_fail=0; ")
99cf64e9
TB
464 if (hit ~ /^[0-9]+$/)
465 {
5cfd7311 466 printf("if [ \044(echo \"\044cmd_res\" | wc -l) -ne %d ] ", hit)
99cf64e9
TB
467 }
468 else
469 {
470 printf("if [ \044cmd_exit -eq 0 -a \"%s\" = \"NO\" ] ", hit)
471 printf("|| [ \044cmd_exit -ne 0 -a \"%s\" = \"YES\" ] ", hit)
472 }
87c6247e
TB
473 printf("; then STATUS=\"failed\"; cmd_fail=1; fi; \n")
474
475 printf("if [ \044cmd_fail -ne 0 ]; then echo \"~~~~~~~ FAIL ~~~~~~~\"; fi; \n")
476 if (command == "tcpdump")
477 {
c11d13c4 478 printf("echo \"$(print_time)%s# cat /tmp/tcpdump.log | grep \047%s\047 [%s]\"; ", host, pattern, hit)
87c6247e
TB
479 }
480 else
481 {
c11d13c4 482 printf("echo \"$(print_time)%s# %s | grep \047%s\047 [%s]\"; ", host, command, pattern, hit)
87c6247e 483 }
5cfd7311
TB
484 printf("if [ -n \"\044cmd_res\" ]; then echo \"\044cmd_res\"; fi; \n")
485 printf("cat \044cmd_err; \n")
486 printf("if [ \044cmd_fail -ne 0 ]; then \n")
487 printf("if [ -s \044cmd_out ]; then echo \"~~ output ~~~~~~~~~~\"; \n")
488 printf("if [ \"\044verbose\" == \"YES\" ]; then cat \044cmd_out;\n")
489 printf("else cat \044cmd_out | head; fi; fi; \n")
490 printf("echo \"~~~~~~~~~~~~~~~~~~~~\"; fi; \n")
491 printf("rm -f -- \044cmd_out \044cmd_err; \n")
87c6247e 492 printf("echo; ")
d9a883c3 493 }' $TESTDIR/evaltest.dat` >> $CONSOLE_LOG 2>&1
997358a6 494
997358a6 495
d9a883c3
AS
496 ##########################################################################
497 # log statusall and listall output
498 # get copies of ipsec.conf, ipsec.secrets
499 # create index.html for the given test case
997358a6 500
d9a883c3 501 cat > $TESTRESULTDIR/index.html <<@EOF
997358a6
MW
502<html>
503<head>
504 <title>Test $testname</title>
505</head>
506<body>
e8ae55f6 507<table border="0" cellpadding="0" cellspacing="0" width="600">
997358a6 508 <tr><td>
b2783641 509 <div><a href="../../index.html">strongSwan KVM Tests</a> / <a href="../index.html">$SUBDIR</a> / $name</div>
997358a6
MW
510 <h2>Test $testname</h2>
511 <h3>Description</h3>
512@EOF
513
d9a883c3 514 cat $TESTDIR/description.txt >> $TESTRESULTDIR/index.html
997358a6 515
d9a883c3 516 cat >> $TESTRESULTDIR/index.html <<@EOF
997358a6
MW
517 <ul>
518 <li><a href="console.log">console.log</a></li>
519 </ul>
7699a928 520 <img src="../../images/$DIAGRAM" alt="$VIRTHOSTS">
997358a6
MW
521@EOF
522
fa36699b
TB
523 IPTABLES_CMD_V4="echo -e '=== filter table ==='; iptables -v -n -L; echo -e '\n=== nat table ==='; iptables -v -n -t nat -L; echo -e '\n=== mangle table ==='; iptables -v -n -t mangle -L"
524 IPTABLES_CMD_V6="echo -e '=== filter table ==='; ip6tables -v -n -L; echo -e '\n=== nat table ==='; ip6tables -v -n -t nat -L; echo -e '\n=== mangle table ==='; ip6tables -v -n -t mangle -L"
525
db69295d 526 if [ -n "$IPV6" ]
6b265c5e
AS
527 then
528 IPROUTE_CMD="ip -6 route list table $SOURCEIP_ROUTING_TABLE"
529 IPROUTE_DSP=$IPROUTE_CMD
fa36699b 530 IPTABLES_CMD="$IPTABLES_CMD_V6"
6b265c5e 531 IPTABLES_DSP="ip6tables -L"
ac67aeb1
TB
532 IPTABLES_SAVE_CMD="ip6tables-save"
533 IPTABLES_SAVE_DSP="ip6tables-save"
6b265c5e
AS
534 else
535 IPROUTE_CMD="ip route list table $SOURCEIP_ROUTING_TABLE"
536 IPROUTE_DSP=$IPROUTE_CMD
fa36699b 537 IPTABLES_CMD="$IPTABLES_CMD_V4"
6b265c5e 538 IPTABLES_DSP="iptables -L"
ac67aeb1
TB
539 IPTABLES_SAVE_CMD="iptables-save"
540 IPTABLES_SAVE_DSP="iptables-save"
6b265c5e
AS
541 fi
542
543 if [ $name = "net2net-ip4-in-ip6-ikev2" -o $name = "net2net-ip6-in-ip4-ikev2" ]
544 then
545 IPROUTE_CMD="ip route list table $SOURCEIP_ROUTING_TABLE; echo; ip -6 route list table $SOURCEIP_ROUTING_TABLE"
546 IPROUTE_DSP="ip (-6) route list table $SOURCEIP_ROUTING_TABLE"
fa36699b 547 IPTABLES_CMD="$IPTABLES_CMD_V4; echo; $IPTABLES_CMD_V6"
6b265c5e 548 IPTABLES_DSP="iptables -L ; ip6tables -L"
ac67aeb1
TB
549 IPTABLES_SAVE_CMD="iptables-save; echo; ip6tables-save"
550 IPTABLES_SAVE_DSP="iptables-save ; ip6tables-save"
6b265c5e
AS
551 fi
552
9db53049
AS
553 for host in $DBHOSTS
554 do
555 eval HOSTLOGIN=root@\$ipv4_${host}
556
557 scp $SSHCONF $HOSTLOGIN:/etc/db.d/ipsec.sql \
558 $TESTRESULTDIR/${host}.ipsec.sql > /dev/null 2>&1
559 done
560
d9a883c3 561 for host in $IPSECHOSTS
997358a6 562 do
d9a883c3 563 eval HOSTLOGIN=root@\$ipv4_${host}
997358a6 564
2721832a
AS
565 scp $SSHCONF $HOSTLOGIN:/etc/strongswan.conf \
566 $TESTRESULTDIR/${host}.strongswan.conf > /dev/null 2>&1
6b265c5e 567 if [ -n "$SWANCTL" ]
2721832a
AS
568 then
569 scp $SSHCONF $HOSTLOGIN:/etc/swanctl/swanctl.conf \
570 $TESTRESULTDIR/${host}.swanctl.conf > /dev/null 2>&1
571
6789d79d 572 for subsys in conns algs certs pools authorities sas pols
12f08e07
TB
573 do
574 ssh $SSHCONF $HOSTLOGIN swanctl --list-$subsys \
575 > $TESTRESULTDIR/${host}.swanctl.$subsys 2>/dev/null
576 done
ed428746 577
12f08e07
TB
578 ssh $SSHCONF $HOSTLOGIN swanctl --stats \
579 > $TESTRESULTDIR/${host}.swanctl.stats 2>/dev/null
6789d79d 580
9db53049
AS
581 echo "" >> $TESTRESULTDIR/${host}.swanctl.sas
582 cat $TESTRESULTDIR/${host}.swanctl.pols >> \
583 $TESTRESULTDIR/${host}.swanctl.sas
6789d79d
AS
584 cat $TESTRESULTDIR/${host}.swanctl.algs >> \
585 $TESTRESULTDIR/${host}.swanctl.stats
2721832a
AS
586 else
587 for file in ipsec.conf ipsec.secrets
588 do
589 scp $SSHCONF $HOSTLOGIN:/etc/$file \
590 $TESTRESULTDIR/${host}.$file > /dev/null 2>&1
591 done
592
593 for command in statusall listall
594 do
595 ssh $SSHCONF $HOSTLOGIN ipsec $command \
596 > $TESTRESULTDIR/${host}.$command 2>/dev/null
597 done
9db53049 598 fi
2721832a 599
9db53049
AS
600 if (! [ -f $TESTRESULTDIR/${host}.ipsec.sql ] ) then
601 scp $SSHCONF $HOSTLOGIN:/etc/ipsec.d/ipsec.sql \
602 $TESTRESULTDIR/${host}.ipsec.sql > /dev/null 2>&1
2721832a 603 fi
decfd8e5 604
7ec11936 605 ssh $SSHCONF $HOSTLOGIN ip -s xfrm policy \
096b7f68 606 > $TESTRESULTDIR/${host}.ip.policy 2>/dev/null
7ec11936 607 ssh $SSHCONF $HOSTLOGIN ip -s xfrm state \
096b7f68 608 > $TESTRESULTDIR/${host}.ip.state 2>/dev/null
6d3702ed 609 ssh $SSHCONF $HOSTLOGIN $IPROUTE_CMD \
096b7f68 610 > $TESTRESULTDIR/${host}.ip.route 2>/dev/null
7ec11936 611 ssh $SSHCONF $HOSTLOGIN $IPTABLES_CMD \
7e4f8db2 612 > $TESTRESULTDIR/${host}.iptables 2>/dev/null
ac67aeb1
TB
613 ssh $SSHCONF $HOSTLOGIN $IPTABLES_SAVE_CMD \
614 > $TESTRESULTDIR/${host}.iptables-save 2>/dev/null
2e6342db 615 chmod a+r $TESTRESULTDIR/*
2721832a 616
6b265c5e 617 if [ -n "$SWANCTL" ]
2721832a
AS
618 then
619 cat >> $TESTRESULTDIR/index.html <<@EOF
620 <h3>$host</h3>
621 <table border="0" cellspacing="0" width="600">
622 <tr>
623 <td valign="top">
624 <ul>
625 <li><a href="$host.swanctl.conf">swanctl.conf</a></li>
626 <li><a href="$host.swanctl.conns">swanctl --list-conns</a></li>
627 <li><a href="$host.swanctl.certs">swanctl --list-certs</a></li>
628 <li><a href="$host.strongswan.conf">strongswan.conf</a></li>
9db53049 629 <li><a href="$host.ipsec.sql">ipsec.sql</a></li>
2721832a
AS
630 </ul>
631 </td>
632 <td valign="top">
633 <ul>
9db53049
AS
634 <li><a href="$host.swanctl.sas">swanctl --list-sas|--list-pols</a></li>
635 <li><a href="$host.swanctl.pools">swanctl --list-pools</a></li>
450c6e8d 636 <li><a href="$host.swanctl.authorities">swanctl --list-authorities</a></li>
6789d79d 637 <li><a href="$host.swanctl.stats">swanctl --stats|--list-algs</a></li>
ac67aeb1 638 <li><a href="$host.auth.log">auth.log</a></li>
2721832a
AS
639 <li><a href="$host.daemon.log">daemon.log</a></li>
640 </ul>
641 </td>
642 <td valign="top">
643 <ul>
644 <li><a href="$host.ip.policy">ip -s xfrm policy</a></li>
645 <li><a href="$host.ip.state">ip -s xfrm state</a></li>
646 <li><a href="$host.ip.route">$IPROUTE_DSP</a></li>
647 <li><a href="$host.iptables">$IPTABLES_DSP</a></li>
ac67aeb1 648 <li><a href="$host.iptables-save">$IPTABLES_SAVE_DSP</a></li>
2721832a 649 </ul>
ed428746 650 &nbsp;
2721832a
AS
651 </td>
652 </tr>
653 </table>
654@EOF
655
656 else
657 cat >> $TESTRESULTDIR/index.html <<@EOF
997358a6 658 <h3>$host</h3>
babaaa3c 659 <table border="0" cellspacing="0" width="600">
7e4f8db2 660 <tr>
096b7f68 661 <td valign="top">
7e4f8db2
AS
662 <ul>
663 <li><a href="$host.ipsec.conf">ipsec.conf</a></li>
664 <li><a href="$host.ipsec.secrets">ipsec.secrets</a></li>
096b7f68
AS
665 <li><a href="$host.ipsec.sql">ipsec.sql</a></li>
666 <li><a href="$host.strongswan.conf">strongswan.conf</a></li>
7e4f8db2
AS
667 </ul>
668 </td>
096b7f68 669 <td valign="top">
7e4f8db2 670 <ul>
096b7f68
AS
671 <li><a href="$host.statusall">ipsec statusall</a></li>
672 <li><a href="$host.listall">ipsec listall</a></li>
7e4f8db2
AS
673 <li><a href="$host.auth.log">auth.log</a></li>
674 <li><a href="$host.daemon.log">daemon.log</a></li>
babaaa3c
AS
675 </ul>
676 </td>
677 <td valign="top">
678 <ul>
e25bedb7
AS
679 <li><a href="$host.ip.policy">ip -s xfrm policy</a></li>
680 <li><a href="$host.ip.state">ip -s xfrm state</a></li>
6d3702ed 681 <li><a href="$host.ip.route">$IPROUTE_DSP</a></li>
ec37b047 682 <li><a href="$host.iptables">$IPTABLES_DSP</a></li>
ac67aeb1 683 <li><a href="$host.iptables-save">$IPTABLES_SAVE_DSP</a></li>
babaaa3c 684 </ul>
7e4f8db2
AS
685 </td>
686 </tr>
687 </table>
997358a6 688@EOF
2721832a 689 fi
d9a883c3 690 done
997358a6 691
f9cfb5c8
AS
692 for host in $RADIUSHOSTS
693 do
694 eval HOSTLOGIN=root@\$ipv4_${host}
695
2132031d
TB
696 RADIUS_DIR=/etc/freeradius/3.0
697 RADIUS_EAP_FILE=mods-enabled/eap
698 RADIUS_EAP_NAME=eap
699 if [ "$BASEIMGSUITE" == "jessie" ]
700 then
701 RADIUS_DIR=/etc/freeradius
702 RADIUS_EAP_FILE=eap.conf
703 RADIUS_EAP_NAME=eap.conf
704 fi
705
706 for file in clients.conf radiusd.conf proxy.conf users sites-enabled/default sites-enabled/inner-tunnel $RADIUS_EAP_FILE
f9cfb5c8 707 do
2132031d
TB
708 scp $SSHCONF $HOSTLOGIN:$RADIUS_DIR/$file \
709 $TESTRESULTDIR/${host}.$(basename $file) > /dev/null 2>&1
f9cfb5c8
AS
710 done
711
aa5803e0 712 scp $SSHCONF $HOSTLOGIN:/var/log/freeradius/radius.log \
d94f6a2f 713 $TESTRESULTDIR/${host}.radius.log > /dev/null 2>&1
f9cfb5c8
AS
714
715 chmod a+r $TESTRESULTDIR/*
716 cat >> $TESTRESULTDIR/index.html <<@EOF
717 <h3>$host</h3>
718 <table border="0" cellspacing="0" width="600">
719 <tr>
720 <td valign="top">
721 <ul>
722 <li><a href="$host.clients.conf">clients.conf</a></li>
723 <li><a href="$host.radiusd.conf">radiusd.conf</a></li>
2132031d 724 <li><a href="$host.$RADIUS_EAP_NAME">$RADIUS_EAP_NAME</a></li>
f9cfb5c8
AS
725 </ul>
726 </td>
727 <td valign="top">
728 <ul>
2132031d
TB
729 <li><a href="$host.default">sites-enabled/default</a></li>
730 <li><a href="$host.inner-tunnel">sites-enabled/inner-tunnel</a></li>
f9cfb5c8
AS
731 <li><a href="$host.radius.log">radius.log</a></li>
732 </ul>
733 </td>
734 <td valign="top">
735 <ul>
736 <li><a href="$host.proxy.conf">proxy.conf</a></li>
737 <li><a href="$host.users">users</a></li>
738 </ul>
739 </td>
740 </tr>
741 </table>
742@EOF
743
744 done
745
669fc9f9
TB
746 cat >> $TESTRESULTDIR/index.html <<@EOF
747 <h3>tcpdump</h3>
748 <ul>
749@EOF
750
751 for host in $TCPDUMPHOSTS
752 do
669fc9f9
TB
753 cat >> $TESTRESULTDIR/index.html <<@EOF
754 <li><a href="$host.tcpdump.log">$host tcpdump.log</a></li>
755@EOF
669fc9f9
TB
756 done
757
758 cat >> $TESTRESULTDIR/index.html <<@EOF
759 </ul>
760@EOF
761
d9a883c3 762 cat >> $TESTRESULTDIR/index.html <<@EOF
997358a6 763 </td></tr>
997358a6
MW
764</table>
765</body>
766</html>
767@EOF
768
769
d9a883c3
AS
770 ##########################################################################
771 # execute post-test commands
772 #
997358a6 773
8cb4628f 774 echo -n "post"
d9a883c3 775 echo -e "\nPOST-TEST\n" >> $CONSOLE_LOG 2>&1
997358a6 776
d9a883c3 777 eval `awk -F "::" '{
92ccc0b4 778 if ($1 !~ /^#.*/ && $2 != "")
d9a883c3 779 {
c11d13c4 780 printf("echo \"$(print_time)%s# %s\"; ", $1, $2)
7ec11936 781 printf("ssh \044SSHCONF root@\044ipv4_%s \"%s\"; ", $1, $2)
d9a883c3
AS
782 printf("echo;\n")
783 }
784 }' $TESTDIR/posttest.dat` >> $CONSOLE_LOG 2>&1
997358a6 785
9086f060
TB
786 ##########################################################################
787 # check that IPsec state was cleaned up properly
788 #
789
790 for host in $IPSECHOSTS
791 do
792 eval HOSTLOGIN=root@\$ipv4_${host}
793 IPSECSTATE=`ssh $SSHCONF $HOSTLOGIN 'ip xfrm state'`
4492c9c6
TB
794 # ignore IPv4/v6 states created with IPComp SAs
795 IPSECSTATEISSUE=`echo "$IPSECSTATE" | grep 'proto.*spi' | grep -v 'proto 4'`
9086f060 796 IPSECPOLICY=`ssh $SSHCONF $HOSTLOGIN 'ip xfrm policy'`
4492c9c6 797 if [ -n "$IPSECSTATEISSUE" -o -n "$IPSECPOLICY" ]
9086f060
TB
798 then
799 echo -e "\n$host# ip xfrm state [NO]" >> $CONSOLE_LOG
800 echo "$IPSECSTATE" >> $CONSOLE_LOG
801 echo -e "\n$host# ip xfrm policy [NO]" >> $CONSOLE_LOG
802 echo "$IPSECPOLICY" >> $CONSOLE_LOG
803 STATUS="failed"
804 fi
805 done
997358a6 806
d8b2980a
TB
807
808 ##########################################################################
809 # make sure there were no leaks
810 #
811
812 for host in $STRONGSWANHOSTS
813 do
814 eval HOSTLOGIN=root@\$ipv4_${host}
815 LEAKS=`ssh $SSHCONF $HOSTLOGIN 'cat $LEAK_DETECTIVE_LOG 2>/dev/null | grep -v "No leaks detected.*"'`
816 if [ -n "$LEAKS" ]
817 then
818 echo -e "\n$host# cat $LEAK_DETECTIVE_LOG [NO]" >> $CONSOLE_LOG
819 echo "$LEAKS" >> $CONSOLE_LOG
820 echo "<<< $host $LEAK_DETECTIVE_LOG >>>" >> $CONSOLE_LOG
821 STATUS="failed"
822 fi
823 done
824
825
d9a883c3
AS
826 ##########################################################################
827 # get a copy of /var/log/auth.log
828 #
997358a6 829
d9a883c3
AS
830 for host in $IPSECHOSTS
831 do
832 eval HOSTLOGIN=root@\$ipv4_${host}
e22a6631 833 ssh $SSHCONF $HOSTLOGIN "grep -s -E 'charon|last message repeated|imcv|pt-tls-client' \
60672331 834 /var/log/auth.log" >> $TESTRESULTDIR/${host}.auth.log
d9a883c3 835 done
997358a6
MW
836
837
114c6646
AS
838 ##########################################################################
839 # get a copy of /var/log/daemon.log
840 #
841
842 for host in $IPSECHOSTS
843 do
844 eval HOSTLOGIN=root@\$ipv4_${host}
67a97c18 845 ssh $SSHCONF $HOSTLOGIN "grep -s -E 'systemd|swanctl|charon|last message repeated|imcv' \
60672331 846 /var/log/daemon.log" >> $TESTRESULTDIR/${host}.daemon.log
114c6646
AS
847 done
848
849
d9a883c3
AS
850 ##########################################################################
851 # stop tcpdump if necessary
852 #
997358a6 853
d9a883c3
AS
854 for host in $TCPDUMPHOSTS
855 do
856 if [ "`eval echo \\\$TDUP_${host}`" = "true" ]
857 then
71424a2f 858 stop_tcpdump $host
d9a883c3 859 fi
71424a2f
TB
860 eval HOSTLOGIN=root@\$ipv4_${host}
861 scp $SSHCONF $HOSTLOGIN:/tmp/tcpdump.log \
862 $TESTRESULTDIR/${host}.tcpdump.log > /dev/null 2>&1
d9a883c3 863 done
997358a6 864
e873cb5a
TB
865 ##########################################################################
866 # remove database directory if needed
867 #
868
869 for host in $DBHOSTS
870 do
871 eval HOSTLOGIN=root@\$ipv4_${host}
872 ssh $SSHCONF $HOSTLOGIN "umount $DBDIR; rm -r $DBDIR" > /dev/null 2>&1
873 done
997358a6 874
d9a883c3
AS
875 ##########################################################################
876 # copy default host config back if necessary
877 #
997358a6 878
d9a883c3 879 $DIR/scripts/restore-defaults $testname
997358a6
MW
880
881
6307a18f
TB
882 ##########################################################################
883 # set counters
884 #
885
886 if [ $STATUS = "failed" ]
887 then
888 let "failed_cnt += 1"
889 else
890 let "passed_cnt += 1"
891 fi
892
893
d9a883c3
AS
894 ##########################################################################
895 # write test status to html file
896 #
d4908c06
TB
897 testend=$(date +%s)
898 let "testend -= teststart"
899 let "timetotal += testend"
997358a6 900
d9a883c3
AS
901 if [ $STATUS = "passed" ]
902 then
8cb4628f
RB
903 COLOR="green"
904 log_status 0
d9a883c3 905 else
8cb4628f
RB
906 COLOR="red"
907 log_status 1
d9a883c3 908 fi
997358a6 909
d9a883c3 910 cat >> $TESTRESULTSHTML << @EOF
997358a6
MW
911 <tr>
912 <td>$testnumber</td>
ca25eb9e 913 <td><a href="$testname/index.html">$testname</a></td>
d4908c06 914 <td align="right">$testend</td>
997358a6 915 <td><a href="$testname/console.log"><font color="$COLOR">$STATUS</font></a></td>
ad9da6ec
AS
916 </tr>
917@EOF
918 cat >> $SUBTESTSINDEX << @EOF
919 <tr>
920 <td>$testnumber</td>
ca25eb9e 921 <td><a href="$name/index.html">$name</a></td>
ad9da6ec
AS
922 <td><a href="$name/console.log"><font color="$COLOR">$STATUS</font></a></td>
923 <td>&nbsp;</td>
997358a6
MW
924 </tr>
925@EOF
926
85011819
AS
927
928 ##########################################################################
929 # remove any charon.pid files that still may exist
930 #
931
932 for host in $IPSECHOSTS
933 do
934 eval HOSTLOGIN=root@\$ipv4_${host}
7ec11936 935 ssh $SSHCONF $HOSTLOGIN 'if [ -f /var/run/charon.pid ]; then rm /var/run/charon.pid; echo " removed charon.pid on `hostname`"; fi'
85011819
AS
936 done
937
379d94eb
TB
938 if [ -n "$aborted" ]
939 then
940 break 2
941 fi
942
d9a883c3 943 done
ad9da6ec 944
997358a6
MW
945done
946
947
948##############################################################################
949# finish the results html file
950#
951
952cat >> $TESTRESULTSHTML << @EOF
a855af95
TB
953 <tr>
954 <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
955 </tr>
956 <tr>
beff82dd 957 <td><b>Passed</b></td><td><b><font color="green">$passed_cnt</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
a855af95
TB
958 </tr>
959 <tr>
beff82dd 960 <td><b>Failed</b></td><td><b><font color="red">$failed_cnt</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
a855af95 961 </tr>
d4908c06
TB
962 <tr>
963 <td><b>Time [s]</b></td><td><b><font color="blue">$timetotal</font></b></td><td>&nbsp;</td><td>&nbsp;</td>
964 </tr>
997358a6 965 </table>
997358a6
MW
966</body>
967</html>
968@EOF
969
bdd7c42f
TB
970if [ $subdir_cnt != 0 ]
971then
972cat >> $INDEX << @EOF
973 <td align="right">$subdir_cnt</td>
974 <td>&nbsp;</td>
975 </tr>
976@EOF
977fi
978
ad9da6ec
AS
979let "all_cnt = $passed_cnt + $failed_cnt"
980
981cat >> $INDEX << @EOF
982 <tr>
983 <td>&nbsp;</td>
984 <td><a href="all.html"><b>all</b></a></td>
3367fa8b
AS
985 <td align="right"><b>$all_cnt</b></td>
986 <td>&nbsp;</td>
ad9da6ec
AS
987 </tr>
988 <tr>
beff82dd 989 <td><b>Failed</b></td>
ad9da6ec 990 <td>&nbsp;</td>
3367fa8b
AS
991 <td align="right"><b><font color="red">$failed_cnt</font></b></td>
992 <td>&nbsp;</td>
ad9da6ec 993 </tr>
7e4f8db2
AS
994 </table>
995</body>
996</html>
997@EOF
998
8cb4628f
RB
999echo
1000echo_ok "Passed : $passed_cnt"
1001echo_failed "Failed : $failed_cnt"
997358a6 1002
8cb4628f
RB
1003echo
1004echo "The results are available in $TODAYDIR"
1005echo "or via the link http://$ipv4_winnetou/testresults/$TESTDATE"
7ec11936 1006
d4908c06 1007ENDDATE=`date +%Y%m%d-%H%M-%S`
8cb4628f
RB
1008echo
1009echo "Finished : $ENDDATE"