Commit 34b93f19 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'selftests-pmtu-sh-improve-the-test-result-processing'

Po-Hsu Lin says:

====================
selftests: pmtu.sh: improve the test result processing

The pmtu.sh test script treats all non-zero return code as a failure,
thus it will be marked as FAILED when some sub-test got skipped.

This patchset will:
  1. Use the kselftest framework skip code $ksft_skip to replace the
     hardcoded SKIP return code.
  2. Improve the result processing, the test will be marked as PASSED
     if nothing goes wrong and not all the tests were skipped.
====================

Link: https://lore.kernel.org/r/20201110020049.6705-1-po-hsu.lin@canonical.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 724d06b4 2a9d3716
Loading
Loading
Loading
Loading
+46 −33
Original line number Original line Diff line number Diff line
@@ -355,7 +355,7 @@ setup_fou_or_gue() {
	encap="${3}"
	encap="${3}"


	if [ "${outer}" = "4" ]; then
	if [ "${outer}" = "4" ]; then
		modprobe fou || return 2
		modprobe fou || return $ksft_skip
		a_addr="${prefix4}.${a_r1}.1"
		a_addr="${prefix4}.${a_r1}.1"
		b_addr="${prefix4}.${b_r1}.1"
		b_addr="${prefix4}.${b_r1}.1"
		if [ "${inner}" = "4" ]; then
		if [ "${inner}" = "4" ]; then
@@ -366,7 +366,7 @@ setup_fou_or_gue() {
			ipproto="41"
			ipproto="41"
		fi
		fi
	else
	else
		modprobe fou6 || return 2
		modprobe fou6 || return $ksft_skip
		a_addr="${prefix6}:${a_r1}::1"
		a_addr="${prefix6}:${a_r1}::1"
		b_addr="${prefix6}:${b_r1}::1"
		b_addr="${prefix6}:${b_r1}::1"
		if [ "${inner}" = "4" ]; then
		if [ "${inner}" = "4" ]; then
@@ -380,8 +380,8 @@ setup_fou_or_gue() {
		fi
		fi
	fi
	fi


	run_cmd ${ns_a} ip fou add port 5555 ipproto ${ipproto} || return 2
	run_cmd ${ns_a} ip fou add port 5555 ipproto ${ipproto} || return $ksft_skip
	run_cmd ${ns_a} ip link add ${encap}_a type ${type} ${mode} local ${a_addr} remote ${b_addr} encap ${encap} encap-sport auto encap-dport 5556 || return 2
	run_cmd ${ns_a} ip link add ${encap}_a type ${type} ${mode} local ${a_addr} remote ${b_addr} encap ${encap} encap-sport auto encap-dport 5556 || return $ksft_skip


	run_cmd ${ns_b} ip fou add port 5556 ipproto ${ipproto}
	run_cmd ${ns_b} ip fou add port 5556 ipproto ${ipproto}
	run_cmd ${ns_b} ip link add ${encap}_b type ${type} ${mode} local ${b_addr} remote ${a_addr} encap ${encap} encap-sport auto encap-dport 5555
	run_cmd ${ns_b} ip link add ${encap}_b type ${type} ${mode} local ${b_addr} remote ${a_addr} encap ${encap} encap-sport auto encap-dport 5555
@@ -455,7 +455,7 @@ setup_ipvX_over_ipvY() {
		fi
		fi
	fi
	fi


	run_cmd ${ns_a} ip link add ip_a type ${type} local ${a_addr} remote ${b_addr} mode ${mode} || return 2
	run_cmd ${ns_a} ip link add ip_a type ${type} local ${a_addr} remote ${b_addr} mode ${mode} || return $ksft_skip
	run_cmd ${ns_b} ip link add ip_b type ${type} local ${b_addr} remote ${a_addr} mode ${mode}
	run_cmd ${ns_b} ip link add ip_b type ${type} local ${b_addr} remote ${a_addr} mode ${mode}


	run_cmd ${ns_a} ip link set ip_a up
	run_cmd ${ns_a} ip link set ip_a up
@@ -713,7 +713,7 @@ setup_routing() {
}
}


setup_bridge() {
setup_bridge() {
	run_cmd ${ns_a} ip link add br0 type bridge || return 2
	run_cmd ${ns_a} ip link add br0 type bridge || return $ksft_skip
	run_cmd ${ns_a} ip link set br0 up
	run_cmd ${ns_a} ip link set br0 up


	run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C
	run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C
@@ -765,7 +765,7 @@ setup_ovs_vxlan6() {
}
}


setup_ovs_bridge() {
setup_ovs_bridge() {
	run_cmd ovs-vsctl add-br ovs_br0 || return 2
	run_cmd ovs-vsctl add-br ovs_br0 || return $ksft_skip
	run_cmd ip link set ovs_br0 up
	run_cmd ip link set ovs_br0 up


	run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C
	run_cmd ${ns_c} ip link add veth_C-A type veth peer name veth_A-C
@@ -887,7 +887,7 @@ check_pmtu_value() {
test_pmtu_ipvX() {
test_pmtu_ipvX() {
	family=${1}
	family=${1}


	setup namespaces routing || return 2
	setup namespaces routing || return $ksft_skip
	trace "${ns_a}"  veth_A-R1    "${ns_r1}" veth_R1-A \
	trace "${ns_a}"  veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_r1}" veth_R1-B    "${ns_b}"  veth_B-R1 \
	      "${ns_r1}" veth_R1-B    "${ns_b}"  veth_B-R1 \
	      "${ns_a}"  veth_A-R2    "${ns_r2}" veth_R2-A \
	      "${ns_a}"  veth_A-R2    "${ns_r2}" veth_R2-A \
@@ -985,11 +985,11 @@ test_pmtu_ipvX_over_vxlanY_or_geneveY_exception() {
	ll_mtu=4000
	ll_mtu=4000


	if [ ${outer_family} -eq 4 ]; then
	if [ ${outer_family} -eq 4 ]; then
		setup namespaces routing ${type}4 || return 2
		setup namespaces routing ${type}4 || return $ksft_skip
		#                      IPv4 header   UDP header   VXLAN/GENEVE header   Ethernet header
		#                      IPv4 header   UDP header   VXLAN/GENEVE header   Ethernet header
		exp_mtu=$((${ll_mtu} - 20          - 8          - 8                   - 14))
		exp_mtu=$((${ll_mtu} - 20          - 8          - 8                   - 14))
	else
	else
		setup namespaces routing ${type}6 || return 2
		setup namespaces routing ${type}6 || return $ksft_skip
		#                      IPv6 header   UDP header   VXLAN/GENEVE header   Ethernet header
		#                      IPv6 header   UDP header   VXLAN/GENEVE header   Ethernet header
		exp_mtu=$((${ll_mtu} - 40          - 8          - 8                   - 14))
		exp_mtu=$((${ll_mtu} - 40          - 8          - 8                   - 14))
	fi
	fi
@@ -1060,11 +1060,11 @@ test_pmtu_ipvX_over_bridged_vxlanY_or_geneveY_exception() {
	ll_mtu=4000
	ll_mtu=4000


	if [ ${outer_family} -eq 4 ]; then
	if [ ${outer_family} -eq 4 ]; then
		setup namespaces routing bridge bridged_${type}4 || return 2
		setup namespaces routing bridge bridged_${type}4 || return $ksft_skip
		#                      IPv4 header   UDP header   VXLAN/GENEVE header   Ethernet header
		#                      IPv4 header   UDP header   VXLAN/GENEVE header   Ethernet header
		exp_mtu=$((${ll_mtu} - 20          - 8          - 8                   - 14))
		exp_mtu=$((${ll_mtu} - 20          - 8          - 8                   - 14))
	else
	else
		setup namespaces routing bridge bridged_${type}6 || return 2
		setup namespaces routing bridge bridged_${type}6 || return $ksft_skip
		#                      IPv6 header   UDP header   VXLAN/GENEVE header   Ethernet header
		#                      IPv6 header   UDP header   VXLAN/GENEVE header   Ethernet header
		exp_mtu=$((${ll_mtu} - 40          - 8          - 8                   - 14))
		exp_mtu=$((${ll_mtu} - 40          - 8          - 8                   - 14))
	fi
	fi
@@ -1144,11 +1144,11 @@ test_pmtu_ipvX_over_ovs_vxlanY_or_geneveY_exception() {
	ll_mtu=4000
	ll_mtu=4000


	if [ ${outer_family} -eq 4 ]; then
	if [ ${outer_family} -eq 4 ]; then
		setup namespaces routing ovs_bridge ovs_${type}4 || return 2
		setup namespaces routing ovs_bridge ovs_${type}4 || return $ksft_skip
		#                      IPv4 header   UDP header   VXLAN/GENEVE header   Ethernet header
		#                      IPv4 header   UDP header   VXLAN/GENEVE header   Ethernet header
		exp_mtu=$((${ll_mtu} - 20          - 8          - 8                   - 14))
		exp_mtu=$((${ll_mtu} - 20          - 8          - 8                   - 14))
	else
	else
		setup namespaces routing ovs_bridge ovs_${type}6 || return 2
		setup namespaces routing ovs_bridge ovs_${type}6 || return $ksft_skip
		#                      IPv6 header   UDP header   VXLAN/GENEVE header   Ethernet header
		#                      IPv6 header   UDP header   VXLAN/GENEVE header   Ethernet header
		exp_mtu=$((${ll_mtu} - 40          - 8          - 8                   - 14))
		exp_mtu=$((${ll_mtu} - 40          - 8          - 8                   - 14))
	fi
	fi
@@ -1230,7 +1230,7 @@ test_pmtu_ipvX_over_fouY_or_gueY() {
	encap=${3}
	encap=${3}
	ll_mtu=4000
	ll_mtu=4000


	setup namespaces routing ${encap}${outer_family}${inner_family} || return 2
	setup namespaces routing ${encap}${outer_family}${inner_family} || return $ksft_skip
	trace "${ns_a}" ${encap}_a   "${ns_b}"  ${encap}_b \
	trace "${ns_a}" ${encap}_a   "${ns_b}"  ${encap}_b \
	      "${ns_a}" veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_a}" veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_b}" veth_B-R1    "${ns_r1}" veth_R1-B
	      "${ns_b}" veth_B-R1    "${ns_r1}" veth_R1-B
@@ -1309,7 +1309,7 @@ test_pmtu_ipvX_over_ipvY_exception() {
	outer=${2}
	outer=${2}
	ll_mtu=4000
	ll_mtu=4000


	setup namespaces routing ip${inner}ip${outer} || return 2
	setup namespaces routing ip${inner}ip${outer} || return $ksft_skip


	trace "${ns_a}" ip_a         "${ns_b}"  ip_b  \
	trace "${ns_a}" ip_a         "${ns_b}"  ip_b  \
	      "${ns_a}" veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_a}" veth_A-R1    "${ns_r1}" veth_R1-A \
@@ -1363,7 +1363,7 @@ test_pmtu_ipv6_ipv6_exception() {
}
}


test_pmtu_vti4_exception() {
test_pmtu_vti4_exception() {
	setup namespaces veth vti4 xfrm4 || return 2
	setup namespaces veth vti4 xfrm4 || return $ksft_skip
	trace "${ns_a}" veth_a    "${ns_b}" veth_b \
	trace "${ns_a}" veth_a    "${ns_b}" veth_b \
	      "${ns_a}" vti4_a    "${ns_b}" vti4_b
	      "${ns_a}" vti4_a    "${ns_b}" vti4_b


@@ -1393,7 +1393,7 @@ test_pmtu_vti4_exception() {
}
}


test_pmtu_vti6_exception() {
test_pmtu_vti6_exception() {
	setup namespaces veth vti6 xfrm6 || return 2
	setup namespaces veth vti6 xfrm6 || return $ksft_skip
	trace "${ns_a}" veth_a    "${ns_b}" veth_b \
	trace "${ns_a}" veth_a    "${ns_b}" veth_b \
	      "${ns_a}" vti6_a    "${ns_b}" vti6_b
	      "${ns_a}" vti6_a    "${ns_b}" vti6_b
	fail=0
	fail=0
@@ -1423,7 +1423,7 @@ test_pmtu_vti6_exception() {
}
}


test_pmtu_vti4_default_mtu() {
test_pmtu_vti4_default_mtu() {
	setup namespaces veth vti4 || return 2
	setup namespaces veth vti4 || return $ksft_skip


	# Check that MTU of vti device is MTU of veth minus IPv4 header length
	# Check that MTU of vti device is MTU of veth minus IPv4 header length
	veth_mtu="$(link_get_mtu "${ns_a}" veth_a)"
	veth_mtu="$(link_get_mtu "${ns_a}" veth_a)"
@@ -1435,7 +1435,7 @@ test_pmtu_vti4_default_mtu() {
}
}


test_pmtu_vti6_default_mtu() {
test_pmtu_vti6_default_mtu() {
	setup namespaces veth vti6 || return 2
	setup namespaces veth vti6 || return $ksft_skip


	# Check that MTU of vti device is MTU of veth minus IPv6 header length
	# Check that MTU of vti device is MTU of veth minus IPv6 header length
	veth_mtu="$(link_get_mtu "${ns_a}" veth_a)"
	veth_mtu="$(link_get_mtu "${ns_a}" veth_a)"
@@ -1447,10 +1447,10 @@ test_pmtu_vti6_default_mtu() {
}
}


test_pmtu_vti4_link_add_mtu() {
test_pmtu_vti4_link_add_mtu() {
	setup namespaces || return 2
	setup namespaces || return $ksft_skip


	run_cmd ${ns_a} ip link add vti4_a type vti local ${veth4_a_addr} remote ${veth4_b_addr} key 10
	run_cmd ${ns_a} ip link add vti4_a type vti local ${veth4_a_addr} remote ${veth4_b_addr} key 10
	[ $? -ne 0 ] && err "  vti not supported" && return 2
	[ $? -ne 0 ] && err "  vti not supported" && return $ksft_skip
	run_cmd ${ns_a} ip link del vti4_a
	run_cmd ${ns_a} ip link del vti4_a


	fail=0
	fail=0
@@ -1485,10 +1485,10 @@ test_pmtu_vti4_link_add_mtu() {
}
}


test_pmtu_vti6_link_add_mtu() {
test_pmtu_vti6_link_add_mtu() {
	setup namespaces || return 2
	setup namespaces || return $ksft_skip


	run_cmd ${ns_a} ip link add vti6_a type vti6 local ${veth6_a_addr} remote ${veth6_b_addr} key 10
	run_cmd ${ns_a} ip link add vti6_a type vti6 local ${veth6_a_addr} remote ${veth6_b_addr} key 10
	[ $? -ne 0 ] && err "  vti6 not supported" && return 2
	[ $? -ne 0 ] && err "  vti6 not supported" && return $ksft_skip
	run_cmd ${ns_a} ip link del vti6_a
	run_cmd ${ns_a} ip link del vti6_a


	fail=0
	fail=0
@@ -1523,10 +1523,10 @@ test_pmtu_vti6_link_add_mtu() {
}
}


test_pmtu_vti6_link_change_mtu() {
test_pmtu_vti6_link_change_mtu() {
	setup namespaces || return 2
	setup namespaces || return $ksft_skip


	run_cmd ${ns_a} ip link add dummy0 mtu 1500 type dummy
	run_cmd ${ns_a} ip link add dummy0 mtu 1500 type dummy
	[ $? -ne 0 ] && err "  dummy not supported" && return 2
	[ $? -ne 0 ] && err "  dummy not supported" && return $ksft_skip
	run_cmd ${ns_a} ip link add dummy1 mtu 3000 type dummy
	run_cmd ${ns_a} ip link add dummy1 mtu 3000 type dummy
	run_cmd ${ns_a} ip link set dummy0 up
	run_cmd ${ns_a} ip link set dummy0 up
	run_cmd ${ns_a} ip link set dummy1 up
	run_cmd ${ns_a} ip link set dummy1 up
@@ -1579,10 +1579,10 @@ test_cleanup_vxlanX_exception() {
	encap="vxlan"
	encap="vxlan"
	ll_mtu=4000
	ll_mtu=4000


	check_command taskset || return 2
	check_command taskset || return $ksft_skip
	cpu_list=$(grep -m 2 processor /proc/cpuinfo | cut -d ' ' -f 2)
	cpu_list=$(grep -m 2 processor /proc/cpuinfo | cut -d ' ' -f 2)


	setup namespaces routing ${encap}${outer} || return 2
	setup namespaces routing ${encap}${outer} || return $ksft_skip
	trace "${ns_a}" ${encap}_a   "${ns_b}"  ${encap}_b \
	trace "${ns_a}" ${encap}_a   "${ns_b}"  ${encap}_b \
	      "${ns_a}" veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_a}" veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_b}" veth_B-R1    "${ns_r1}" veth_R1-B
	      "${ns_b}" veth_B-R1    "${ns_r1}" veth_R1-B
@@ -1644,7 +1644,7 @@ run_test() {
		fi
		fi
		err_flush
		err_flush
		exit 1
		exit 1
	elif [ $ret -eq 2 ]; then
	elif [ $ret -eq $ksft_skip ]; then
		printf "TEST: %-60s  [SKIP]\n" "${tdesc}"
		printf "TEST: %-60s  [SKIP]\n" "${tdesc}"
		err_flush
		err_flush
	fi
	fi
@@ -1652,7 +1652,19 @@ run_test() {
	return $ret
	return $ret
	)
	)
	ret=$?
	ret=$?
	[ $ret -ne 0 ] && exitcode=1
	case $ret in
		0)
			all_skipped=false
			[ $exitcode=$ksft_skip ] && exitcode=0
		;;
		$ksft_skip)
			[ $all_skipped = true ] && exitcode=$ksft_skip
		;;
		*)
			all_skipped=false
			exitcode=1
		;;
	esac


	return $ret
	return $ret
}
}
@@ -1667,7 +1679,7 @@ run_test_nh() {
}
}


test_list_flush_ipv4_exception() {
test_list_flush_ipv4_exception() {
	setup namespaces routing || return 2
	setup namespaces routing || return $ksft_skip
	trace "${ns_a}"  veth_A-R1    "${ns_r1}" veth_R1-A \
	trace "${ns_a}"  veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_r1}" veth_R1-B    "${ns_b}"  veth_B-R1 \
	      "${ns_r1}" veth_R1-B    "${ns_b}"  veth_B-R1 \
	      "${ns_a}"  veth_A-R2    "${ns_r2}" veth_R2-A \
	      "${ns_a}"  veth_A-R2    "${ns_r2}" veth_R2-A \
@@ -1721,7 +1733,7 @@ test_list_flush_ipv4_exception() {
}
}


test_list_flush_ipv6_exception() {
test_list_flush_ipv6_exception() {
	setup namespaces routing || return 2
	setup namespaces routing || return $ksft_skip
	trace "${ns_a}"  veth_A-R1    "${ns_r1}" veth_R1-A \
	trace "${ns_a}"  veth_A-R1    "${ns_r1}" veth_R1-A \
	      "${ns_r1}" veth_R1-B    "${ns_b}"  veth_B-R1 \
	      "${ns_r1}" veth_R1-B    "${ns_b}"  veth_B-R1 \
	      "${ns_a}"  veth_A-R2    "${ns_r2}" veth_R2-A \
	      "${ns_a}"  veth_A-R2    "${ns_r2}" veth_R2-A \
@@ -1786,6 +1798,7 @@ usage() {
#
#
exitcode=0
exitcode=0
desc=0
desc=0
all_skipped=true


while getopts :ptv o
while getopts :ptv o
do
do
@@ -1840,7 +1853,7 @@ for t in ${tests}; do
	if [ $run_this -eq 1 ]; then
	if [ $run_this -eq 1 ]; then
		run_test "${name}" "${desc}"
		run_test "${name}" "${desc}"
		# if test was skipped no need to retry with nexthop objects
		# if test was skipped no need to retry with nexthop objects
		[ $? -eq 2 ] && rerun_nh=0
		[ $? -eq $ksft_skip ] && rerun_nh=0


		if [ "${rerun_nh}" = "1" ]; then
		if [ "${rerun_nh}" = "1" ]; then
			run_test_nh "${name}" "${desc}"
			run_test_nh "${name}" "${desc}"