Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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