209 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4# This tests the operation of lib.sh itself.5 6ALL_TESTS="7 test_ret8 test_exit_status9"10NUM_NETIFS=011source lib.sh12 13# Simulated checks.14 15do_test()16{17 local msg=$1; shift18 19 "$@"20 check_err $? "$msg"21}22 23tpass()24{25 do_test "tpass" true26}27 28tfail()29{30 do_test "tfail" false31}32 33txfail()34{35 FAIL_TO_XFAIL=yes do_test "txfail" false36}37 38# Simulated tests.39 40pass()41{42 RET=043 do_test "true" true44 log_test "true"45}46 47fail()48{49 RET=050 do_test "false" false51 log_test "false"52}53 54xfail()55{56 RET=057 FAIL_TO_XFAIL=yes do_test "xfalse" false58 log_test "xfalse"59}60 61skip()62{63 RET=064 log_test_skip "skip"65}66 67slow_xfail()68{69 RET=070 xfail_on_slow do_test "slow_false" false71 log_test "slow_false"72}73 74# lib.sh tests.75 76ret_tests_run()77{78 local t79 80 RET=081 retmsg=82 for t in "$@"; do83 $t84 done85 echo "$retmsg"86 return $RET87}88 89ret_subtest()90{91 local expect_ret=$1; shift92 local expect_retmsg=$1; shift93 local -a tests=( "$@" )94 95 local status_names=(pass fail xfail xpass skip)96 local ret97 local out98 99 RET=0100 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 "" tpass119 ret_subtest $ksft_fail "tfail" tfail120 ret_subtest $ksft_xfail "txfail" txfail121 122 ret_subtest $ksft_pass "" tpass tpass123 ret_subtest $ksft_fail "tfail" tpass tfail124 ret_subtest $ksft_xfail "txfail" tpass txfail125 126 ret_subtest $ksft_fail "tfail" tfail tpass127 ret_subtest $ksft_xfail "txfail" txfail tpass128 129 ret_subtest $ksft_fail "tfail" tfail tfail130 ret_subtest $ksft_fail "tfail" tfail txfail131 132 ret_subtest $ksft_fail "tfail" txfail tfail133 134 ret_subtest $ksft_xfail "txfail" txfail txfail135}136 137exit_status_tests_run()138{139 EXIT_STATUS=0140 tests_run > /dev/null141 return $EXIT_STATUS142}143 144exit_status_subtest()145{146 local expect_exit_status=$1; shift147 local tests=$1; shift148 local what=$1; shift149 150 local status_names=(pass fail xfail xpass skip)151 local exit_status152 local out153 154 RET=0155 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 EXIT205 206tests_run207 208exit $EXIT_STATUS209