Home | History | Annotate | Line # | Download | only in if_pppoe
t_pppoe.sh revision 1.6
      1 #	$NetBSD: t_pppoe.sh,v 1.6 2016/10/19 00:19:13 ozaki-r Exp $
      2 #
      3 # Copyright (c) 2016 Internet Initiative Japan Inc.
      4 # All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 # 1. Redistributions of source code must retain the above copyright
     10 #    notice, this list of conditions and the following disclaimer.
     11 # 2. Redistributions in binary form must reproduce the above copyright
     12 #    notice, this list of conditions and the following disclaimer in the
     13 #    documentation and/or other materials provided with the distribution.
     14 #
     15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25 # POSSIBILITY OF SUCH DAMAGE.
     26 #
     27 
     28 server="rump_server -lrump -lrumpnet -lrumpnet_net -lrumpnet_netinet	\
     29 		    -lrumpnet_netinet6 -lrumpnet_shmif -lrumpdev	\
     30 		    -lrumpnet_pppoe"
     31 HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so"
     32 
     33 SERVER=unix://commsock1
     34 CLIENT=unix://commsock2
     35 
     36 SERVER_IP=10.3.3.1
     37 CLIENT_IP=10.3.3.3
     38 AUTHNAME=foobar@baz.com
     39 SECRET=oink
     40 BUS=bus0
     41 TIMEOUT=3
     42 WAITTIME=5
     43 DEBUG=false
     44 
     45 setup()
     46 {
     47 	atf_check -s exit:0 ${server} $SERVER
     48 	atf_check -s exit:0 ${server} $CLIENT
     49 
     50 	export RUMP_SERVER=$SERVER
     51 	atf_check -s exit:0 rump.ifconfig shmif0 create
     52 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
     53 	atf_check -s exit:0 rump.ifconfig shmif0 up
     54 
     55 	atf_check -s exit:0 rump.ifconfig pppoe0 create
     56 	atf_check -s exit:0 rump.ifconfig pppoe0 inet $SERVER_IP $CLIENT_IP down
     57 	atf_check -s exit:0 rump.ifconfig pppoe0 link0
     58 
     59 	$DEBUG && rump.ifconfig
     60 	$DEBUG && $HIJACKING pppoectl -d pppoe0
     61 
     62 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
     63 	unset RUMP_SERVER
     64 
     65 	export RUMP_SERVER=$CLIENT
     66 	atf_check -s exit:0 rump.ifconfig shmif0 create
     67 	atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
     68 	atf_check -s exit:0 rump.ifconfig shmif0 up
     69 
     70 	atf_check -s exit:0 rump.ifconfig pppoe0 create
     71 	atf_check -s exit:0 rump.ifconfig pppoe0 inet 0.0.0.0 0.0.0.1 down
     72 
     73 	atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
     74 	unset RUMP_SERVER
     75 }
     76 
     77 cleanup()
     78 {
     79 	env RUMP_SERVER=$SERVER rump.halt
     80 	env RUMP_SERVER=$CLIENT rump.halt
     81 }
     82 
     83 
     84 wait_for_session_established()
     85 {
     86 	local dontfail=$1
     87 	local n=$WAITTIME
     88 
     89 	for i in $(seq $n); do
     90 		$HIJACKING pppoectl -d pppoe0 |grep -q "state = session"
     91 		[ $? = 0 ] && return
     92 		sleep 1
     93 	done
     94 
     95 	if [ $dontfail != "dontfail" ]; then
     96 		atf_fail "Couldn't connect to the server for $n seconds."
     97 	fi
     98 }
     99 
    100 run_test()
    101 {
    102 	local auth=$1
    103 	setup
    104 
    105 	# As pppoe client doesn't support rechallenge yet.
    106 	local server_optparam=""
    107 	if [ $auth = "chap" ]; then
    108 		server_optparam="norechallenge"
    109 	fi
    110 
    111 	export RUMP_SERVER=$SERVER
    112 	local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
    113 				    'hisauthname=$AUTHNAME' \
    114 				    'hisauthsecret=$SECRET' \
    115 				    'myauthproto=none' \
    116 				    $server_optparam"
    117 	atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
    118 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    119 	unset RUMP_SERVER
    120 
    121 	export RUMP_SERVER=$CLIENT
    122 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    123 				    'myauthname=$AUTHNAME' \
    124 				    'myauthsecret=$SECRET' \
    125 				    'hisauthproto=none'"
    126 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    127 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    128 	$DEBUG && rump.ifconfig
    129 	wait_for_session_established
    130 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    131 	unset RUMP_SERVER
    132 
    133 	# test for disconnection from server
    134 	atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 down"
    135 	export RUMP_SERVER=$CLIENT
    136 	atf_check -s not-exit:0 -o ignore -e ignore \
    137 	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    138 	atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
    139 	unset RUMP_SERVER
    140 
    141 	# test for recoonecting
    142 	atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
    143 	export RUMP_SERVER=$CLIENT
    144 	wait_for_session_established
    145 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    146 	unset RUMP_SERVER
    147 
    148 	# test for disconnection from client
    149 	atf_check -s exit:0 -x "env RUMP_SERVER=$CLIENT rump.ifconfig pppoe0 down"
    150 	export RUMP_SERVER=$SERVER
    151 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    152 	atf_check -s not-exit:0 -o ignore -e ignore \
    153 	    rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
    154 	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
    155 	unset RUMP_SERVER
    156 
    157 	# test for recconecting
    158 	export RUMP_SERVER=$CLIENT
    159 	atf_check -s exit:0 -x rump.ifconfig pppoe0 up
    160 	wait_for_session_established
    161 	$DEBUG && rump.ifconfig pppoe0
    162 	$DEBUG && $HIJACKING pppoectl -d pppoe0
    163 	unset RUMP_SERVER
    164 
    165 	export RUMP_SERVER=$SERVER
    166 	atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
    167 	atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
    168 	$DEBUG && HIJACKING pppoectl -d pppoe0
    169 	unset RUMP_SERVER
    170 
    171 	# test for invalid password
    172 	export RUMP_SERVER=$CLIENT
    173 	atf_check -s exit:0 rump.ifconfig pppoe0 down
    174 	local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
    175 				    'myauthname=$AUTHNAME' \
    176 				    'myauthsecret=invalidsecret' \
    177 				    'hisauthproto=none'"
    178 	atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
    179 	atf_check -s exit:0 rump.ifconfig pppoe0 up
    180 	wait_for_session_established dontfail
    181 	atf_check -s not-exit:0 -o ignore -e ignore \
    182 	    rump.ping -c 1 -w $TIMEOUT $SERVER_IP
    183 	atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
    184 	unset RUMP_SERVER
    185 }
    186 
    187 atf_test_case pppoe_pap cleanup
    188 
    189 pppoe_pap_head()
    190 {
    191 	atf_set "descr" "Does simple pap tests"
    192 	atf_set "require.progs" "rump_server pppoectl"
    193 }
    194 
    195 pppoe_pap_body()
    196 {
    197 	run_test pap
    198 }
    199 
    200 pppoe_pap_cleanup()
    201 {
    202 	cleanup
    203 }
    204 
    205 atf_test_case pppoe_chap cleanup
    206 
    207 pppoe_chap_head()
    208 {
    209 	atf_set "descr" "Does simple chap tests"
    210 	atf_set "require.progs" "rump_server pppoectl"
    211 }
    212 
    213 pppoe_chap_body()
    214 {
    215 	run_test chap
    216 }
    217 
    218 pppoe_chap_cleanup()
    219 {
    220 	cleanup
    221 }
    222 
    223 atf_init_test_cases()
    224 {
    225 	atf_add_test_case pppoe_pap
    226 	atf_add_test_case pppoe_chap
    227 }
    228