git: 65f6c19efa82 - main - libc/tests: copy t_getaddrinfo out from contrib/netbsd-tests

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Tue, 08 Apr 2025 17:34:53 UTC
The branch main has been updated by glebius:

URL: https://cgit.FreeBSD.org/src/commit/?id=65f6c19efa82e5988092d0c71befd10147a1ede3

commit 65f6c19efa82e5988092d0c71befd10147a1ede3
Author:     K Rin <rin@sandb0x.tw>
AuthorDate: 2025-04-05 23:47:16 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2025-04-08 16:48:51 +0000

    libc/tests: copy t_getaddrinfo out from contrib/netbsd-tests
    
    It is going to be modified in next commits.
---
 lib/libc/tests/net/getaddrinfo/Makefile         |   4 +-
 lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh | 198 ++++++++++++++++++++++++
 2 files changed, 199 insertions(+), 3 deletions(-)

diff --git a/lib/libc/tests/net/getaddrinfo/Makefile b/lib/libc/tests/net/getaddrinfo/Makefile
index 1c8d68d8cc25..dfcad2d92307 100644
--- a/lib/libc/tests/net/getaddrinfo/Makefile
+++ b/lib/libc/tests/net/getaddrinfo/Makefile
@@ -1,12 +1,10 @@
 PACKAGE=	tests
 
-TESTSRC=	${SRCTOP}/contrib/netbsd-tests/lib/libc/net/${.CURDIR:T}
-
 .include <bsd.own.mk>
 
 BINDIR=		${TESTSDIR}
 
-NETBSD_ATF_TESTS_SH=	getaddrinfo_test
+ATF_TESTS_SH=	t_getaddrinfo
 ATF_TESTS_C=	getaddrinfo
 
 PROGS=		h_gai
diff --git a/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh b/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh
new file mode 100755
index 000000000000..94a3c0b2e52c
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh
@@ -0,0 +1,198 @@
+#	$NetBSD: t_getaddrinfo.sh,v 1.2 2011/06/15 07:54:32 jmmv Exp $
+
+#
+# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, and 2002 WIDE Project.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of the project nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+check_output()
+{
+	if [ "$2" = "none" ] ; then
+		exp="${1}.exp"
+	elif [ "$2" = "hosts" ] ; then
+		# Determine if localhost has an IPv6 address or not
+		lcl=$( cat /etc/hosts					| \
+			 sed -e 's/#.*$//' -e 's/[ 	][ 	]*/ /g'	| \
+			 awk '/ localhost($| )/ {printf "%s ", $1}' )
+		if [ "${lcl%*::*}" = "${lcl}" ] ; then
+			exp="${1}_v4.exp"
+		else
+			exp="${1}_v4v6.exp"
+		fi
+	elif [ "$2" = "ifconfig" ] ; then
+		lcl=$( ifconfig lo0 | grep inet6 )
+		if [ -n "${lcl}" ] ; then
+			exp="${1}_v4v6.exp"
+		else
+			exp="${1}_v4.exp"
+		fi
+	else
+		atf_fail "Invalid family_match_type $2 requested."
+	fi
+
+	cmp  -s $(atf_get_srcdir)/data/${exp} out && return
+	diff -u $(atf_get_srcdir)/data/${exp} out && \
+	atf_fail "Actual output does not match expected output"
+}
+
+atf_test_case basic
+basic_head()
+{
+	atf_set "descr" "Testing basic ones"
+}
+basic_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST ::1 http
+	  $TEST 127.0.0.1 http
+	  $TEST localhost http
+	  $TEST ::1 tftp
+	  $TEST 127.0.0.1 tftp
+	  $TEST localhost tftp
+	  $TEST ::1 echo
+	  $TEST 127.0.0.1 echo
+	  $TEST localhost echo ) > out 2>&1
+
+	check_output basics hosts
+}
+
+atf_test_case specific
+specific_head()
+{
+	atf_set "descr" "Testing specific address family"
+}
+specific_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST -4 localhost http
+	  $TEST -6 localhost http ) > out 2>&1
+
+	check_output spec_fam hosts
+}
+
+atf_test_case empty_hostname
+empty_hostname_head()
+{
+	atf_set "descr" "Testing empty hostname"
+}
+empty_hostname_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST '' http
+	  $TEST '' echo
+	  $TEST '' tftp
+	  $TEST '' 80
+	  $TEST -P '' http
+	  $TEST -P '' echo
+	  $TEST -P '' tftp
+	  $TEST -P '' 80
+	  $TEST -S '' 80
+	  $TEST -D '' 80 ) > out 2>&1
+
+	check_output no_host ifconfig
+}
+
+atf_test_case empty_servname
+empty_servname_head()
+{
+	atf_set "descr" "Testing empty service name"
+}
+empty_servname_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST ::1 ''
+	  $TEST 127.0.0.1 ''
+	  $TEST localhost ''
+	  $TEST '' '' ) > out 2>&1
+
+	check_output no_serv hosts
+}
+
+atf_test_case sock_raw
+sock_raw_head()
+{
+	atf_set "descr" "Testing raw socket"
+}
+sock_raw_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST -R -p 0 localhost ''
+	  $TEST -R -p 59 localhost ''
+	  $TEST -R -p 59 localhost 80
+	  $TEST -R -p 59 localhost www
+	  $TEST -R -p 59 ::1 '' ) > out 2>&1
+
+	check_output sock_raw hosts
+}
+
+atf_test_case unsupported_family
+unsupported_family_head()
+{
+	atf_set "descr" "Testing unsupported family"
+}
+unsupported_family_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST -f 99 localhost '' ) > out 2>&1
+
+	check_output unsup_fam none
+}
+
+atf_test_case scopeaddr
+scopeaddr_head()
+{
+	atf_set "descr" "Testing scoped address format"
+}
+scopeaddr_body()
+{
+	TEST=$(atf_get_srcdir)/h_gai
+
+	( $TEST fe80::1%lo0 http
+#	  IF=`ifconfig -a | grep -v '^	' | \
+#		sed -e 's/:.*//' | head -1 | awk '{print $1}'`
+#	  $TEST fe80::1%$IF http
+	) > out 2>&1
+
+	check_output scoped none
+}
+
+atf_init_test_cases()
+{
+	atf_add_test_case basic
+	atf_add_test_case specific
+	atf_add_test_case empty_hostname
+	atf_add_test_case empty_servname
+	atf_add_test_case sock_raw
+	atf_add_test_case unsupported_family
+	atf_add_test_case scopeaddr
+}