File Index
Files and directories
Sign in
FILE

lib_sh_test.sh

File preview with syntax highlighting.

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