Path: blob/main/lib/libc/tests/net/getaddrinfo/getaddrinfo_test.sh
39562 views
# $NetBSD: t_getaddrinfo.sh,v 1.2 2011/06/15 07:54:32 jmmv Exp $12#3# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, and 2002 WIDE Project.4# All rights reserved.5#6# Redistribution and use in source and binary forms, with or without7# modification, are permitted provided that the following conditions8# are met:9# 1. Redistributions of source code must retain the above copyright10# notice, this list of conditions and the following disclaimer.11# 2. Redistributions in binary form must reproduce the above copyright12# notice, this list of conditions and the following disclaimer in the13# documentation and/or other materials provided with the distribution.14# 3. Neither the name of the project nor the names of its contributors15# may be used to endorse or promote products derived from this software16# without specific prior written permission.17#18# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE21# ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF28# SUCH DAMAGE.29#3031if [ "$(sysctl -i -n kern.features.vimage)" != 1 ]; then32atf_skip "This test requires VIMAGE"33fi3435vnet_mkjail()36{37jailname=getaddrinfo_test_$138jail -c name=${jailname} persist vnet39ifconfig -j ${jailname} lo0 inet 127.0.0.1/840# For those machines not support IPv641ifconfig -j ${jailname} lo0 inet6 ::1/64 || true42service -j ${jailname} ip6addrctl $2 || true43}4445vnet_cleanup()46{47jailname=getaddrinfo_test_$148jail -r ${jailname}49}5051check_output()52{53if [ "$2" = "none" ]; then54if [ "$3" = "prefer_v6" ]; then55exp="${1}.exp"56else57exp="${1}_v4_only.exp"58fi59elif [ "$2" = "hosts" ]; then60lcl=$(cat /etc/hosts | sed -e 's/#.*$//' -e 's/[ ][ ]*/ /g' | awk '/ localhost($| )/ {printf "%s ", $1}')61if [ "${lcl%*::*}" = "${lcl}" ]; then62exp="${1}_v4_only.exp"63else64if [ "$3" = "prefer_v6" ]; then65exp="${1}_v4v6.exp"66else67exp="${1}_v4v6_prefer_v4.exp"68fi69fi70elif [ "$2" = "ifconfig" ]; then71lcl=$(ifconfig lo0 | grep inet6)72if [ -n "${lcl}" ]; then73if [ "$3" = "prefer_v6" ]; then74exp="${1}_v4v6.exp"75else76exp="${1}_v4v6_prefer_v4.exp"77fi78else79exp="${1}_v4_only.exp"80fi81else82atf_fail "Invalid family_match_type $2 requested."83fi8485cmp -s "$(atf_get_srcdir)/data/${exp}" out && return86diff -u "$(atf_get_srcdir)/data/${exp}" out || atf_fail "Actual output does not match expected output"87}8889atf_test_case basic_prefer_v4 cleanup90basic_prefer_v4_head()91{92atf_set "descr" "Testing basic ones with prefer_v4"93atf_set "require.user" "root"94}95basic_prefer_v4_body()96{97vnet_mkjail basic_prefer_v4 prefer_ipv498TEST="jexec getaddrinfo_test_basic_prefer_v4 $(atf_get_srcdir)/h_gai"99100( $TEST ::1 http101$TEST 127.0.0.1 http102$TEST localhost http103$TEST ::1 tftp104$TEST 127.0.0.1 tftp105$TEST localhost tftp106$TEST ::1 echo107$TEST 127.0.0.1 echo108$TEST localhost echo ) > out 2>&1109110check_output basics hosts prefer_v4111}112basic_prefer_v4_cleanup()113{114vnet_cleanup basic_prefer_v4115}116117atf_test_case basic cleanup118basic_head()119{120atf_set "descr" "Testing basic ones with prefer_v6"121atf_set "require.user" "root"122}123basic_body()124{125vnet_mkjail basic prefer_ipv6126TEST="jexec getaddrinfo_test_basic $(atf_get_srcdir)/h_gai"127128( $TEST ::1 http129$TEST 127.0.0.1 http130$TEST localhost http131$TEST ::1 tftp132$TEST 127.0.0.1 tftp133$TEST localhost tftp134$TEST ::1 echo135$TEST 127.0.0.1 echo136$TEST localhost echo ) > out 2>&1137138check_output basics ifconfig prefer_v6139}140basic_cleanup()141{142vnet_cleanup basic143}144145atf_test_case specific_prefer_v4 cleanup146specific_prefer_v4_head()147{148atf_set "descr" "Testing specific address family with prefer_v4"149atf_set "require.user" "root"150}151specific_prefer_v4_body()152{153vnet_mkjail specific_prefer_v4 prefer_ipv4154TEST="jexec getaddrinfo_test_specific_prefer_v4 $(atf_get_srcdir)/h_gai"155156( $TEST -4 localhost http157$TEST -6 localhost http ) > out 2>&1158159check_output spec_fam hosts prefer_v4160}161specific_prefer_v4_cleanup()162{163vnet_cleanup specific_prefer_v4164}165166atf_test_case specific cleanup167specific_head()168{169atf_set "descr" "Testing specific address family with prefer_v6"170atf_set "require.user" "root"171}172specific_body()173{174vnet_mkjail specific prefer_ipv6175TEST="jexec getaddrinfo_test_specific $(atf_get_srcdir)/h_gai"176177( $TEST -4 localhost http178$TEST -6 localhost http ) > out 2>&1179180check_output spec_fam hosts prefer_v6181}182specific_cleanup()183{184vnet_cleanup specific185}186187atf_test_case empty_hostname_prefer_v4 cleanup188empty_hostname_prefer_v4_head()189{190atf_set "descr" "Testing empty hostname with prefer_v4"191atf_set "require.user" "root"192}193empty_hostname_prefer_v4_body()194{195vnet_mkjail empty_hostname_prefer_v4 prefer_ipv4196TEST="jexec getaddrinfo_test_empty_hostname_prefer_v4 $(atf_get_srcdir)/h_gai"197198( $TEST '' http199$TEST '' echo200$TEST '' tftp201$TEST '' 80202$TEST -P '' http203$TEST -P '' echo204$TEST -P '' tftp205$TEST -P '' 80206$TEST -S '' 80207$TEST -D '' 80 ) > out 2>&1208209check_output no_host ifconfig prefer_v4210}211empty_hostname_prefer_v4_cleanup()212{213vnet_cleanup empty_hostname_prefer_v4214}215216atf_test_case empty_hostname cleanup217empty_hostname_head()218{219atf_set "descr" "Testing empty hostname with prefer_v6"220atf_set "require.user" "root"221}222empty_hostname_body()223{224vnet_mkjail empty_hostname prefer_ipv6225TEST="jexec getaddrinfo_test_empty_hostname $(atf_get_srcdir)/h_gai"226227( $TEST '' http228$TEST '' echo229$TEST '' tftp230$TEST '' 80231$TEST -P '' http232$TEST -P '' echo233$TEST -P '' tftp234$TEST -P '' 80235$TEST -S '' 80236$TEST -D '' 80 ) > out 2>&1237238check_output no_host ifconfig prefer_v6239}240empty_hostname_cleanup()241{242vnet_cleanup empty_hostname243}244245atf_test_case empty_servname_prefer_v4 cleanup246empty_servname_prefer_v4_head()247{248atf_set "descr" "Testing empty service name with prefer_v4"249atf_set "require.user" "root"250}251empty_servname_prefer_v4_body()252{253vnet_mkjail empty_servname_prefer_v4 prefer_ipv4254TEST="jexec getaddrinfo_test_empty_servname_prefer_v4 $(atf_get_srcdir)/h_gai"255256( $TEST ::1 ''257$TEST 127.0.0.1 ''258$TEST localhost ''259$TEST '' '' ) > out 2>&1260261check_output no_serv hosts prefer_v4262}263empty_servname_prefer_v4_cleanup()264{265vnet_cleanup empty_servname_prefer_v4266}267268atf_test_case empty_servname cleanup269empty_servname_head()270{271atf_set "descr" "Testing empty service name with prefer_v6"272atf_set "require.user" "root"273}274empty_servname_body()275{276vnet_mkjail empty_servname prefer_ipv6277TEST="jexec getaddrinfo_test_empty_servname $(atf_get_srcdir)/h_gai"278279( $TEST ::1 ''280$TEST 127.0.0.1 ''281$TEST localhost ''282$TEST '' '' ) > out 2>&1283284check_output no_serv ifconfig prefer_v6285}286empty_servname_cleanup()287{288vnet_cleanup empty_servname289}290291atf_test_case sock_raw_prefer_v4 cleanup292sock_raw_prefer_v4_head()293{294atf_set "descr" "Testing raw socket with prefer_v4"295atf_set "require.user" "root"296}297sock_raw_prefer_v4_body()298{299vnet_mkjail sock_raw_prefer_v4 prefer_ipv4300TEST="jexec getaddrinfo_test_sock_raw_prefer_v4 $(atf_get_srcdir)/h_gai"301302( $TEST -R -p 0 localhost ''303$TEST -R -p 59 localhost ''304$TEST -R -p 59 localhost 80305$TEST -R -p 59 localhost www306$TEST -R -p 59 ::1 '' ) > out 2>&1307308check_output sock_raw hosts prefer_v4309}310sock_raw_prefer_v4_cleanup()311{312vnet_cleanup sock_raw_prefer_v4313}314315atf_test_case sock_raw cleanup316sock_raw_head()317{318atf_set "descr" "Testing raw socket with prefer_v6"319atf_set "require.user" "root"320}321sock_raw_body()322{323vnet_mkjail sock_raw prefer_ipv6324TEST="jexec getaddrinfo_test_sock_raw $(atf_get_srcdir)/h_gai"325326( $TEST -R -p 0 localhost ''327$TEST -R -p 59 localhost ''328$TEST -R -p 59 localhost 80329$TEST -R -p 59 localhost www330$TEST -R -p 59 ::1 '' ) > out 2>&1331332check_output sock_raw ifconfig prefer_v6333}334sock_raw_cleanup()335{336vnet_cleanup sock_raw337}338339atf_test_case unsupported_family_prefer_v4 cleanup340unsupported_family_prefer_v4_head()341{342atf_set "descr" "Testing unsupported family with prefer_v4"343atf_set "require.user" "root"344}345unsupported_family_prefer_v4_body()346{347vnet_mkjail unsupported_family_prefer_v4 prefer_ipv4348TEST="jexec getaddrinfo_test_unsupported_family_prefer_v4 $(atf_get_srcdir)/h_gai"349350( $TEST -f 99 localhost '' ) > out 2>&1351352check_output unsup_fam ifconfig prefer_v4353}354unsupported_family_prefer_v4_cleanup()355{356vnet_cleanup unsupported_family_prefer_v4357}358359atf_test_case unsupported_family cleanup360unsupported_family_head()361{362atf_set "descr" "Testing unsupported family with prefer_v6"363atf_set "require.user" "root"364}365unsupported_family_body()366{367vnet_mkjail unsupported_family prefer_ipv6368TEST="jexec getaddrinfo_test_unsupported_family $(atf_get_srcdir)/h_gai"369370( $TEST -f 99 localhost '' ) > out 2>&1371372check_output unsup_fam none prefer_v6373}374unsupported_family_cleanup()375{376vnet_cleanup unsupported_family377}378379atf_test_case scopeaddr_prefer_v4 cleanup380scopeaddr_prefer_v4_head()381{382atf_set "descr" "Testing scoped address format with prefer_v4"383atf_set "require.user" "root"384}385scopeaddr_prefer_v4_body()386{387vnet_mkjail scopeaddr_prefer_v4 prefer_ipv4388TEST="jexec getaddrinfo_test_scopeaddr_prefer_v4 $(atf_get_srcdir)/h_gai"389390( $TEST fe80::1%lo0 http391# IF=ifconfig -a | grep -v '^ ' | sed -e 's/:.*//' | head -1 | awk '{print $1}'392# $TEST fe80::1%$IF http393) > out 2>&1394395check_output scoped ifconfig prefer_v4396}397scopeaddr_prefer_v4_cleanup()398{399vnet_cleanup scopeaddr_prefer_v4400}401402atf_test_case scopeaddr cleanup403scopeaddr_head()404{405atf_set "descr" "Testing scoped address format with prefer_v6"406atf_set "require.user" "root"407}408scopeaddr_body()409{410vnet_mkjail scopeaddr prefer_ipv6411TEST="jexec getaddrinfo_test_scopeaddr $(atf_get_srcdir)/h_gai"412413( $TEST fe80::1%lo0 http414# IF=ifconfig -a | grep -v '^ ' | sed -e 's/:.*//' | head -1 | awk '{print $1}'415# $TEST fe80::1%$IF http416) > out 2>&1417418check_output scoped none prefer_v6419}420scopeaddr_cleanup()421{422vnet_cleanup scopeaddr423}424425atf_init_test_cases()426{427atf_add_test_case basic_prefer_v4428atf_add_test_case specific_prefer_v4429atf_add_test_case empty_hostname_prefer_v4430atf_add_test_case empty_servname_prefer_v4431atf_add_test_case sock_raw_prefer_v4432atf_add_test_case unsupported_family_prefer_v4433atf_add_test_case scopeaddr_prefer_v4434435atf_add_test_case basic436atf_add_test_case specific437atf_add_test_case empty_hostname438atf_add_test_case empty_servname439atf_add_test_case sock_raw440atf_add_test_case unsupported_family441atf_add_test_case scopeaddr442}443444445