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