| #!/bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| |
| # This tests the operation of lib.sh itself. |
| |
| ALL_TESTS=" |
| test_ret |
| test_exit_status |
| " |
| NUM_NETIFS=0 |
| source lib.sh |
| |
| # Simulated checks. |
| |
| do_test() |
| { |
| local msg=$1; shift |
| |
| "$@" |
| check_err $? "$msg" |
| } |
| |
| tpass() |
| { |
| do_test "tpass" true |
| } |
| |
| tfail() |
| { |
| do_test "tfail" false |
| } |
| |
| txfail() |
| { |
| FAIL_TO_XFAIL=yes do_test "txfail" false |
| } |
| |
| # Simulated tests. |
| |
| pass() |
| { |
| RET=0 |
| do_test "true" true |
| log_test "true" |
| } |
| |
| fail() |
| { |
| RET=0 |
| do_test "false" false |
| log_test "false" |
| } |
| |
| xfail() |
| { |
| RET=0 |
| FAIL_TO_XFAIL=yes do_test "xfalse" false |
| log_test "xfalse" |
| } |
| |
| skip() |
| { |
| RET=0 |
| log_test_skip "skip" |
| } |
| |
| slow_xfail() |
| { |
| RET=0 |
| xfail_on_slow do_test "slow_false" false |
| log_test "slow_false" |
| } |
| |
| # lib.sh tests. |
| |
| ret_tests_run() |
| { |
| local t |
| |
| RET=0 |
| retmsg= |
| for t in "$@"; do |
| $t |
| done |
| echo "$retmsg" |
| return $RET |
| } |
| |
| ret_subtest() |
| { |
| local expect_ret=$1; shift |
| local expect_retmsg=$1; shift |
| local -a tests=( "$@" ) |
| |
| local status_names=(pass fail xfail xpass skip) |
| local ret |
| local out |
| |
| RET=0 |
| |
| # Run this in a subshell, so that our environment is intact. |
| out=$(ret_tests_run "${tests[@]}") |
| ret=$? |
| |
| (( ret == expect_ret )) |
| check_err $? "RET=$ret expected $expect_ret" |
| |
| [[ $out == $expect_retmsg ]] |
| check_err $? "retmsg=$out expected $expect_retmsg" |
| |
| log_test "RET $(echo ${tests[@]}) -> ${status_names[$ret]}" |
| } |
| |
| test_ret() |
| { |
| ret_subtest $ksft_pass "" |
| |
| ret_subtest $ksft_pass "" tpass |
| ret_subtest $ksft_fail "tfail" tfail |
| ret_subtest $ksft_xfail "txfail" txfail |
| |
| ret_subtest $ksft_pass "" tpass tpass |
| ret_subtest $ksft_fail "tfail" tpass tfail |
| ret_subtest $ksft_xfail "txfail" tpass txfail |
| |
| ret_subtest $ksft_fail "tfail" tfail tpass |
| ret_subtest $ksft_xfail "txfail" txfail tpass |
| |
| ret_subtest $ksft_fail "tfail" tfail tfail |
| ret_subtest $ksft_fail "tfail" tfail txfail |
| |
| ret_subtest $ksft_fail "tfail" txfail tfail |
| |
| ret_subtest $ksft_xfail "txfail" txfail txfail |
| } |
| |
| exit_status_tests_run() |
| { |
| EXIT_STATUS=0 |
| tests_run > /dev/null |
| return $EXIT_STATUS |
| } |
| |
| exit_status_subtest() |
| { |
| local expect_exit_status=$1; shift |
| local tests=$1; shift |
| local what=$1; shift |
| |
| local status_names=(pass fail xfail xpass skip) |
| local exit_status |
| local out |
| |
| RET=0 |
| |
| # Run this in a subshell, so that our environment is intact. |
| out=$(TESTS="$tests" exit_status_tests_run) |
| exit_status=$? |
| |
| (( exit_status == expect_exit_status )) |
| check_err $? "EXIT_STATUS=$exit_status, expected $expect_exit_status" |
| |
| log_test "EXIT_STATUS $tests$what -> ${status_names[$exit_status]}" |
| } |
| |
| test_exit_status() |
| { |
| exit_status_subtest $ksft_pass ":" |
| |
| exit_status_subtest $ksft_pass "pass" |
| exit_status_subtest $ksft_fail "fail" |
| exit_status_subtest $ksft_pass "xfail" |
| exit_status_subtest $ksft_skip "skip" |
| |
| exit_status_subtest $ksft_pass "pass pass" |
| exit_status_subtest $ksft_fail "pass fail" |
| exit_status_subtest $ksft_pass "pass xfail" |
| exit_status_subtest $ksft_skip "pass skip" |
| |
| exit_status_subtest $ksft_fail "fail pass" |
| exit_status_subtest $ksft_pass "xfail pass" |
| exit_status_subtest $ksft_skip "skip pass" |
| |
| exit_status_subtest $ksft_fail "fail fail" |
| exit_status_subtest $ksft_fail "fail xfail" |
| exit_status_subtest $ksft_fail "fail skip" |
| |
| exit_status_subtest $ksft_fail "xfail fail" |
| exit_status_subtest $ksft_fail "skip fail" |
| |
| exit_status_subtest $ksft_pass "xfail xfail" |
| exit_status_subtest $ksft_skip "xfail skip" |
| exit_status_subtest $ksft_skip "skip xfail" |
| |
| exit_status_subtest $ksft_skip "skip skip" |
| |
| KSFT_MACHINE_SLOW=yes \ |
| exit_status_subtest $ksft_pass "slow_xfail" ": slow" |
| |
| KSFT_MACHINE_SLOW=no \ |
| exit_status_subtest $ksft_fail "slow_xfail" ": fast" |
| } |
| |
| trap pre_cleanup EXIT |
| |
| tests_run |
| |
| exit $EXIT_STATUS |