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 216