testing: Use an on-guest script to cleanup/initialize and run them in parallel
This is a bit quicker than doing this with separate SSH calls for each host sequentially (up to half a second per test).
This commit is contained in:
+21
-47
@@ -43,6 +43,8 @@ DEFAULTTESTSDIR=$TESTDIR/testing/tests
|
|||||||
|
|
||||||
SOURCEIP_ROUTING_TABLE=220
|
SOURCEIP_ROUTING_TABLE=220
|
||||||
|
|
||||||
|
export LEAK_DETECTIVE_LOG=/var/log/leak-detective.log
|
||||||
|
|
||||||
testnumber="0"
|
testnumber="0"
|
||||||
failed_cnt="0"
|
failed_cnt="0"
|
||||||
passed_cnt="0"
|
passed_cnt="0"
|
||||||
@@ -337,69 +339,41 @@ do
|
|||||||
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# run tcpdump in the background
|
# clean up and initialize test hosts
|
||||||
#
|
#
|
||||||
|
|
||||||
if [ "$TCPDUMPHOSTS" != "" ]
|
declare -A INIT_OPTIONS=()
|
||||||
then
|
|
||||||
echo -e "TCPDUMP\n" >> $CONSOLE_LOG 2>&1
|
|
||||||
|
|
||||||
for host_iface in $TCPDUMPHOSTS
|
for host in $TCPDUMPHOSTS
|
||||||
do
|
do
|
||||||
host=`echo $host_iface | awk -F ":" '{print $1}'`
|
# all hosts currently capture on eth0
|
||||||
iface=`echo $host_iface | awk -F ":" '{if ($2 != "") { print $2 } else { printf("eth0") }}'`
|
INIT_OPTIONS[${host}]="${INIT_OPTIONS[${host}]} -i eth0"
|
||||||
tcpdump_cmd="tcpdump -l --immediate-mode -i $iface not port ssh and not port domain >/tmp/tcpdump.log 2>/tmp/tcpdump.err.log &"
|
|
||||||
echo "$(print_time)${host}# $tcpdump_cmd" >> $CONSOLE_LOG
|
|
||||||
ssh $SSHCONF root@`eval echo \\\$ipv4_$host '$tcpdump_cmd'`
|
|
||||||
eval TDUP_${host}="true"
|
eval TDUP_${host}="true"
|
||||||
done
|
done
|
||||||
fi
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
# create database directory in RAM
|
|
||||||
#
|
|
||||||
|
|
||||||
for host in $DBHOSTS
|
for host in $DBHOSTS
|
||||||
|
do
|
||||||
|
INIT_OPTIONS[${host}]="${INIT_OPTIONS[${host}]} -d $DBDIR"
|
||||||
|
done
|
||||||
|
|
||||||
|
# initialize hosts in parallel
|
||||||
|
WAIT_FOR=()
|
||||||
|
|
||||||
|
for host in $STRONGSWANHOSTS
|
||||||
do
|
do
|
||||||
eval HOSTLOGIN=root@\$ipv4_${host}
|
eval HOSTLOGIN=root@\$ipv4_${host}
|
||||||
ssh $SSHCONF $HOSTLOGIN "mkdir -p $DBDIR; mount -t ramfs -o size=5m ramfs $DBDIR" >/dev/null 2>&1
|
ssh $SSHCONF $HOSTLOGIN /usr/local/bin/init-test ${INIT_OPTIONS[${host}]} &
|
||||||
ssh $SSHCONF $HOSTLOGIN "chgrp www-data $DBDIR; chmod g+w $DBDIR" >/dev/null 2>&1
|
WAIT_FOR+=($!)
|
||||||
done
|
done
|
||||||
|
|
||||||
##########################################################################
|
wait ${WAIT_FOR[@]}
|
||||||
# flush conntrack table on all hosts
|
|
||||||
#
|
|
||||||
|
|
||||||
for host in $STRONGSWANHOSTS
|
|
||||||
do
|
|
||||||
ssh $SSHCONF root@`eval echo \\\$ipv4_$host` 'conntrack -F' >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
# remove leak detective log on all hosts
|
|
||||||
#
|
|
||||||
|
|
||||||
export LEAK_DETECTIVE_LOG=/var/log/leak-detective.log
|
|
||||||
for host in $STRONGSWANHOSTS
|
|
||||||
do
|
|
||||||
ssh $SSHCONF root@`eval echo \\\$ipv4_$host` 'rm -f $LEAK_DETECTIVE_LOG' >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
# flush IPsec state on all hosts
|
|
||||||
#
|
|
||||||
|
|
||||||
for host in $STRONGSWANHOSTS
|
|
||||||
do
|
|
||||||
ssh $SSHCONF root@`eval echo \\\$ipv4_$host` 'ip xfrm state flush; ip xfrm policy flush' >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# execute pre-test commands
|
# execute pre-test commands
|
||||||
#
|
#
|
||||||
|
|
||||||
echo -n "pre.."
|
echo -n "pre.."
|
||||||
echo -e "\nPRE-TEST\n" >> $CONSOLE_LOG 2>&1
|
echo -e "PRE-TEST\n" >> $CONSOLE_LOG 2>&1
|
||||||
|
|
||||||
eval `awk -F "::" '{
|
eval `awk -F "::" '{
|
||||||
if ($0 ~ /^#.*/)
|
if ($0 ~ /^#.*/)
|
||||||
|
|||||||
+38
@@ -0,0 +1,38 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
while getopts "i:d:" opt
|
||||||
|
do
|
||||||
|
case "$opt" in
|
||||||
|
i)
|
||||||
|
INTERFACE=${OPTARG}
|
||||||
|
;;
|
||||||
|
d)
|
||||||
|
DB=${OPTARG}
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
|
# start tcpdump in the background
|
||||||
|
if [ -n "$INTERFACE" ]
|
||||||
|
then
|
||||||
|
tcpdump -l --immediate-mode -i $INTERFACE not port ssh and not port domain >/tmp/tcpdump.log 2>/tmp/tcpdump.err.log &
|
||||||
|
fi
|
||||||
|
|
||||||
|
# setup ramdisk for databases
|
||||||
|
if [ -n "$DB" ]
|
||||||
|
then
|
||||||
|
mkdir -p $DB
|
||||||
|
mount -t ramfs -o size=5m ramfs $DB
|
||||||
|
chgrp www-data $DB
|
||||||
|
chmod g+w $DB
|
||||||
|
fi
|
||||||
|
|
||||||
|
# flush conntrack table
|
||||||
|
conntrack -F >/dev/null 2>&1
|
||||||
|
|
||||||
|
# flush IPsec state
|
||||||
|
ip xfrm state flush
|
||||||
|
ip xfrm policy flush
|
||||||
|
|
||||||
|
# remove leak detective log
|
||||||
|
rm -f $LEAK_DETECTIVE_LOG
|
||||||
Reference in New Issue
Block a user