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 33txfail() 34{ 35 FAIL_TO_XFAIL=yes do_test "txfail" false 36} 37 38# Simulated tests. 39 40pass() 41{ 42 RET=0 43 do_test "true" true 44 log_test "true" 45} 46 47fail() 48{ 49 RET=0 50 do_test "false" false 51 log_test "false" 52} 53 54xfail() 55{ 56 RET=0 57 FAIL_TO_XFAIL=yes do_test "xfalse" false 58 log_test "xfalse" 59} 60 61skip() 62{ 63 RET=0 64 log_test_skip "skip" 65} 66 67slow_xfail() 68{ 69 RET=0 70 xfail_on_slow do_test "slow_false" false 71 log_test "slow_false" 72} 73 74# lib.sh tests. 75 76ret_tests_run() 77{ 78 local t 79 80 RET=0 81 retmsg= 82 for t in "$@"; do 83 $t 84 done 85 echo "$retmsg" 86 return $RET 87} 88 89ret_subtest() 90{ 91 local expect_ret=$1; shift 92 local expect_retmsg=$1; shift 93 local -a tests=( "$@" ) 94 95 local status_names=(pass fail xfail xpass skip) 96 local ret 97 local out 98 99 RET=0 100 101 # Run this in a subshell, so that our environment is intact. 102 out=$(ret_tests_run "${tests[@]}") 103 ret=$? 104 105 (( ret == expect_ret )) 106 check_err $? "RET=$ret expected $expect_ret" 107 108 [[ $out == $expect_retmsg ]] 109 check_err $? "retmsg=$out expected $expect_retmsg" 110 111 log_test "RET $(echo ${tests[@]}) -> ${status_names[$ret]}" 112} 113 114test_ret() 115{ 116 ret_subtest $ksft_pass "" 117 118 ret_subtest $ksft_pass "" tpass 119 ret_subtest $ksft_fail "tfail" tfail 120 ret_subtest $ksft_xfail "txfail" txfail 121 122 ret_subtest $ksft_pass "" tpass tpass 123 ret_subtest $ksft_fail "tfail" tpass tfail 124 ret_subtest $ksft_xfail "txfail" tpass txfail 125 126 ret_subtest $ksft_fail "tfail" tfail tpass 127 ret_subtest $ksft_xfail "txfail" txfail tpass 128 129 ret_subtest $ksft_fail "tfail" tfail tfail 130 ret_subtest $ksft_fail "tfail" tfail txfail 131 132 ret_subtest $ksft_fail "tfail" txfail tfail 133 134 ret_subtest $ksft_xfail "txfail" txfail txfail 135} 136 137exit_status_tests_run() 138{ 139 EXIT_STATUS=0 140 tests_run > /dev/null 141 return $EXIT_STATUS 142} 143 144exit_status_subtest() 145{ 146 local expect_exit_status=$1; shift 147 local tests=$1; shift 148 local what=$1; shift 149 150 local status_names=(pass fail xfail xpass skip) 151 local exit_status 152 local out 153 154 RET=0 155 156 # Run this in a subshell, so that our environment is intact. 157 out=$(TESTS="$tests" exit_status_tests_run) 158 exit_status=$? 159 160 (( exit_status == expect_exit_status )) 161 check_err $? "EXIT_STATUS=$exit_status, expected $expect_exit_status" 162 163 log_test "EXIT_STATUS $tests$what -> ${status_names[$exit_status]}" 164} 165 166test_exit_status() 167{ 168 exit_status_subtest $ksft_pass ":" 169 170 exit_status_subtest $ksft_pass "pass" 171 exit_status_subtest $ksft_fail "fail" 172 exit_status_subtest $ksft_pass "xfail" 173 exit_status_subtest $ksft_skip "skip" 174 175 exit_status_subtest $ksft_pass "pass pass" 176 exit_status_subtest $ksft_fail "pass fail" 177 exit_status_subtest $ksft_pass "pass xfail" 178 exit_status_subtest $ksft_skip "pass skip" 179 180 exit_status_subtest $ksft_fail "fail pass" 181 exit_status_subtest $ksft_pass "xfail pass" 182 exit_status_subtest $ksft_skip "skip pass" 183 184 exit_status_subtest $ksft_fail "fail fail" 185 exit_status_subtest $ksft_fail "fail xfail" 186 exit_status_subtest $ksft_fail "fail skip" 187 188 exit_status_subtest $ksft_fail "xfail fail" 189 exit_status_subtest $ksft_fail "skip fail" 190 191 exit_status_subtest $ksft_pass "xfail xfail" 192 exit_status_subtest $ksft_skip "xfail skip" 193 exit_status_subtest $ksft_skip "skip xfail" 194 195 exit_status_subtest $ksft_skip "skip skip" 196 197 KSFT_MACHINE_SLOW=yes \ 198 exit_status_subtest $ksft_pass "slow_xfail" ": slow" 199 200 KSFT_MACHINE_SLOW=no \ 201 exit_status_subtest $ksft_fail "slow_xfail" ": fast" 202} 203 204trap pre_cleanup EXIT 205 206tests_run 207 208exit $EXIT_STATUS 209