t_ra.sh revision 1.1
1#! /usr/bin/env atf-sh
2RUMPFLAGS="-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6"
3RUMPFLAGS="${RUMPFLAGS} -lrumpnet_shmif"
4RUMPFLAGS="${RUMPFLAGS} -lrumpvfs -lrumpfs_ffs"
5
6RUMPSRV=unix://r1
7RUMPCLI=unix://r2
8IP6SRV=fc00:1::1
9IP6CLI=fc00:2::2
10PIDFILE=/var/run/rump.rtadvd.pid
11CONFIG=./rtadvd.conf
12DEBUG=true
13
14setup_shmif0()
15{
16	local IP6ADDR=${1}
17	shift
18
19	atf_check -s exit:0 rump.ifconfig shmif0 create
20	atf_check -s exit:0 rump.ifconfig shmif0 linkstr bus1
21	atf_check -s exit:0 rump.ifconfig shmif0 inet6 ${IP6ADDR}
22	atf_check -s exit:0 rump.ifconfig shmif0 up
23
24	$DEBUG && rump.ifconfig
25}
26
27wait_term()
28{
29	local PIDFILE=${1}
30	shift
31
32	while [ -f ${PIDFILE} ]
33	do
34		sleep 0.2
35	done
36
37	return 0
38}
39
40create_rtadvdconfig()
41{
42
43	cat << _EOF > ${CONFIG}
44shmif0:\
45	:mtu#1300:maxinterval#4:mininterval#3:
46_EOF
47}
48
49atf_test_case basic cleanup
50basic_head()
51{
52
53	atf_set "descr" "Tests for basic functions of router advaertisement(RA)"
54	atf_set "require.progs" "rump_server rump.rtadvd rump.ndp rump.ifconfig"
55}
56
57basic_body()
58{
59
60	atf_check -s exit:0 rump_server ${RUMPFLAGS} ${RUMPSRV}
61	atf_check -s exit:0 rump_server ${RUMPFLAGS} ${RUMPCLI}
62
63	export RUMP_SERVER=${RUMPSRV}
64	setup_shmif0 ${IP6SRV}
65	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.forwarding=1
66	export LD_PRELOAD=/usr/lib/librumphijack.so
67	atf_check -s exit:0 mkdir -p /rump/var/chroot/rtadvd
68	unset LD_PRELOAD
69	unset RUMP_SERVER
70
71	export RUMP_SERVER=${RUMPCLI}
72	setup_shmif0 ${IP6CLI}
73	$DEBUG && rump.ndp -n -a
74	atf_check -s exit:0 -o match:'= 0' rump.sysctl net.inet6.ip6.accept_rtadv
75	unset RUMP_SERVER
76
77	create_rtadvdconfig
78
79	export RUMP_SERVER=${RUMPSRV}
80	atf_check -s exit:0 rump.rtadvd -c ${CONFIG} shmif0
81	atf_check -s exit:0 sleep 3
82	atf_check -s exit:0 -o ignore -e empty cat ${PIDFILE}
83	unset RUMP_SERVER
84
85	export RUMP_SERVER=${RUMPCLI}
86	atf_check -s exit:0 -o empty rump.ndp -r
87	atf_check -s exit:0 -o not-match:'advertised' rump.ndp -p
88	atf_check -s exit:0 -o match:'linkmtu=0' rump.ndp -n -i shmif0
89	atf_check -s exit:0 -o not-match:'S R' rump.ndp -n -a
90	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ndp -n -a
91	atf_check -s exit:0 -o not-match:'fc00:1:' rump.ifconfig shmif0 inet6
92	unset RUMP_SERVER
93
94	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
95	wait_term ${PIDFILE}
96
97	export RUMP_SERVER=${RUMPCLI}
98	atf_check -s exit:0 -o match:'0.->.1' rump.sysctl -w net.inet6.ip6.accept_rtadv=1
99	unset RUMP_SERVER
100
101	export RUMP_SERVER=${RUMPSRV}
102	atf_check -s exit:0 rump.rtadvd -c ${CONFIG} shmif0
103	atf_check -s exit:0 sleep 3
104	atf_check -s exit:0 -o ignore -e empty cat ${PIDFILE}
105	unset RUMP_SERVER
106
107	export RUMP_SERVER=${RUMPCLI}
108	$DEBUG && rump.ndp -n -a
109	$DEBUG && rump.ndp -r
110	atf_check -s exit:0 -o match:'if=shmif0' rump.ndp -r
111	atf_check -s exit:0 -o match:'advertised' rump.ndp -p
112	atf_check -s exit:0 -o match:'linkmtu=1300' rump.ndp -n -i shmif0
113	atf_check -s exit:0 -o match:'23h59m..s S R' rump.ndp -n -a
114	atf_check -s exit:0 -o match:'fc00:1:' rump.ndp -n -a
115	atf_check -s exit:0 -o match:'fc00:1:' rump.ifconfig shmif0 inet6
116	unset RUMP_SERVER
117
118	atf_check -s exit:0 kill -TERM `cat ${PIDFILE}`
119	wait_term ${PIDFILE}
120
121	return 0
122}
123
124basic_cleanup()
125{
126
127	if [ -f ${PIDFILE} ]; then
128		kill -TERM `cat ${PIDFILE}`
129		wait_term ${PIDFILE}
130	fi
131
132	env RUMP_SERVER=${RUMPSRV} rump.halt
133	env RUMP_SERVER=${RUMPCLI} rump.halt
134}
135
136atf_init_test_cases()
137{
138
139	atf_add_test_case basic
140}
141