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