t_pppoe.sh revision 1.1.2.1 1 # $NetBSD: t_pppoe.sh,v 1.1.2.1 2016/11/04 14:49:24 pgoyette 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 -lrumpnet_pppoe"
30 HIJACKING="env LD_PRELOAD=/usr/lib/librumphijack.so"
31
32 SERVER=unix://commsock1
33 CLIENT=unix://commsock2
34
35 SERVER_IP=10.3.3.1
36 CLIENT_IP=10.3.3.3
37 SERVER_IP6=fc00::1
38 CLIENT_IP6=fc00::3
39 AUTHNAME=foobar@baz.com
40 SECRET=oink
41 BUS=bus0
42 TIMEOUT=3
43 WAITTIME=5
44 DEBUG=false
45
46 atf_test_case pap cleanup
47
48 setup()
49 {
50 inet=true
51
52 if [ $# -ne 0 ]; then
53 eval $@
54 fi
55
56 atf_check -s exit:0 ${server} $SERVER
57 atf_check -s exit:0 ${server} $CLIENT
58
59 export RUMP_SERVER=$SERVER
60 atf_check -s exit:0 rump.ifconfig shmif0 create
61 atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
62 atf_check -s exit:0 rump.ifconfig shmif0 up
63
64 atf_check -s exit:0 rump.ifconfig pppoe0 create
65 $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
66 inet $SERVER_IP $CLIENT_IP down
67 atf_check -s exit:0 rump.ifconfig pppoe0 link0
68
69 $DEBUG && rump.ifconfig
70 $DEBUG && $HIJACKING pppoectl -d pppoe0
71
72 atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
73 unset RUMP_SERVER
74
75 export RUMP_SERVER=$CLIENT
76 atf_check -s exit:0 rump.ifconfig shmif0 create
77 atf_check -s exit:0 rump.ifconfig shmif0 linkstr $BUS
78 atf_check -s exit:0 rump.ifconfig shmif0 up
79
80 atf_check -s exit:0 rump.ifconfig pppoe0 create
81 $inet && atf_check -s exit:0 rump.ifconfig pppoe0 \
82 inet 0.0.0.0 0.0.0.1 down
83
84 atf_check -s exit:0 -x "$HIJACKING pppoectl -e shmif0 pppoe0"
85 unset RUMP_SERVER
86 }
87 cleanup()
88 {
89 env RUMP_SERVER=$SERVER rump.halt
90 env RUMP_SERVER=$CLIENT rump.halt
91 }
92
93 pap_head()
94 {
95 atf_set "descr" "Does simple pap tests"
96 atf_set "require.progs" "rump_server pppoectl"
97 }
98
99 wait_for_session_established()
100 {
101 local dontfail=$1
102 local n=$WAITTIME
103
104 for i in $(seq $n); do
105 $HIJACKING pppoectl -d pppoe0 |grep -q "state = session"
106 [ $? = 0 ] && return
107 sleep 1
108 done
109
110 if [ "$dontfail" != "dontfail" ]; then
111 atf_fail "Couldn't connect to the server for $n seconds."
112 fi
113 }
114
115 wait_for_disconnected()
116 {
117 local dontfail=$1
118 local n=$WAITTIME
119
120 for i in $(seq $n); do
121 $HIJACKING pppoectl -d pppoe0 | grep -q "state = session"
122 [ $? -eq 0 ] || return
123 sleep 1
124 done
125
126 if [ "$dontfail" != "dontfail" ]; then
127 atf_fail "Couldn't disconnect for $n seconds."
128 fi
129 }
130
131 run_test()
132 {
133 local auth=pap
134 setup
135
136 export RUMP_SERVER=$SERVER
137 local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
138 'hisauthname=$AUTHNAME' \
139 'hisauthsecret=$SECRET' \
140 'myauthproto=none'"
141 atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
142 atf_check -s exit:0 rump.ifconfig pppoe0 up
143 unset RUMP_SERVER
144
145 export RUMP_SERVER=$CLIENT
146 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
147 'myauthname=$AUTHNAME' \
148 'myauthsecret=$SECRET' \
149 'hisauthproto=none'"
150 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
151 atf_check -s exit:0 rump.ifconfig pppoe0 up
152 $DEBUG && rump.ifconfig
153 wait_for_session_established
154 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
155 unset RUMP_SERVER
156
157 # test for disconnection from server
158 atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 down"
159 export RUMP_SERVER=$CLIENT
160 atf_check -s not-exit:0 -o ignore -e ignore \
161 rump.ping -c 1 -w $TIMEOUT $SERVER_IP
162 atf_check -s exit:0 -o match:'PADI sent' -x "$HIJACKING pppoectl -d pppoe0"
163 unset RUMP_SERVER
164
165 # test for recoonecting
166 atf_check -s exit:0 -x "env RUMP_SERVER=$SERVER rump.ifconfig pppoe0 up"
167 export RUMP_SERVER=$CLIENT
168 wait_for_session_established
169 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $SERVER_IP
170 unset RUMP_SERVER
171
172 # test for disconnection from client
173 atf_check -s exit:0 -x "env RUMP_SERVER=$CLIENT rump.ifconfig pppoe0 down"
174 export RUMP_SERVER=$SERVER
175 $DEBUG && $HIJACKING pppoectl -d pppoe0
176 atf_check -s not-exit:0 -o ignore -e ignore \
177 rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
178 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
179 unset RUMP_SERVER
180
181 # test for reconnecting
182 export RUMP_SERVER=$CLIENT
183 atf_check -s exit:0 -x rump.ifconfig pppoe0 up
184 wait_for_session_established
185 $DEBUG && rump.ifconfig pppoe0
186 $DEBUG && $HIJACKING pppoectl -d pppoe0
187 unset RUMP_SERVER
188
189 export RUMP_SERVER=$SERVER
190 atf_check -s exit:0 rump.ifconfig -w 10
191 atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT $CLIENT_IP
192 atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
193 $DEBUG && HIJACKING pppoectl -d pppoe0
194 unset RUMP_SERVER
195
196 # test for invalid password
197 export RUMP_SERVER=$CLIENT
198 atf_check -s exit:0 rump.ifconfig pppoe0 down
199 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
200 'myauthname=$AUTHNAME' \
201 'myauthsecret=invalidsecret' \
202 'hisauthproto=none'"
203 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
204 atf_check -s exit:0 rump.ifconfig pppoe0 up
205 wait_for_session_established dontfail
206 atf_check -s not-exit:0 -o ignore -e ignore \
207 rump.ping -c 1 -w $TIMEOUT $SERVER_IP
208 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
209 unset RUMP_SERVER
210 }
211
212 atf_test_case pppoe_pap cleanup
213
214 pppoe_pap_head()
215 {
216 atf_set "descr" "Does simple pap tests"
217 atf_set "require.progs" "rump_server pppoectl"
218 }
219
220 pppoe_pap_body()
221 {
222 run_test pap
223 }
224
225 pppoe_pap_cleanup()
226 {
227 cleanup
228 }
229
230 atf_test_case pppoe_chap cleanup
231
232 pppoe_chap_head()
233 {
234 atf_set "descr" "Does simple chap tests"
235 atf_set "require.progs" "rump_server pppoectl"
236 }
237
238 pppoe_chap_body()
239 {
240 run_test chap
241 }
242
243 pppoe_chap_cleanup()
244 {
245 cleanup
246 }
247
248 run_test6()
249 {
250 local auth=$1
251 setup "inet=false"
252
253 # As pppoe client doesn't support rechallenge yet.
254 local server_optparam=""
255 if [ $auth = "chap" ]; then
256 server_optparam="norechallenge"
257 fi
258
259 export RUMP_SERVER=$SERVER
260 local setup_serverparam="pppoectl pppoe0 hisauthproto=$auth \
261 'hisauthname=$AUTHNAME' \
262 'hisauthsecret=$SECRET' \
263 'myauthproto=none' \
264 $server_optparam"
265 atf_check -s exit:0 -x "$HIJACKING $setup_serverparam"
266 atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $SERVER_IP6/64 down
267 atf_check -s exit:0 rump.ifconfig pppoe0 up
268 unset RUMP_SERVER
269
270 export RUMP_SERVER=$CLIENT
271 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
272 'myauthname=$AUTHNAME' \
273 'myauthsecret=$SECRET' \
274 'hisauthproto=none'"
275 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
276 atf_check -s exit:0 rump.ifconfig pppoe0 inet6 $CLIENT_IP6/64 down
277 atf_check -s exit:0 rump.ifconfig pppoe0 up
278 $DEBUG && rump.ifconfig
279 wait_for_session_established
280 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
281 export RUMP_SERVER=$SERVER
282 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
283 export RUMP_SERVER=$CLIENT
284 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
285 unset RUMP_SERVER
286
287 # test for disconnection from server
288 export RUMP_SERVER=$SERVER
289 session_id=`$HIJACKING pppoectl -d pppoe0 | grep state`
290 atf_check -s exit:0 rump.ifconfig pppoe0 down
291 wait_for_disconnected
292 export RUMP_SERVER=$CLIENT
293 wait_for_disconnected
294 atf_check -s not-exit:0 -o ignore -e ignore \
295 rump.ping6 -c 1 -w $TIMEOUT $SERVER_IP6
296 atf_check -s exit:0 -o not-match:"$session_id" -x "$HIJACKING pppoectl -d pppoe0"
297 unset RUMP_SERVER
298
299 # test for recoonecting
300 export RUMP_SERVER=$SERVER
301 atf_check -s exit:0 rump.ifconfig pppoe0 up
302 wait_for_session_established
303 atf_check -s exit:0 rump.ifconfig -w 10
304 $DEBUG && $HIJACKING pppoectl -d pppoe0
305 $DEBUG && rump.ifconfig pppoe0
306 export RUMP_SERVER=$CLIENT
307 atf_check -s exit:0 -o ignore rump.ifconfig -w 10
308 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
309 unset RUMP_SERVER
310
311 # test for disconnection from client
312 export RUMP_SERVER=$CLIENT
313 atf_check -s exit:0 rump.ifconfig pppoe0 down
314 wait_for_disconnected
315
316 export RUMP_SERVER=$SERVER
317 $DEBUG && $HIJACKING pppoectl -d pppoe0
318 wait_for_disconnected
319 atf_check -s not-exit:0 -o ignore -e ignore \
320 rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
321 atf_check -s exit:0 -o match:'initial' -x "$HIJACKING pppoectl -d pppoe0"
322 unset RUMP_SERVER
323
324 # test for reconnecting
325 export RUMP_SERVER=$CLIENT
326 atf_check -s exit:0 rump.ifconfig pppoe0 up
327 wait_for_session_established
328 atf_check -s exit:0 rump.ifconfig -w 10
329
330 $DEBUG && rump.ifconfig pppoe0
331 $DEBUG && $HIJACKING pppoectl -d pppoe0
332 unset RUMP_SERVER
333
334 export RUMP_SERVER=$SERVER
335 atf_check -s exit:0 rump.ifconfig -w 10
336 atf_check -s exit:0 -o ignore rump.ping6 -c 1 -X $TIMEOUT $CLIENT_IP6
337 atf_check -s exit:0 -o match:'session' -x "$HIJACKING pppoectl -d pppoe0"
338 $DEBUG && HIJACKING pppoectl -d pppoe0
339 unset RUMP_SERVER
340
341 # test for invalid password
342 export RUMP_SERVER=$CLIENT
343 atf_check -s exit:0 rump.ifconfig pppoe0 down
344 wait_for_disconnected
345 local setup_clientparam="pppoectl pppoe0 myauthproto=$auth \
346 'myauthname=$AUTHNAME' \
347 'myauthsecret=invalidsecret' \
348 'hisauthproto=none'"
349 atf_check -s exit:0 -x "$HIJACKING $setup_clientparam"
350 atf_check -s exit:0 rump.ifconfig pppoe0 up
351 wait_for_session_established dontfail
352 atf_check -s not-exit:0 -o ignore -e ignore \
353 rump.ping6 -c 1 -X $TIMEOUT $SERVER_IP6
354 atf_check -s exit:0 -o match:'DETACHED' rump.ifconfig pppoe0
355 unset RUMP_SERVER
356 }
357
358 atf_test_case pppoe6_pap cleanup
359
360 pppoe6_pap_head()
361 {
362 atf_set "descr" "Does simple pap using IPv6 tests"
363 atf_set "require.progs" "rump_server pppoectl"
364 }
365
366 pppoe6_pap_body()
367 {
368 run_test6 pap
369 }
370
371 pppoe6_pap_cleanup()
372 {
373 cleanup
374 }
375
376 atf_test_case pppoe6_chap cleanup
377
378 pppoe6_chap_head()
379 {
380 atf_set "descr" "Does simple chap using IPv6 tests"
381 atf_set "require.progs" "rump_server pppoectl"
382 }
383
384 pppoe6_chap_body()
385 {
386 run_test6 chap
387 }
388
389 pppoe6_chap_cleanup()
390 {
391 cleanup
392 }
393
394 atf_init_test_cases()
395 {
396 atf_add_test_case pppoe_pap
397 atf_add_test_case pppoe_chap
398 atf_add_test_case pppoe6_pap
399 atf_add_test_case pppoe6_chap
400 }
401