Module Name:    src
Committed By:   ozaki-r
Date:           Wed Jul 14 03:22:33 UTC 2021

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/etc/mtree: NetBSD.dist.tests
        src/tests/net: Makefile
Added Files:
        src/tests/net/altq: Makefile t_cbq.sh

Log Message:
tests: add tests for ALTQ CBQ


To generate a diff of this commit:
cvs rdiff -u -r1.1086 -r1.1087 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.184 -r1.185 src/etc/mtree/NetBSD.dist.tests
cvs rdiff -u -r1.38 -r1.39 src/tests/net/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/net/altq/Makefile \
    src/tests/net/altq/t_cbq.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1086 src/distrib/sets/lists/tests/mi:1.1087
--- src/distrib/sets/lists/tests/mi:1.1086	Tue Jul 13 19:38:10 2021
+++ src/distrib/sets/lists/tests/mi	Wed Jul 14 03:22:33 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1086 2021/07/13 19:38:10 rillig Exp $
+# $NetBSD: mi,v 1.1087 2021/07/14 03:22:33 ozaki-r Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -4042,6 +4042,10 @@
 ./usr/tests/net						tests-net-tests		compattestfile,atf
 ./usr/tests/net/Atffile					tests-net-tests		compattestfile,atf
 ./usr/tests/net/Kyuafile				tests-net-tests		compattestfile,atf,kyua
+./usr/tests/net/altq					tests-net-tests		compattestfile,atf
+./usr/tests/net/altq/Atffile				tests-net-tests		atf,rump
+./usr/tests/net/altq/Kyuafile				tests-net-tests		atf,rump,kyua
+./usr/tests/net/altq/t_cbq				tests-net-tests		atf,rump
 ./usr/tests/net/arp					tests-net-tests		compattestfile,atf
 ./usr/tests/net/arp/Atffile				tests-net-tests		atf,rump
 ./usr/tests/net/arp/Kyuafile				tests-net-tests		atf,rump,kyua

Index: src/etc/mtree/NetBSD.dist.tests
diff -u src/etc/mtree/NetBSD.dist.tests:1.184 src/etc/mtree/NetBSD.dist.tests:1.185
--- src/etc/mtree/NetBSD.dist.tests:1.184	Mon May 17 04:07:42 2021
+++ src/etc/mtree/NetBSD.dist.tests	Wed Jul 14 03:22:33 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: NetBSD.dist.tests,v 1.184 2021/05/17 04:07:42 yamaguchi Exp $
+#	$NetBSD: NetBSD.dist.tests,v 1.185 2021/07/14 03:22:33 ozaki-r Exp $
 
 ./usr/libdata/debug/usr/tests
 ./usr/libdata/debug/usr/tests/atf
@@ -345,6 +345,7 @@
 ./usr/tests/libexec/ld.elf_so/h_helper_symver_dso2
 ./usr/tests/modules
 ./usr/tests/net
+./usr/tests/net/altq
 ./usr/tests/net/arp
 ./usr/tests/net/bpf
 ./usr/tests/net/bpfilter

Index: src/tests/net/Makefile
diff -u src/tests/net/Makefile:1.38 src/tests/net/Makefile:1.39
--- src/tests/net/Makefile:1.38	Mon May 17 04:07:44 2021
+++ src/tests/net/Makefile	Wed Jul 14 03:22:33 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.38 2021/05/17 04:07:44 yamaguchi Exp $
+# $NetBSD: Makefile,v 1.39 2021/07/14 03:22:33 ozaki-r Exp $
 
 .include <bsd.own.mk>
 
@@ -6,7 +6,7 @@ TESTSDIR=	${TESTSBASE}/net
 
 TESTS_SUBDIRS=		fdpass in_cksum net sys
 .if (${MKRUMP} != "no") && !defined(BSD_MK_COMPAT_FILE)
-TESTS_SUBDIRS+=		arp bpf bpfilter can carp icmp if if_bridge if_gif
+TESTS_SUBDIRS+=		altq arp bpf bpfilter can carp icmp if if_bridge if_gif
 TESTS_SUBDIRS+=		if_ipsec if_l2tp if_lagg if_loop if_pppoe if_tap
 TESTS_SUBDIRS+=		if_tun if_vether if_vlan if_wg ipsec mcast mpls
 TESTS_SUBDIRS+=		ndp npf route

Added files:

