xref: /linux/tools/testing/selftests/net/forwarding/lib_sh_test.sh (revision 621cde16e49b3ecf7d59a8106a20aaebfb4a59a9)
1*8ff2d7abSPetr Machata#!/bin/bash
2*8ff2d7abSPetr Machata# SPDX-License-Identifier: GPL-2.0
3*8ff2d7abSPetr Machata
4*8ff2d7abSPetr Machata# This tests the operation of lib.sh itself.
5*8ff2d7abSPetr Machata
6*8ff2d7abSPetr MachataALL_TESTS="
7*8ff2d7abSPetr Machata	test_ret
8*8ff2d7abSPetr Machata	test_exit_status
9*8ff2d7abSPetr Machata"
10*8ff2d7abSPetr MachataNUM_NETIFS=0
11*8ff2d7abSPetr Machatasource lib.sh
12*8ff2d7abSPetr Machata
13*8ff2d7abSPetr Machata# Simulated checks.
14*8ff2d7abSPetr Machata
15*8ff2d7abSPetr Machatado_test()
16*8ff2d7abSPetr Machata{
17*8ff2d7abSPetr Machata	local msg=$1; shift
18*8ff2d7abSPetr Machata
19*8ff2d7abSPetr Machata	"$@"
20*8ff2d7abSPetr Machata	check_err $? "$msg"
21*8ff2d7abSPetr Machata}
22*8ff2d7abSPetr Machata
23*8ff2d7abSPetr Machatatpass()
24*8ff2d7abSPetr Machata{
25*8ff2d7abSPetr Machata	do_test "tpass" true
26*8ff2d7abSPetr Machata}
27*8ff2d7abSPetr Machata
28*8ff2d7abSPetr Machatatfail()
29*8ff2d7abSPetr Machata{
30*8ff2d7abSPetr Machata	do_test "tfail" false
31*8ff2d7abSPetr Machata}
32*8ff2d7abSPetr Machata
33*8ff2d7abSPetr Machatatxfail()
34*8ff2d7abSPetr Machata{
35*8ff2d7abSPetr Machata	FAIL_TO_XFAIL=yes do_test "txfail" false
36*8ff2d7abSPetr Machata}
37*8ff2d7abSPetr Machata
38*8ff2d7abSPetr Machata# Simulated tests.
39*8ff2d7abSPetr Machata
40*8ff2d7abSPetr Machatapass()
41*8ff2d7abSPetr Machata{
42*8ff2d7abSPetr Machata	RET=0
43*8ff2d7abSPetr Machata	do_test "true" true
44*8ff2d7abSPetr Machata	log_test "true"
45*8ff2d7abSPetr Machata}
46*8ff2d7abSPetr Machata
47*8ff2d7abSPetr Machatafail()
48*8ff2d7abSPetr Machata{
49*8ff2d7abSPetr Machata	RET=0
50*8ff2d7abSPetr Machata	do_test "false" false
51*8ff2d7abSPetr Machata	log_test "false"
52*8ff2d7abSPetr Machata}
53*8ff2d7abSPetr Machata
54*8ff2d7abSPetr Machataxfail()
55*8ff2d7abSPetr Machata{
56*8ff2d7abSPetr Machata	RET=0
57*8ff2d7abSPetr Machata	FAIL_TO_XFAIL=yes do_test "xfalse" false
58*8ff2d7abSPetr Machata	log_test "xfalse"
59*8ff2d7abSPetr Machata}
60*8ff2d7abSPetr Machata
61*8ff2d7abSPetr Machataskip()
62*8ff2d7abSPetr Machata{
63*8ff2d7abSPetr Machata	RET=0
64*8ff2d7abSPetr Machata	log_test_skip "skip"
65*8ff2d7abSPetr Machata}
66*8ff2d7abSPetr Machata
67*8ff2d7abSPetr Machataslow_xfail()
68*8ff2d7abSPetr Machata{
69*8ff2d7abSPetr Machata	RET=0
70*8ff2d7abSPetr Machata	xfail_on_slow do_test "slow_false" false
71*8ff2d7abSPetr Machata	log_test "slow_false"
72*8ff2d7abSPetr Machata}
73*8ff2d7abSPetr Machata
74*8ff2d7abSPetr Machata# lib.sh tests.
75*8ff2d7abSPetr Machata
76*8ff2d7abSPetr Machataret_tests_run()
77*8ff2d7abSPetr Machata{
78*8ff2d7abSPetr Machata	local t
79*8ff2d7abSPetr Machata
80*8ff2d7abSPetr Machata	RET=0
81*8ff2d7abSPetr Machata	retmsg=
82*8ff2d7abSPetr Machata	for t in "$@"; do
83*8ff2d7abSPetr Machata		$t
84*8ff2d7abSPetr Machata	done
85*8ff2d7abSPetr Machata	echo "$retmsg"
86*8ff2d7abSPetr Machata	return $RET
87*8ff2d7abSPetr Machata}
88*8ff2d7abSPetr Machata
89*8ff2d7abSPetr Machataret_subtest()
90*8ff2d7abSPetr Machata{
91*8ff2d7abSPetr Machata	local expect_ret=$1; shift
92*8ff2d7abSPetr Machata	local expect_retmsg=$1; shift
93*8ff2d7abSPetr Machata	local -a tests=( "$@" )
94*8ff2d7abSPetr Machata
95*8ff2d7abSPetr Machata	local status_names=(pass fail xfail xpass skip)
96*8ff2d7abSPetr Machata	local ret
97*8ff2d7abSPetr Machata	local out
98*8ff2d7abSPetr Machata
99*8ff2d7abSPetr Machata	RET=0
100*8ff2d7abSPetr Machata
101*8ff2d7abSPetr Machata	# Run this in a subshell, so that our environment is intact.
102*8ff2d7abSPetr Machata	out=$(ret_tests_run "${tests[@]}")
103*8ff2d7abSPetr Machata	ret=$?
104*8ff2d7abSPetr Machata
105*8ff2d7abSPetr Machata	(( ret == expect_ret ))
106*8ff2d7abSPetr Machata	check_err $? "RET=$ret expected $expect_ret"
107*8ff2d7abSPetr Machata
108*8ff2d7abSPetr Machata	[[ $out == $expect_retmsg ]]
109*8ff2d7abSPetr Machata	check_err $? "retmsg=$out expected $expect_retmsg"
110*8ff2d7abSPetr Machata
111*8ff2d7abSPetr Machata	log_test "RET $(echo ${tests[@]}) -> ${status_names[$ret]}"
112*8ff2d7abSPetr Machata}
113*8ff2d7abSPetr Machata
114*8ff2d7abSPetr Machatatest_ret()
115*8ff2d7abSPetr Machata{
116*8ff2d7abSPetr Machata	ret_subtest $ksft_pass ""
117*8ff2d7abSPetr Machata
118*8ff2d7abSPetr Machata	ret_subtest $ksft_pass "" tpass
119*8ff2d7abSPetr Machata	ret_subtest $ksft_fail "tfail" tfail
120*8ff2d7abSPetr Machata	ret_subtest $ksft_xfail "txfail" txfail
121*8ff2d7abSPetr Machata
122*8ff2d7abSPetr Machata	ret_subtest $ksft_pass "" tpass tpass
123*8ff2d7abSPetr Machata	ret_subtest $ksft_fail "tfail" tpass tfail
124*8ff2d7abSPetr Machata	ret_subtest $ksft_xfail "txfail" tpass txfail
125*8ff2d7abSPetr Machata
126*8ff2d7abSPetr Machata	ret_subtest $ksft_fail "tfail" tfail tpass
127*8ff2d7abSPetr Machata	ret_subtest $ksft_xfail "txfail" txfail tpass
128*8ff2d7abSPetr Machata
129*8ff2d7abSPetr Machata	ret_subtest $ksft_fail "tfail" tfail tfail
130*8ff2d7abSPetr Machata	ret_subtest $ksft_fail "tfail" tfail txfail
131*8ff2d7abSPetr Machata
132*8ff2d7abSPetr Machata	ret_subtest $ksft_fail "tfail" txfail tfail
133*8ff2d7abSPetr Machata
134*8ff2d7abSPetr Machata	ret_subtest $ksft_xfail "txfail" txfail txfail
135*8ff2d7abSPetr Machata}
136*8ff2d7abSPetr Machata
137*8ff2d7abSPetr Machataexit_status_tests_run()
138*8ff2d7abSPetr Machata{
139*8ff2d7abSPetr Machata	EXIT_STATUS=0
140*8ff2d7abSPetr Machata	tests_run > /dev/null
141*8ff2d7abSPetr Machata	return $EXIT_STATUS
142*8ff2d7abSPetr Machata}
143*8ff2d7abSPetr Machata
144*8ff2d7abSPetr Machataexit_status_subtest()
145*8ff2d7abSPetr Machata{
146*8ff2d7abSPetr Machata	local expect_exit_status=$1; shift
147*8ff2d7abSPetr Machata	local tests=$1; shift
148*8ff2d7abSPetr Machata	local what=$1; shift
149*8ff2d7abSPetr Machata
150*8ff2d7abSPetr Machata	local status_names=(pass fail xfail xpass skip)
151*8ff2d7abSPetr Machata	local exit_status
152*8ff2d7abSPetr Machata	local out
153*8ff2d7abSPetr Machata
154*8ff2d7abSPetr Machata	RET=0
155*8ff2d7abSPetr Machata
156*8ff2d7abSPetr Machata	# Run this in a subshell, so that our environment is intact.
157*8ff2d7abSPetr Machata	out=$(TESTS="$tests" exit_status_tests_run)
158*8ff2d7abSPetr Machata	exit_status=$?
159*8ff2d7abSPetr Machata
160*8ff2d7abSPetr Machata	(( exit_status == expect_exit_status ))
161*8ff2d7abSPetr Machata	check_err $? "EXIT_STATUS=$exit_status, expected $expect_exit_status"
162*8ff2d7abSPetr Machata
163*8ff2d7abSPetr Machata	log_test "EXIT_STATUS $tests$what -> ${status_names[$exit_status]}"
164*8ff2d7abSPetr Machata}
165*8ff2d7abSPetr Machata
166*8ff2d7abSPetr Machatatest_exit_status()
167*8ff2d7abSPetr Machata{
168*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass ":"
169*8ff2d7abSPetr Machata
170*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass "pass"
171*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "fail"
172*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass "xfail"
173*8ff2d7abSPetr Machata	exit_status_subtest $ksft_skip "skip"
174*8ff2d7abSPetr Machata
175*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass "pass pass"
176*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "pass fail"
177*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass "pass xfail"
178*8ff2d7abSPetr Machata	exit_status_subtest $ksft_skip "pass skip"
179*8ff2d7abSPetr Machata
180*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "fail pass"
181*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass "xfail pass"
182*8ff2d7abSPetr Machata	exit_status_subtest $ksft_skip "skip pass"
183*8ff2d7abSPetr Machata
184*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "fail fail"
185*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "fail xfail"
186*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "fail skip"
187*8ff2d7abSPetr Machata
188*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "xfail fail"
189*8ff2d7abSPetr Machata	exit_status_subtest $ksft_fail "skip fail"
190*8ff2d7abSPetr Machata
191*8ff2d7abSPetr Machata	exit_status_subtest $ksft_pass "xfail xfail"
192*8ff2d7abSPetr Machata	exit_status_subtest $ksft_skip "xfail skip"
193*8ff2d7abSPetr Machata	exit_status_subtest $ksft_skip "skip xfail"
194*8ff2d7abSPetr Machata
195*8ff2d7abSPetr Machata	exit_status_subtest $ksft_skip "skip skip"
196*8ff2d7abSPetr Machata
197*8ff2d7abSPetr Machata	KSFT_MACHINE_SLOW=yes \
198*8ff2d7abSPetr Machata		exit_status_subtest $ksft_pass "slow_xfail" ": slow"
199*8ff2d7abSPetr Machata
200*8ff2d7abSPetr Machata	KSFT_MACHINE_SLOW=no \
201*8ff2d7abSPetr Machata		exit_status_subtest $ksft_fail "slow_xfail" ": fast"
202*8ff2d7abSPetr Machata}
203*8ff2d7abSPetr Machata
204*8ff2d7abSPetr Machatatrap pre_cleanup EXIT
205*8ff2d7abSPetr Machata
206*8ff2d7abSPetr Machatatests_run
207*8ff2d7abSPetr Machata
208*8ff2d7abSPetr Machataexit $EXIT_STATUS
209