xref: /freebsd-src/contrib/netbsd-tests/lib/libc/net/getaddrinfo/t_getaddrinfo.sh (revision 9268022b74279434ed6300244e3f977e56a8ceb5)
1*57718be8SEnji Cooper#	$NetBSD: t_getaddrinfo.sh,v 1.2 2011/06/15 07:54:32 jmmv Exp $
2*57718be8SEnji Cooper
3*57718be8SEnji Cooper#
4*57718be8SEnji Cooper# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, and 2002 WIDE Project.
5*57718be8SEnji Cooper# All rights reserved.
6*57718be8SEnji Cooper#
7*57718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without
8*57718be8SEnji Cooper# modification, are permitted provided that the following conditions
9*57718be8SEnji Cooper# are met:
10*57718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright
11*57718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer.
12*57718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
13*57718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
14*57718be8SEnji Cooper#    documentation and/or other materials provided with the distribution.
15*57718be8SEnji Cooper# 3. Neither the name of the project nor the names of its contributors
16*57718be8SEnji Cooper#    may be used to endorse or promote products derived from this software
17*57718be8SEnji Cooper#    without specific prior written permission.
18*57718be8SEnji Cooper#
19*57718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20*57718be8SEnji Cooper# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*57718be8SEnji Cooper# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*57718be8SEnji Cooper# ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23*57718be8SEnji Cooper# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24*57718be8SEnji Cooper# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25*57718be8SEnji Cooper# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26*57718be8SEnji Cooper# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27*57718be8SEnji Cooper# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28*57718be8SEnji Cooper# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29*57718be8SEnji Cooper# SUCH DAMAGE.
30*57718be8SEnji Cooper#
31*57718be8SEnji Cooper
32*57718be8SEnji Coopercheck_output()
33*57718be8SEnji Cooper{
34*57718be8SEnji Cooper	if [ "$2" = "none" ] ; then
35*57718be8SEnji Cooper		exp="${1}.exp"
36*57718be8SEnji Cooper	elif [ "$2" = "hosts" ] ; then
37*57718be8SEnji Cooper		# Determine if localhost has an IPv6 address or not
38*57718be8SEnji Cooper		lcl=$( cat /etc/hosts					| \
39*57718be8SEnji Cooper			 sed -e 's/#.*$//' -e 's/[ 	][ 	]*/ /g'	| \
40*57718be8SEnji Cooper			 awk '/ localhost($| )/ {printf "%s ", $1}' )
41*57718be8SEnji Cooper		if [ "${lcl%*::*}" = "${lcl}" ] ; then
42*57718be8SEnji Cooper			exp="${1}_v4.exp"
43*57718be8SEnji Cooper		else
44*57718be8SEnji Cooper			exp="${1}_v4v6.exp"
45*57718be8SEnji Cooper		fi
46*57718be8SEnji Cooper	elif [ "$2" = "ifconfig" ] ; then
47*57718be8SEnji Cooper		lcl=$( ifconfig lo0 | grep inet6 )
48*57718be8SEnji Cooper		if [ -n "${lcl}" ] ; then
49*57718be8SEnji Cooper			exp="${1}_v4v6.exp"
50*57718be8SEnji Cooper		else
51*57718be8SEnji Cooper			exp="${1}_v4.exp"
52*57718be8SEnji Cooper		fi
53*57718be8SEnji Cooper	else
54*57718be8SEnji Cooper		atf_fail "Invalid family_match_type $2 requested."
55*57718be8SEnji Cooper	fi
56*57718be8SEnji Cooper
57*57718be8SEnji Cooper	cmp  -s $(atf_get_srcdir)/data/${exp} out && return
58*57718be8SEnji Cooper	diff -u $(atf_get_srcdir)/data/${exp} out && \
59*57718be8SEnji Cooper	atf_fail "Actual output does not match expected output"
60*57718be8SEnji Cooper}
61*57718be8SEnji Cooper
62*57718be8SEnji Cooperatf_test_case basic
63*57718be8SEnji Cooperbasic_head()
64*57718be8SEnji Cooper{
65*57718be8SEnji Cooper	atf_set "descr" "Testing basic ones"
66*57718be8SEnji Cooper}
67*57718be8SEnji Cooperbasic_body()
68*57718be8SEnji Cooper{
69*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
70*57718be8SEnji Cooper
71*57718be8SEnji Cooper	( $TEST ::1 http
72*57718be8SEnji Cooper	  $TEST 127.0.0.1 http
73*57718be8SEnji Cooper	  $TEST localhost http
74*57718be8SEnji Cooper	  $TEST ::1 tftp
75*57718be8SEnji Cooper	  $TEST 127.0.0.1 tftp
76*57718be8SEnji Cooper	  $TEST localhost tftp
77*57718be8SEnji Cooper	  $TEST ::1 echo
78*57718be8SEnji Cooper	  $TEST 127.0.0.1 echo
79*57718be8SEnji Cooper	  $TEST localhost echo ) > out 2>&1
80*57718be8SEnji Cooper
81*57718be8SEnji Cooper	check_output basics hosts
82*57718be8SEnji Cooper}
83*57718be8SEnji Cooper
84*57718be8SEnji Cooperatf_test_case specific
85*57718be8SEnji Cooperspecific_head()
86*57718be8SEnji Cooper{
87*57718be8SEnji Cooper	atf_set "descr" "Testing specific address family"
88*57718be8SEnji Cooper}
89*57718be8SEnji Cooperspecific_body()
90*57718be8SEnji Cooper{
91*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
92*57718be8SEnji Cooper
93*57718be8SEnji Cooper	( $TEST -4 localhost http
94*57718be8SEnji Cooper	  $TEST -6 localhost http ) > out 2>&1
95*57718be8SEnji Cooper
96*57718be8SEnji Cooper	check_output spec_fam hosts
97*57718be8SEnji Cooper}
98*57718be8SEnji Cooper
99*57718be8SEnji Cooperatf_test_case empty_hostname
100*57718be8SEnji Cooperempty_hostname_head()
101*57718be8SEnji Cooper{
102*57718be8SEnji Cooper	atf_set "descr" "Testing empty hostname"
103*57718be8SEnji Cooper}
104*57718be8SEnji Cooperempty_hostname_body()
105*57718be8SEnji Cooper{
106*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
107*57718be8SEnji Cooper
108*57718be8SEnji Cooper	( $TEST '' http
109*57718be8SEnji Cooper	  $TEST '' echo
110*57718be8SEnji Cooper	  $TEST '' tftp
111*57718be8SEnji Cooper	  $TEST '' 80
112*57718be8SEnji Cooper	  $TEST -P '' http
113*57718be8SEnji Cooper	  $TEST -P '' echo
114*57718be8SEnji Cooper	  $TEST -P '' tftp
115*57718be8SEnji Cooper	  $TEST -P '' 80
116*57718be8SEnji Cooper	  $TEST -S '' 80
117*57718be8SEnji Cooper	  $TEST -D '' 80 ) > out 2>&1
118*57718be8SEnji Cooper
119*57718be8SEnji Cooper	check_output no_host ifconfig
120*57718be8SEnji Cooper}
121*57718be8SEnji Cooper
122*57718be8SEnji Cooperatf_test_case empty_servname
123*57718be8SEnji Cooperempty_servname_head()
124*57718be8SEnji Cooper{
125*57718be8SEnji Cooper	atf_set "descr" "Testing empty service name"
126*57718be8SEnji Cooper}
127*57718be8SEnji Cooperempty_servname_body()
128*57718be8SEnji Cooper{
129*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
130*57718be8SEnji Cooper
131*57718be8SEnji Cooper	( $TEST ::1 ''
132*57718be8SEnji Cooper	  $TEST 127.0.0.1 ''
133*57718be8SEnji Cooper	  $TEST localhost ''
134*57718be8SEnji Cooper	  $TEST '' '' ) > out 2>&1
135*57718be8SEnji Cooper
136*57718be8SEnji Cooper	check_output no_serv hosts
137*57718be8SEnji Cooper}
138*57718be8SEnji Cooper
139*57718be8SEnji Cooperatf_test_case sock_raw
140*57718be8SEnji Coopersock_raw_head()
141*57718be8SEnji Cooper{
142*57718be8SEnji Cooper	atf_set "descr" "Testing raw socket"
143*57718be8SEnji Cooper}
144*57718be8SEnji Coopersock_raw_body()
145*57718be8SEnji Cooper{
146*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
147*57718be8SEnji Cooper
148*57718be8SEnji Cooper	( $TEST -R -p 0 localhost ''
149*57718be8SEnji Cooper	  $TEST -R -p 59 localhost ''
150*57718be8SEnji Cooper	  $TEST -R -p 59 localhost 80
151*57718be8SEnji Cooper	  $TEST -R -p 59 localhost www
152*57718be8SEnji Cooper	  $TEST -R -p 59 ::1 '' ) > out 2>&1
153*57718be8SEnji Cooper
154*57718be8SEnji Cooper	check_output sock_raw hosts
155*57718be8SEnji Cooper}
156*57718be8SEnji Cooper
157*57718be8SEnji Cooperatf_test_case unsupported_family
158*57718be8SEnji Cooperunsupported_family_head()
159*57718be8SEnji Cooper{
160*57718be8SEnji Cooper	atf_set "descr" "Testing unsupported family"
161*57718be8SEnji Cooper}
162*57718be8SEnji Cooperunsupported_family_body()
163*57718be8SEnji Cooper{
164*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
165*57718be8SEnji Cooper
166*57718be8SEnji Cooper	( $TEST -f 99 localhost '' ) > out 2>&1
167*57718be8SEnji Cooper
168*57718be8SEnji Cooper	check_output unsup_fam none
169*57718be8SEnji Cooper}
170*57718be8SEnji Cooper
171*57718be8SEnji Cooperatf_test_case scopeaddr
172*57718be8SEnji Cooperscopeaddr_head()
173*57718be8SEnji Cooper{
174*57718be8SEnji Cooper	atf_set "descr" "Testing scoped address format"
175*57718be8SEnji Cooper}
176*57718be8SEnji Cooperscopeaddr_body()
177*57718be8SEnji Cooper{
178*57718be8SEnji Cooper	TEST=$(atf_get_srcdir)/h_gai
179*57718be8SEnji Cooper
180*57718be8SEnji Cooper	( $TEST fe80::1%lo0 http
181*57718be8SEnji Cooper#	  IF=`ifconfig -a | grep -v '^	' | \
182*57718be8SEnji Cooper#		sed -e 's/:.*//' | head -1 | awk '{print $1}'`
183*57718be8SEnji Cooper#	  $TEST fe80::1%$IF http
184*57718be8SEnji Cooper	) > out 2>&1
185*57718be8SEnji Cooper
186*57718be8SEnji Cooper	check_output scoped none
187*57718be8SEnji Cooper}
188*57718be8SEnji Cooper
189*57718be8SEnji Cooperatf_init_test_cases()
190*57718be8SEnji Cooper{
191*57718be8SEnji Cooper	atf_add_test_case basic
192*57718be8SEnji Cooper	atf_add_test_case specific
193*57718be8SEnji Cooper	atf_add_test_case empty_hostname
194*57718be8SEnji Cooper	atf_add_test_case empty_servname
195*57718be8SEnji Cooper	atf_add_test_case sock_raw
196*57718be8SEnji Cooper	atf_add_test_case unsupported_family
197*57718be8SEnji Cooper	atf_add_test_case scopeaddr
198*57718be8SEnji Cooper}
199