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