Module Name: src Committed By: ozaki-r Date: Mon Feb 27 07:24:26 UTC 2017
Modified Files: src/tests/net/carp: t_basic.sh Log Message: Add a test case for CARP on IPv6 The test case fails expectedly because the implementation of CARP on IPv6 is incomplete yet. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 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/tests/net/carp/t_basic.sh diff -u src/tests/net/carp/t_basic.sh:1.1 src/tests/net/carp/t_basic.sh:1.2 --- src/tests/net/carp/t_basic.sh:1.1 Mon Jan 16 08:18:11 2017 +++ src/tests/net/carp/t_basic.sh Mon Feb 27 07:24:26 2017 @@ -1,4 +1,4 @@ -# $NetBSD: t_basic.sh,v 1.1 2017/01/16 08:18:11 ozaki-r Exp $ +# $NetBSD: t_basic.sh,v 1.2 2017/02/27 07:24:26 ozaki-r Exp $ # # Copyright (c) 2017 Internet Initiative Japan Inc. # All rights reserved. @@ -29,14 +29,9 @@ 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() { @@ -44,6 +39,11 @@ carp_handover_head() atf_set "require.progs" "rump_server" } +IP_CLIENT=10.1.1.240 +IP_MASTER=10.1.1.1 +IP_BACKUP=10.1.1.2 +IP_CARP=10.1.1.100 + setup_carp() { local sock=$1 @@ -61,6 +61,10 @@ setup_carp() fi export RUMP_SERVER=$sock + if $DEBUG; then + atf_check -s exit:0 -o match:'0.->.1' \ + rump.sysctl -w net.inet.carp.log=1 + fi 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 \ @@ -158,8 +162,141 @@ carp_handover_cleanup() cleanup } +atf_test_case carp6_handover cleanup +carp6_handover_head() +{ + + atf_set "descr" "Tests for CARP handover (IPv6)" + atf_set "require.progs" "rump_server" +} + +IP6_CLIENT=fd00:1::240 +IP6_MASTER=fd00:1::1 +IP6_BACKUP=fd00:1::2 +IP6_CARP=fd00:1::100 + +setup_carp6() +{ + local sock=$1 + local master=$2 + local carpif= ip= advskew= + + if $master; then + carpif=carp0 + ip=$IP6_MASTER + advskew=0 + else + carpif=carp1 + ip=$IP6_BACKUP + advskew=200 + fi + + export RUMP_SERVER=$sock + if $DEBUG; then + atf_check -s exit:0 -o match:'0.->.1' \ + rump.sysctl -w net.inet.carp.log=1 + fi + atf_check -s exit:0 rump.ifconfig $carpif create + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $ip up + atf_check -s exit:0 rump.ifconfig $carpif inet6 \ + vhid 175 advskew $advskew advbase 1 pass s3cret $IP6_CARP + atf_check -s exit:0 rump.ifconfig -w 10 +} + +wait_carp6_handover() +{ + local i=0 + + export RUMP_SERVER=$SOCK_CLIENT + + while [ $i -ne 5 ]; do + $DEBUG && echo "Trying ping6 $IP6_CARP" + rump.ping6 -n -X 1 -c 1 $IP6_CARP >/dev/null + if [ $? = 0 ]; then + $DEBUG && echo "Passed ping $IP6_CARP" + break; + fi + $DEBUG && echo "Failed ping6 $IP6_CARP" + i=$((i + 1)) + done + + if [ $i -eq 5 ]; then + atf_fail "Failed to failover (5 sec)" + fi +} + +carp6_handover_body() +{ + + atf_expect_fail 'The implementation of CARP on IPv6 is incomplete yet.' + + rump_server_start $SOCK_CLIENT netinet6 + rump_server_start $SOCK_MASTER netinet6 + rump_server_start $SOCK_BACKUP netinet6 + + 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_carp6 $SOCK_MASTER true + setup_carp6 $SOCK_BACKUP false + + export RUMP_SERVER=$SOCK_CLIENT + atf_check -s exit:0 rump.ifconfig shmif0 inet6 $IP6_CLIENT 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.ping6 -n -X $TIMEOUT -c 1 $IP6_MASTER + atf_check -s exit:0 -o ignore \ + rump.ping6 -n -X $TIMEOUT -c 1 $IP6_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.ping6 -n -X $TIMEOUT -c 1 $IP6_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.ping6 -n -X $TIMEOUT -c 1 $IP6_MASTER + + # Do it in installments. carp will cluck meanwhile + wait_carp6_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 +} + +carp6_handover_cleanup() +{ + + $DEBUG && dump + cleanup +} + atf_init_test_cases() { atf_add_test_case carp_handover + atf_add_test_case carp6_handover }