Index: src/tests/net/altq/Makefile
diff -u /dev/null src/tests/net/altq/Makefile:1.1
--- /dev/null	Wed Jul 14 03:22:33 2021
+++ src/tests/net/altq/Makefile	Wed Jul 14 03:22:33 2021
@@ -0,0 +1,13 @@
+# $NetBSD: Makefile,v 1.1 2021/07/14 03:22:33 ozaki-r Exp $
+#
+
+.include <bsd.own.mk>
+
+TESTSDIR=	${TESTSBASE}/net/altq
+
+.for name in cbq
+ TESTS_SH+=	t_${name}
+ TESTS_SH_SRC_t_${name}=	../net_common.sh t_${name}.sh
+.endfor
+
+.include <bsd.test.mk>
Index: src/tests/net/altq/t_cbq.sh
diff -u /dev/null src/tests/net/altq/t_cbq.sh:1.1
--- /dev/null	Wed Jul 14 03:22:33 2021
+++ src/tests/net/altq/t_cbq.sh	Wed Jul 14 03:22:33 2021
@@ -0,0 +1,347 @@
+#	$NetBSD: t_cbq.sh,v 1.1 2021/07/14 03:22:33 ozaki-r Exp $
+#
+# Copyright (c) 2021 Internet Initiative Japan Inc.
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+#
+
+SOCK_LOCAL=unix://altq_local
+SOCK_REMOTE=unix://altq_remote
+BUS=bus_altq
+TIMEOUT=3
+
+# rumphijack can't handle AF_LOCAL socket (/var/run/altq_quip) correctly,
+# so use the socket via the host.
+HIJACKING_ALTQ="$HIJACKING,blanket=/dev/altq/altq:/dev/altq/cbq:/etc/altq.conf:/var/run/altqd.pid"
+
+DEBUG=${DEBUG:-false}
+
+IP_LOCAL1=10.0.0.1
+IP_LOCAL2=10.0.1.1
+IP_REMOTE11=10.0.0.2
+IP_REMOTE12=10.0.0.22
+IP_REMOTE21=10.0.1.2
+IP_REMOTE22=10.0.1.22
+ALTQD_PIDFILE=./pid
+
+
+start_altqd_basic()
+{
+
+	export RUMP_SERVER=$SOCK_LOCAL
+
+	$HIJACKING_ALTQ mkdir -p /rump/etc
+	$HIJACKING_ALTQ mkdir -p /rump/var/run
+
+	cat > ./altq.conf <<-EOF
+	interface shmif0 cbq
+	class cbq shmif0 root_class NULL pbandwidth 100
+	class cbq shmif0 normal_class root_class pbandwidth 50 default
+	    filter shmif0 normal_class $IP_REMOTE11 0 0 0 0
+	class cbq shmif0 drop_class root_class pbandwidth 0
+	    filter shmif0 drop_class $IP_REMOTE12 0 0 0 0
+	EOF
+	$DEBUG && cat ./altq.conf
+	atf_check -s exit:0 $HIJACKING_ALTQ cp ./altq.conf /rump/etc/altq.conf
+	$HIJACKING_ALTQ test -f /rump/etc/altq.conf
+
+	#atf_check -s exit:0 $HIJACKING_ALTQ altqd
+	$HIJACKING_ALTQ altqd
+
+	$HIJACKING_ALTQ test -f /var/run/altqd.pid
+	if [ $? != 0 ]; then
+		atf_check -s exit:0 $HIJACKING_ALTQ altqd -d
+		# Should abort
+	fi
+
+	$HIJACKING_ALTQ cat /var/run/altqd.pid > $ALTQD_PIDFILE
+
+	$DEBUG && $HIJACKING_ALTQ altqstat -s
+	$HIJACKING_ALTQ altqstat -c 1 >./out
+	$DEBUG && cat ./out
+	atf_check -s exit:0 \
+	    -o match:"altqstat: cbq on interface shmif0" \
+	    -o match:'Class 1 on Interface shmif0: root_class' \
+	    -o match:'Class 2 on Interface shmif0: normal_class' \
+	    -o match:'Class 3 on Interface shmif0: ctl_class' \
+	    -o match:'Class 4 on Interface shmif0: drop_class' \
+	    cat ./out
+	rm -f ./out
+}
+
+shutdown_altqd()
+{
+	local pid="$(cat $ALTQD_PIDFILE)"
+
+	if [ -n "$pid" ]; then
+		pgrep -x altqd | grep -q $pid
+		if [ $? = 0 ]; then
+			kill $(cat $ALTQD_PIDFILE)
+			sleep 1
+		fi
+		$DEBUG && pgrep -x altqd
+	fi
+}
+
+check_counter()
+{
+	local file=$1
+	local name=$2
+	local match="$3"
+
+	grep -A 8 ${name}_class $file > $file.$name
+	atf_check -s exit:0 -o match:"$match" cat $file.$name
+	rm -f $file.$name
+}
+
+test_altq_cbq_basic_ipv4()
+{
+	local ifconfig="atf_check -s exit:0 rump.ifconfig"
+	local ping="atf_check -s exit:0 -o ignore rump.ping"
+	local opts="-q -c 1 -w 1"
+
+	rump_server_fs_start $SOCK_LOCAL local altq
+	rump_server_start $SOCK_REMOTE
+
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	$ifconfig shmif0 inet $IP_LOCAL1/24
+	export RUMP_SERVER=$SOCK_REMOTE
+	$ifconfig shmif0 inet $IP_REMOTE11/24
+	$ifconfig shmif0 inet $IP_REMOTE12/24 alias
+	$ifconfig -w 10
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	# Invoke ARP
+	$ping $opts $IP_REMOTE11
+	$ping $opts $IP_REMOTE12
+
+	start_altqd_basic
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	$ping $opts $IP_REMOTE11
+
+	$HIJACKING_ALTQ altqstat -c 1 >./out
+	$DEBUG && cat ./out
+
+	check_counter ./out normal 'pkts: 1'
+	check_counter ./out root   'pkts: 1'
+	check_counter ./out drop   'pkts: 0'
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	atf_check -s not-exit:0 -o ignore -e match:"No buffer space available" \
+	    rump.ping $opts $IP_REMOTE12
+
+	$HIJACKING_ALTQ altqstat -c 1 >./out
+	$DEBUG && cat ./out
+
+	check_counter ./out drop   'drops: 1'
+	check_counter ./out drop   'pkts: 0'
+	check_counter ./out normal 'pkts: 1'
+	check_counter ./out root   'pkts: 1'
+
+	rm -f ./out
+
+	shutdown_altqd
+
+	rump_server_destroy_ifaces
+}
+
+start_altqd_multi_ifaces()
+{
+
+	export RUMP_SERVER=$SOCK_LOCAL
+
+	$HIJACKING_ALTQ mkdir -p /rump/etc
+	$HIJACKING_ALTQ mkdir -p /rump/var/run
+
+	cat > ./altq.conf <<-EOF
+	interface shmif0 cbq
+	class cbq shmif0 root_class NULL pbandwidth 100
+	class cbq shmif0 normal_class root_class pbandwidth 50 default
+	    filter shmif0 normal_class $IP_REMOTE11 0 0 0 0
+	class cbq shmif0 drop_class root_class pbandwidth 0
+	    filter shmif0 drop_class $IP_REMOTE12 0 0 0 0
+	interface shmif1 cbq
+	class cbq shmif1 root_class NULL pbandwidth 100
+	class cbq shmif1 normal_class root_class pbandwidth 50 default
+	    filter shmif1 normal_class $IP_REMOTE21 0 0 0 0
+	class cbq shmif1 drop_class root_class pbandwidth 0
+	    filter shmif1 drop_class $IP_REMOTE22 0 0 0 0
+	EOF
+	$DEBUG && cat ./altq.conf
+	atf_check -s exit:0 $HIJACKING_ALTQ cp ./altq.conf /rump/etc/altq.conf
+	$HIJACKING_ALTQ test -f /rump/etc/altq.conf
+
+	#atf_check -s exit:0 $HIJACKING_ALTQ altqd
+	$HIJACKING_ALTQ altqd
+
+	$HIJACKING_ALTQ test -f /var/run/altqd.pid
+	if [ $? != 0 ]; then
+		atf_check -s exit:0 $HIJACKING_ALTQ altqd -d
+		# Should abort
+	fi
+
+	$HIJACKING_ALTQ cat /var/run/altqd.pid > $ALTQD_PIDFILE
+
+	$DEBUG && $HIJACKING_ALTQ altqstat -s
+
+	$HIJACKING_ALTQ altqstat -c 1 -i shmif0 >./out
+	$DEBUG && cat ./out
+	atf_check -s exit:0 \
+	    -o match:"altqstat: cbq on interface shmif0" \
+	    -o match:'Class 1 on Interface shmif0: root_class' \
+	    -o match:'Class 2 on Interface shmif0: normal_class' \
+	    -o match:'Class 3 on Interface shmif0: ctl_class' \
+	    -o match:'Class 4 on Interface shmif0: drop_class' \
+	    cat ./out
+
+	$HIJACKING_ALTQ altqstat -c 1 -i shmif1 >./out
+	$DEBUG && cat ./out
+	atf_check -s exit:0 \
+	    -o match:"altqstat: cbq on interface shmif1" \
+	    -o match:'Class 1 on Interface shmif1: root_class' \
+	    -o match:'Class 2 on Interface shmif1: normal_class' \
+	    -o match:'Class 3 on Interface shmif1: ctl_class' \
+	    -o match:'Class 4 on Interface shmif1: drop_class' \
+	    cat ./out
+
+	rm -f ./out
+}
+
+test_altq_cbq_multi_ifaces_ipv4()
+{
+	local ifconfig="atf_check -s exit:0 rump.ifconfig"
+	local ping="atf_check -s exit:0 -o ignore rump.ping"
+	local opts="-q -c 1 -w 1"
+
+	rump_server_fs_start $SOCK_LOCAL local altq
+	rump_server_start $SOCK_REMOTE
+
+	rump_server_add_iface $SOCK_LOCAL shmif0 $BUS
+	rump_server_add_iface $SOCK_LOCAL shmif1 $BUS
+	rump_server_add_iface $SOCK_REMOTE shmif0 $BUS
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	$ifconfig shmif0 inet $IP_LOCAL1/24
+	$ifconfig shmif1 inet $IP_LOCAL2/24
+	export RUMP_SERVER=$SOCK_REMOTE
+	$ifconfig shmif0 inet $IP_REMOTE11/24
+	$ifconfig shmif0 inet $IP_REMOTE12/24 alias
+	$ifconfig shmif0 inet $IP_REMOTE21/24 alias
+	$ifconfig shmif0 inet $IP_REMOTE22/24 alias
+	$ifconfig -w 10
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	# Invoke ARP
+	$ping $opts $IP_REMOTE11
+	$ping $opts $IP_REMOTE12
+	$ping $opts $IP_REMOTE21
+	$ping $opts $IP_REMOTE22
+
+	start_altqd_multi_ifaces
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	$ping $opts $IP_REMOTE11
+
+	$HIJACKING_ALTQ altqstat -c 1 -i shmif0 >./out
+	$DEBUG && cat ./out
+
+	check_counter ./out normal 'pkts: 1'
+	check_counter ./out root   'pkts: 1'
+	check_counter ./out drop   'pkts: 0'
+
+	$ping $opts $IP_REMOTE21
+
+	$HIJACKING_ALTQ altqstat -c 1 -i shmif1 >./out
+	$DEBUG && cat ./out
+
+	check_counter ./out normal 'pkts: 1'
+	check_counter ./out root   'pkts: 1'
+	check_counter ./out drop   'pkts: 0'
+
+	export RUMP_SERVER=$SOCK_LOCAL
+	atf_check -s not-exit:0 -o ignore -e match:"No buffer space available" \
+	    rump.ping $opts $IP_REMOTE12
+
+	$HIJACKING_ALTQ altqstat -c 1 -i shmif0 >./out
+	$DEBUG && cat ./out
+
+	check_counter ./out drop   'drops: 1'
+	check_counter ./out drop   'pkts: 0'
+	check_counter ./out normal 'pkts: 1'
+	check_counter ./out root   'pkts: 1'
+
+	atf_check -s not-exit:0 -o ignore -e match:"No buffer space available" \
+	    rump.ping $opts $IP_REMOTE22
+
+	$HIJACKING_ALTQ altqstat -c 1 -i shmif1 >./out
+	$DEBUG && cat ./out
+
+	check_counter ./out drop   'drops: 1'
+	check_counter ./out drop   'pkts: 0'
+	check_counter ./out normal 'pkts: 1'
+	check_counter ./out root   'pkts: 1'
+
+	rm -f ./out
+
+	shutdown_altqd
+
+	rump_server_destroy_ifaces
+}
+
+add_test_case()
+{
+	local algo=$1
+	local type=$2
+	local ipproto=$3
+
+	name="altq_${algo}_${type}_${ipproto}"
+	desc="Tests for ALTQ $algo (${type}) on ${ipproto}"
+
+	atf_test_case ${name} cleanup
+	eval "
+	    ${name}_head() {
+	        atf_set descr \"$desc\"
+	        atf_set require.progs rump_server altqd altqstat
+	    }
+	    ${name}_body() {
+	        test_altq_${algo}_${type}_${ipproto}
+	    }
+	    ${name}_cleanup() {
+	        shutdown_altqd
+	        \$DEBUG && dump
+	        cleanup
+	    }
+	"
+	atf_add_test_case ${name}
+}
+
+atf_init_test_cases()
+{
+
+	add_test_case cbq basic        ipv4
+	add_test_case cbq multi_ifaces ipv4
+}

Reply via email to