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