Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/lib/libc/tests/net/getaddrinfo/getaddrinfo_test.sh
39562 views
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
if [ "$(sysctl -i -n kern.features.vimage)" != 1 ]; then
33
atf_skip "This test requires VIMAGE"
34
fi
35
36
vnet_mkjail()
37
{
38
jailname=getaddrinfo_test_$1
39
jail -c name=${jailname} persist vnet
40
ifconfig -j ${jailname} lo0 inet 127.0.0.1/8
41
# For those machines not support IPv6
42
ifconfig -j ${jailname} lo0 inet6 ::1/64 || true
43
service -j ${jailname} ip6addrctl $2 || true
44
}
45
46
vnet_cleanup()
47
{
48
jailname=getaddrinfo_test_$1
49
jail -r ${jailname}
50
}
51
52
check_output()
53
{
54
if [ "$2" = "none" ]; then
55
if [ "$3" = "prefer_v6" ]; then
56
exp="${1}.exp"
57
else
58
exp="${1}_v4_only.exp"
59
fi
60
elif [ "$2" = "hosts" ]; then
61
lcl=$(cat /etc/hosts | sed -e 's/#.*$//' -e 's/[ ][ ]*/ /g' | awk '/ localhost($| )/ {printf "%s ", $1}')
62
if [ "${lcl%*::*}" = "${lcl}" ]; then
63
exp="${1}_v4_only.exp"
64
else
65
if [ "$3" = "prefer_v6" ]; then
66
exp="${1}_v4v6.exp"
67
else
68
exp="${1}_v4v6_prefer_v4.exp"
69
fi
70
fi
71
elif [ "$2" = "ifconfig" ]; then
72
lcl=$(ifconfig lo0 | grep inet6)
73
if [ -n "${lcl}" ]; then
74
if [ "$3" = "prefer_v6" ]; then
75
exp="${1}_v4v6.exp"
76
else
77
exp="${1}_v4v6_prefer_v4.exp"
78
fi
79
else
80
exp="${1}_v4_only.exp"
81
fi
82
else
83
atf_fail "Invalid family_match_type $2 requested."
84
fi
85
86
cmp -s "$(atf_get_srcdir)/data/${exp}" out && return
87
diff -u "$(atf_get_srcdir)/data/${exp}" out || atf_fail "Actual output does not match expected output"
88
}
89
90
atf_test_case basic_prefer_v4 cleanup
91
basic_prefer_v4_head()
92
{
93
atf_set "descr" "Testing basic ones with prefer_v4"
94
atf_set "require.user" "root"
95
}
96
basic_prefer_v4_body()
97
{
98
vnet_mkjail basic_prefer_v4 prefer_ipv4
99
TEST="jexec getaddrinfo_test_basic_prefer_v4 $(atf_get_srcdir)/h_gai"
100
101
( $TEST ::1 http
102
$TEST 127.0.0.1 http
103
$TEST localhost http
104
$TEST ::1 tftp
105
$TEST 127.0.0.1 tftp
106
$TEST localhost tftp
107
$TEST ::1 echo
108
$TEST 127.0.0.1 echo
109
$TEST localhost echo ) > out 2>&1
110
111
check_output basics hosts prefer_v4
112
}
113
basic_prefer_v4_cleanup()
114
{
115
vnet_cleanup basic_prefer_v4
116
}
117
118
atf_test_case basic cleanup
119
basic_head()
120
{
121
atf_set "descr" "Testing basic ones with prefer_v6"
122
atf_set "require.user" "root"
123
}
124
basic_body()
125
{
126
vnet_mkjail basic prefer_ipv6
127
TEST="jexec getaddrinfo_test_basic $(atf_get_srcdir)/h_gai"
128
129
( $TEST ::1 http
130
$TEST 127.0.0.1 http
131
$TEST localhost http
132
$TEST ::1 tftp
133
$TEST 127.0.0.1 tftp
134
$TEST localhost tftp
135
$TEST ::1 echo
136
$TEST 127.0.0.1 echo
137
$TEST localhost echo ) > out 2>&1
138
139
check_output basics ifconfig prefer_v6
140
}
141
basic_cleanup()
142
{
143
vnet_cleanup basic
144
}
145
146
atf_test_case specific_prefer_v4 cleanup
147
specific_prefer_v4_head()
148
{
149
atf_set "descr" "Testing specific address family with prefer_v4"
150
atf_set "require.user" "root"
151
}
152
specific_prefer_v4_body()
153
{
154
vnet_mkjail specific_prefer_v4 prefer_ipv4
155
TEST="jexec getaddrinfo_test_specific_prefer_v4 $(atf_get_srcdir)/h_gai"
156
157
( $TEST -4 localhost http
158
$TEST -6 localhost http ) > out 2>&1
159
160
check_output spec_fam hosts prefer_v4
161
}
162
specific_prefer_v4_cleanup()
163
{
164
vnet_cleanup specific_prefer_v4
165
}
166
167
atf_test_case specific cleanup
168
specific_head()
169
{
170
atf_set "descr" "Testing specific address family with prefer_v6"
171
atf_set "require.user" "root"
172
}
173
specific_body()
174
{
175
vnet_mkjail specific prefer_ipv6
176
TEST="jexec getaddrinfo_test_specific $(atf_get_srcdir)/h_gai"
177
178
( $TEST -4 localhost http
179
$TEST -6 localhost http ) > out 2>&1
180
181
check_output spec_fam hosts prefer_v6
182
}
183
specific_cleanup()
184
{
185
vnet_cleanup specific
186
}
187
188
atf_test_case empty_hostname_prefer_v4 cleanup
189
empty_hostname_prefer_v4_head()
190
{
191
atf_set "descr" "Testing empty hostname with prefer_v4"
192
atf_set "require.user" "root"
193
}
194
empty_hostname_prefer_v4_body()
195
{
196
vnet_mkjail empty_hostname_prefer_v4 prefer_ipv4
197
TEST="jexec getaddrinfo_test_empty_hostname_prefer_v4 $(atf_get_srcdir)/h_gai"
198
199
( $TEST '' http
200
$TEST '' echo
201
$TEST '' tftp
202
$TEST '' 80
203
$TEST -P '' http
204
$TEST -P '' echo
205
$TEST -P '' tftp
206
$TEST -P '' 80
207
$TEST -S '' 80
208
$TEST -D '' 80 ) > out 2>&1
209
210
check_output no_host ifconfig prefer_v4
211
}
212
empty_hostname_prefer_v4_cleanup()
213
{
214
vnet_cleanup empty_hostname_prefer_v4
215
}
216
217
atf_test_case empty_hostname cleanup
218
empty_hostname_head()
219
{
220
atf_set "descr" "Testing empty hostname with prefer_v6"
221
atf_set "require.user" "root"
222
}
223
empty_hostname_body()
224
{
225
vnet_mkjail empty_hostname prefer_ipv6
226
TEST="jexec getaddrinfo_test_empty_hostname $(atf_get_srcdir)/h_gai"
227
228
( $TEST '' http
229
$TEST '' echo
230
$TEST '' tftp
231
$TEST '' 80
232
$TEST -P '' http
233
$TEST -P '' echo
234
$TEST -P '' tftp
235
$TEST -P '' 80
236
$TEST -S '' 80
237
$TEST -D '' 80 ) > out 2>&1
238
239
check_output no_host ifconfig prefer_v6
240
}
241
empty_hostname_cleanup()
242
{
243
vnet_cleanup empty_hostname
244
}
245
246
atf_test_case empty_servname_prefer_v4 cleanup
247
empty_servname_prefer_v4_head()
248
{
249
atf_set "descr" "Testing empty service name with prefer_v4"
250
atf_set "require.user" "root"
251
}
252
empty_servname_prefer_v4_body()
253
{
254
vnet_mkjail empty_servname_prefer_v4 prefer_ipv4
255
TEST="jexec getaddrinfo_test_empty_servname_prefer_v4 $(atf_get_srcdir)/h_gai"
256
257
( $TEST ::1 ''
258
$TEST 127.0.0.1 ''
259
$TEST localhost ''
260
$TEST '' '' ) > out 2>&1
261
262
check_output no_serv hosts prefer_v4
263
}
264
empty_servname_prefer_v4_cleanup()
265
{
266
vnet_cleanup empty_servname_prefer_v4
267
}
268
269
atf_test_case empty_servname cleanup
270
empty_servname_head()
271
{
272
atf_set "descr" "Testing empty service name with prefer_v6"
273
atf_set "require.user" "root"
274
}
275
empty_servname_body()
276
{
277
vnet_mkjail empty_servname prefer_ipv6
278
TEST="jexec getaddrinfo_test_empty_servname $(atf_get_srcdir)/h_gai"
279
280
( $TEST ::1 ''
281
$TEST 127.0.0.1 ''
282
$TEST localhost ''
283
$TEST '' '' ) > out 2>&1
284
285
check_output no_serv ifconfig prefer_v6
286
}
287
empty_servname_cleanup()
288
{
289
vnet_cleanup empty_servname
290
}
291
292
atf_test_case sock_raw_prefer_v4 cleanup
293
sock_raw_prefer_v4_head()
294
{
295
atf_set "descr" "Testing raw socket with prefer_v4"
296
atf_set "require.user" "root"
297
}
298
sock_raw_prefer_v4_body()
299
{
300
vnet_mkjail sock_raw_prefer_v4 prefer_ipv4
301
TEST="jexec getaddrinfo_test_sock_raw_prefer_v4 $(atf_get_srcdir)/h_gai"
302
303
( $TEST -R -p 0 localhost ''
304
$TEST -R -p 59 localhost ''
305
$TEST -R -p 59 localhost 80
306
$TEST -R -p 59 localhost www
307
$TEST -R -p 59 ::1 '' ) > out 2>&1
308
309
check_output sock_raw hosts prefer_v4
310
}
311
sock_raw_prefer_v4_cleanup()
312
{
313
vnet_cleanup sock_raw_prefer_v4
314
}
315
316
atf_test_case sock_raw cleanup
317
sock_raw_head()
318
{
319
atf_set "descr" "Testing raw socket with prefer_v6"
320
atf_set "require.user" "root"
321
}
322
sock_raw_body()
323
{
324
vnet_mkjail sock_raw prefer_ipv6
325
TEST="jexec getaddrinfo_test_sock_raw $(atf_get_srcdir)/h_gai"
326
327
( $TEST -R -p 0 localhost ''
328
$TEST -R -p 59 localhost ''
329
$TEST -R -p 59 localhost 80
330
$TEST -R -p 59 localhost www
331
$TEST -R -p 59 ::1 '' ) > out 2>&1
332
333
check_output sock_raw ifconfig prefer_v6
334
}
335
sock_raw_cleanup()
336
{
337
vnet_cleanup sock_raw
338
}
339
340
atf_test_case unsupported_family_prefer_v4 cleanup
341
unsupported_family_prefer_v4_head()
342
{
343
atf_set "descr" "Testing unsupported family with prefer_v4"
344
atf_set "require.user" "root"
345
}
346
unsupported_family_prefer_v4_body()
347
{
348
vnet_mkjail unsupported_family_prefer_v4 prefer_ipv4
349
TEST="jexec getaddrinfo_test_unsupported_family_prefer_v4 $(atf_get_srcdir)/h_gai"
350
351
( $TEST -f 99 localhost '' ) > out 2>&1
352
353
check_output unsup_fam ifconfig prefer_v4
354
}
355
unsupported_family_prefer_v4_cleanup()
356
{
357
vnet_cleanup unsupported_family_prefer_v4
358
}
359
360
atf_test_case unsupported_family cleanup
361
unsupported_family_head()
362
{
363
atf_set "descr" "Testing unsupported family with prefer_v6"
364
atf_set "require.user" "root"
365
}
366
unsupported_family_body()
367
{
368
vnet_mkjail unsupported_family prefer_ipv6
369
TEST="jexec getaddrinfo_test_unsupported_family $(atf_get_srcdir)/h_gai"
370
371
( $TEST -f 99 localhost '' ) > out 2>&1
372
373
check_output unsup_fam none prefer_v6
374
}
375
unsupported_family_cleanup()
376
{
377
vnet_cleanup unsupported_family
378
}
379
380
atf_test_case scopeaddr_prefer_v4 cleanup
381
scopeaddr_prefer_v4_head()
382
{
383
atf_set "descr" "Testing scoped address format with prefer_v4"
384
atf_set "require.user" "root"
385
}
386
scopeaddr_prefer_v4_body()
387
{
388
vnet_mkjail scopeaddr_prefer_v4 prefer_ipv4
389
TEST="jexec getaddrinfo_test_scopeaddr_prefer_v4 $(atf_get_srcdir)/h_gai"
390
391
( $TEST fe80::1%lo0 http
392
# IF=ifconfig -a | grep -v '^ ' | sed -e 's/:.*//' | head -1 | awk '{print $1}'
393
# $TEST fe80::1%$IF http
394
) > out 2>&1
395
396
check_output scoped ifconfig prefer_v4
397
}
398
scopeaddr_prefer_v4_cleanup()
399
{
400
vnet_cleanup scopeaddr_prefer_v4
401
}
402
403
atf_test_case scopeaddr cleanup
404
scopeaddr_head()
405
{
406
atf_set "descr" "Testing scoped address format with prefer_v6"
407
atf_set "require.user" "root"
408
}
409
scopeaddr_body()
410
{
411
vnet_mkjail scopeaddr prefer_ipv6
412
TEST="jexec getaddrinfo_test_scopeaddr $(atf_get_srcdir)/h_gai"
413
414
( $TEST fe80::1%lo0 http
415
# IF=ifconfig -a | grep -v '^ ' | sed -e 's/:.*//' | head -1 | awk '{print $1}'
416
# $TEST fe80::1%$IF http
417
) > out 2>&1
418
419
check_output scoped none prefer_v6
420
}
421
scopeaddr_cleanup()
422
{
423
vnet_cleanup scopeaddr
424
}
425
426
atf_init_test_cases()
427
{
428
atf_add_test_case basic_prefer_v4
429
atf_add_test_case specific_prefer_v4
430
atf_add_test_case empty_hostname_prefer_v4
431
atf_add_test_case empty_servname_prefer_v4
432
atf_add_test_case sock_raw_prefer_v4
433
atf_add_test_case unsupported_family_prefer_v4
434
atf_add_test_case scopeaddr_prefer_v4
435
436
atf_add_test_case basic
437
atf_add_test_case specific
438
atf_add_test_case empty_hostname
439
atf_add_test_case empty_servname
440
atf_add_test_case sock_raw
441
atf_add_test_case unsupported_family
442
atf_add_test_case scopeaddr
443
}
444
445