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