1 # $NetBSD: t_getaddrinfo.sh,v 1.3 2019/01/10 11:13:50 pgoyette 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 } 199