Module Name: src Committed By: ozaki-r Date: Mon Jan 16 08:18:11 UTC 2017
Modified Files: src/distrib/sets/lists/debug: mi src/tests/net/carp: Makefile Added Files: src/tests/net/carp: t_basic.sh Removed Files: src/tests/net/carp: t_basic.c Log Message: Rewrite tests for CARP in a shell script instead of C The new shell script enables us to modify/add tests easily. To generate a diff of this commit: cvs rdiff -u -r1.191 -r1.192 src/distrib/sets/lists/debug/mi cvs rdiff -u -r1.5 -r1.6 src/tests/net/carp/Makefile cvs rdiff -u -r1.6 -r0 src/tests/net/carp/t_basic.c cvs rdiff -u -r0 -r1.1 src/tests/net/carp/t_basic.sh Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/debug/mi diff -u src/distrib/sets/lists/debug/mi:1.191 src/distrib/sets/lists/debug/mi:1.192 --- src/distrib/sets/lists/debug/mi:1.191 Sat Jan 7 20:40:08 2017 +++ src/distrib/sets/lists/debug/mi Mon Jan 16 08:18:11 2017 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.191 2017/01/07 20:40:08 christos Exp $ +# $NetBSD: mi,v 1.192 2017/01/16 08:18:11 ozaki-r Exp $ ./etc/mtree/set.debug comp-sys-root ./usr/lib comp-sys-usr compatdir ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile @@ -2237,7 +2237,7 @@ ./usr/libdata/debug/usr/tests/net/bpfjit/t_cop.debug tests-net-debug debug,atf,sljit,rump ./usr/libdata/debug/usr/tests/net/bpfjit/t_extmem.debug tests-net-debug debug,atf,sljit,rump ./usr/libdata/debug/usr/tests/net/bpfjit/t_mbuf.debug tests-net-debug debug,atf,sljit,rump -./usr/libdata/debug/usr/tests/net/carp/t_basic.debug tests-net-debug debug,atf,rump +./usr/libdata/debug/usr/tests/net/carp/t_basic.debug tests-net-debug debug,atf,rump,obsolete ./usr/libdata/debug/usr/tests/net/fdpass/fdpass32.debug tests-net-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/net/fdpass/fdpass64.debug tests-net-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/net/icmp/t_forward.debug tests-net-debug debug,atf,rump Index: src/tests/net/carp/Makefile diff -u src/tests/net/carp/Makefile:1.5 src/tests/net/carp/Makefile:1.6 --- src/tests/net/carp/Makefile:1.5 Mon Aug 8 14:40:19 2016 +++ src/tests/net/carp/Makefile Mon Jan 16 08:18:11 2017 @@ -1,13 +1,13 @@ -# $NetBSD: Makefile,v 1.5 2016/08/08 14:40:19 pgoyette Exp $ +# $NetBSD: Makefile,v 1.6 2017/01/16 08:18:11 ozaki-r Exp $ # .include <bsd.own.mk> TESTSDIR= ${TESTSBASE}/net/carp -TESTS_C= t_basic - -LDADD+= -lrumpnet_shmif -lrumpnet_netinet -lrumpnet_net -lrumpdev -LDADD+= -lrumpnet -lrump -lrumpuser -lrumpvfs -lpthread +.for name in basic +TESTS_SH+= t_${name} +TESTS_SH_SRC_t_${name}= ../net_common.sh t_${name}.sh +.endfor .include <bsd.test.mk> Added files: Index: src/tests/net/carp/t_basic.sh diff -u /dev/null src/tests/net/carp/t_basic.sh:1.1 --- /dev/null Mon Jan 16 08:18:11 2017 +++ src/tests/net/carp/t_basic.sh Mon Jan 16 08:18:11 2017 @@ -0,0 +1,165 @@ +# $NetBSD: t_basic.sh,v 1.1 2017/01/16 08:18:11 ozaki-r Exp $ +# +# Copyright (c) 2017 Internet Initiative Japan Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +SOCK_CLIENT=unix://carp_client +SOCK_MASTER=unix://carp_master +SOCK_BACKUP=unix://carp_backup +BUS=bus_carp +IP_CLIENT=10.1.1.240 +IP_MASTER=10.1.1.1 +IP_BACKUP=10.1.1.2 +IP_CARP=10.1.1.100 +TIMEOUT=3 + +atf_test_case carp_handover cleanup + +carp_handover_head() +{ + + atf_set "descr" "Tests for CARP handover" + atf_set "require.progs" "rump_server" +} + +setup_carp() +{ + local sock=$1 + local master=$2 + local carpif= ip= advskew= + + if $master; then + carpif=carp0 + ip=$IP_MASTER + advskew=0 + else + carpif=carp1 + ip=$IP_BACKUP + advskew=200 + fi + + export RUMP_SERVER=$sock + atf_check -s exit:0 rump.ifconfig $carpif create + atf_check -s exit:0 rump.ifconfig shmif0 $ip/24 up + atf_check -s exit:0 rump.ifconfig $carpif \ + vhid 175 advskew $advskew advbase 1 pass s3cret \ + $IP_CARP netmask 255.255.255.0 + atf_check -s exit:0 rump.ifconfig -w 10 +} + +wait_handover() +{ + local i=0 + + export RUMP_SERVER=$SOCK_CLIENT + + while [ $i -ne 5 ]; do + $DEBUG && echo "Trying ping $IP_CARP" + rump.ping -n -w 1 -c 1 $IP_CARP >/dev/null + if [ $? = 0 ]; then + $DEBUG && echo "Passed ping $IP_CARP" + break; + fi + $DEBUG && echo "Failed ping $IP_CARP" + i=$((i + 1)) + done + + if [ $i -eq 5 ]; then + atf_fail "Failed to failover (5 sec)" + fi +} + +carp_handover_body() +{ + + rump_server_start $SOCK_CLIENT + rump_server_start $SOCK_MASTER + rump_server_start $SOCK_BACKUP + + rump_server_add_iface $SOCK_CLIENT shmif0 $BUS + rump_server_add_iface $SOCK_MASTER shmif0 $BUS + rump_server_add_iface $SOCK_BACKUP shmif0 $BUS + + setup_carp $SOCK_MASTER true + setup_carp $SOCK_BACKUP false + + export RUMP_SERVER=$SOCK_CLIENT + atf_check -s exit:0 rump.ifconfig shmif0 $IP_CLIENT/24 up + atf_check -s exit:0 rump.ifconfig -w 10 + + # Check that the primary addresses are up + atf_check -s exit:0 -o ignore \ + rump.ping -n -w $TIMEOUT -c 1 $IP_MASTER + atf_check -s exit:0 -o ignore \ + rump.ping -n -w $TIMEOUT -c 1 $IP_BACKUP + + # Give carp a while to croak + sleep 4 + + # Check state + export RUMP_SERVER=$SOCK_MASTER + $DEBUG && rump.ifconfig + atf_check -s exit:0 -o match:'carp: MASTER carpdev shmif0' \ + rump.ifconfig carp0 + export RUMP_SERVER=$SOCK_BACKUP + $DEBUG && rump.ifconfig + atf_check -s exit:0 -o match:'carp: BACKUP carpdev shmif0' \ + rump.ifconfig carp1 + export RUMP_SERVER=$SOCK_CLIENT + + # Check that the shared IP works + atf_check -s exit:0 -o ignore \ + rump.ping -n -w $TIMEOUT -c 1 $IP_CARP + + # KILLING SPREE + env RUMP_SERVER=$SOCK_MASTER rump.halt + sleep 1 + + # Check that primary is now dead + atf_check -s not-exit:0 -o ignore \ + rump.ping -n -w $TIMEOUT -c 1 $IP_MASTER + + # Do it in installments. carp will cluck meanwhile + wait_handover + + # Check state + export RUMP_SERVER=$SOCK_BACKUP + $DEBUG && rump.ifconfig + atf_check -s exit:0 -o match:'carp: MASTER carpdev shmif0' \ + rump.ifconfig carp1 +} + +carp_handover_cleanup() +{ + + $DEBUG && dump + cleanup +} + +atf_init_test_cases() +{ + + atf_add_test_case carp_handover +}