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