1*00b67f09SDavid van Moolenbroek# 2*00b67f09SDavid van Moolenbroek# Automated Testing Framework (atf) 3*00b67f09SDavid van Moolenbroek# 4*00b67f09SDavid van Moolenbroek# Copyright (c) 2007 The NetBSD Foundation, Inc. 5*00b67f09SDavid van Moolenbroek# All rights reserved. 6*00b67f09SDavid van Moolenbroek# 7*00b67f09SDavid van Moolenbroek# Redistribution and use in source and binary forms, with or without 8*00b67f09SDavid van Moolenbroek# modification, are permitted provided that the following conditions 9*00b67f09SDavid van Moolenbroek# are met: 10*00b67f09SDavid van Moolenbroek# 1. Redistributions of source code must retain the above copyright 11*00b67f09SDavid van Moolenbroek# notice, this list of conditions and the following disclaimer. 12*00b67f09SDavid van Moolenbroek# 2. Redistributions in binary form must reproduce the above copyright 13*00b67f09SDavid van Moolenbroek# notice, this list of conditions and the following disclaimer in the 14*00b67f09SDavid van Moolenbroek# documentation and/or other materials provided with the distribution. 15*00b67f09SDavid van Moolenbroek# 16*00b67f09SDavid van Moolenbroek# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17*00b67f09SDavid van Moolenbroek# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18*00b67f09SDavid van Moolenbroek# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19*00b67f09SDavid van Moolenbroek# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*00b67f09SDavid van Moolenbroek# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21*00b67f09SDavid van Moolenbroek# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*00b67f09SDavid van Moolenbroek# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23*00b67f09SDavid van Moolenbroek# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*00b67f09SDavid van Moolenbroek# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*00b67f09SDavid van Moolenbroek# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*00b67f09SDavid van Moolenbroek# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27*00b67f09SDavid van Moolenbroek# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*00b67f09SDavid van Moolenbroek# 29*00b67f09SDavid van Moolenbroek 30*00b67f09SDavid van Moolenbroekcheck_result() { 31*00b67f09SDavid van Moolenbroek file="${1}"; shift 32*00b67f09SDavid van Moolenbroek 33*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -o match:"${*}" -e empty cat "${file}" 34*00b67f09SDavid van Moolenbroek rm "${file}" 35*00b67f09SDavid van Moolenbroek} 36*00b67f09SDavid van Moolenbroek 37*00b67f09SDavid van Moolenbroekatf_test_case expect_pass 38*00b67f09SDavid van Moolenbroekexpect_pass_body() { 39*00b67f09SDavid van Moolenbroek for h in $(get_helpers); do 40*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -e ignore "${h}" -r result expect_pass_and_pass 41*00b67f09SDavid van Moolenbroek check_result result "passed" 42*00b67f09SDavid van Moolenbroek 43*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e ignore "${h}" -r result \ 44*00b67f09SDavid van Moolenbroek expect_pass_but_fail_requirement 45*00b67f09SDavid van Moolenbroek check_result result "failed: Some reason" 46*00b67f09SDavid van Moolenbroek 47*00b67f09SDavid van Moolenbroek # atf-sh does not support non-fatal failures yet; skip checks for 48*00b67f09SDavid van Moolenbroek # such conditions. 49*00b67f09SDavid van Moolenbroek case "${h}" in *sh_helpers*) continue ;; esac 50*00b67f09SDavid van Moolenbroek 51*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -o empty -e match:"Some reason" \ 52*00b67f09SDavid van Moolenbroek "${h}" -r result expect_pass_but_fail_check 53*00b67f09SDavid van Moolenbroek check_result result "failed: 1 checks failed" 54*00b67f09SDavid van Moolenbroek done 55*00b67f09SDavid van Moolenbroek} 56*00b67f09SDavid van Moolenbroek 57*00b67f09SDavid van Moolenbroekatf_test_case expect_fail 58*00b67f09SDavid van Moolenbroekexpect_fail_body() { 59*00b67f09SDavid van Moolenbroek for h in $(get_helpers c_helpers cpp_helpers); do 60*00b67f09SDavid van Moolenbroek atf_check -s eq:0 "${h}" -r result expect_fail_and_fail_requirement 61*00b67f09SDavid van Moolenbroek check_result result "expected_failure: Fail reason: The failure" 62*00b67f09SDavid van Moolenbroek 63*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e match:"Expected check failure: Fail first: abc" \ 64*00b67f09SDavid van Moolenbroek -e not-match:"And fail again" "${h}" -r result expect_fail_but_pass 65*00b67f09SDavid van Moolenbroek check_result result "failed: .*expecting a failure" 66*00b67f09SDavid van Moolenbroek 67*00b67f09SDavid van Moolenbroek # atf-sh does not support non-fatal failures yet; skip checks for 68*00b67f09SDavid van Moolenbroek # such conditions. 69*00b67f09SDavid van Moolenbroek case "${h}" in *sh_helpers*) continue ;; esac 70*00b67f09SDavid van Moolenbroek 71*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -e match:"Expected check failure: Fail first: abc" \ 72*00b67f09SDavid van Moolenbroek -e match:"Expected check failure: And fail again: def" \ 73*00b67f09SDavid van Moolenbroek "${h}" -r result expect_fail_and_fail_check 74*00b67f09SDavid van Moolenbroek check_result result "expected_failure: And fail again: 2 checks" \ 75*00b67f09SDavid van Moolenbroek "failed as expected" 76*00b67f09SDavid van Moolenbroek done 77*00b67f09SDavid van Moolenbroek 78*00b67f09SDavid van Moolenbroek # atf-sh does not support non-fatal failures yet; skip checks for 79*00b67f09SDavid van Moolenbroek # such conditions. 80*00b67f09SDavid van Moolenbroek for h in $(get_helpers sh_helpers); do 81*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -e ignore "${h}" -r result \ 82*00b67f09SDavid van Moolenbroek expect_fail_and_fail_requirement 83*00b67f09SDavid van Moolenbroek check_result result "expected_failure: Fail reason: The failure" 84*00b67f09SDavid van Moolenbroek 85*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e ignore "${h}" -r result expect_fail_but_pass 86*00b67f09SDavid van Moolenbroek check_result result "failed: .*expecting a failure" 87*00b67f09SDavid van Moolenbroek done 88*00b67f09SDavid van Moolenbroek} 89*00b67f09SDavid van Moolenbroek 90*00b67f09SDavid van Moolenbroekatf_test_case expect_exit 91*00b67f09SDavid van Moolenbroekexpect_exit_body() { 92*00b67f09SDavid van Moolenbroek for h in $(get_helpers); do 93*00b67f09SDavid van Moolenbroek atf_check -s eq:0 -e ignore "${h}" -r result expect_exit_any_and_exit 94*00b67f09SDavid van Moolenbroek check_result result "expected_exit: Call will exit" 95*00b67f09SDavid van Moolenbroek 96*00b67f09SDavid van Moolenbroek atf_check -s eq:123 -e ignore "${h}" -r result expect_exit_code_and_exit 97*00b67f09SDavid van Moolenbroek check_result result "expected_exit\(123\): Call will exit" 98*00b67f09SDavid van Moolenbroek 99*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e ignore "${h}" -r result expect_exit_but_pass 100*00b67f09SDavid van Moolenbroek check_result result "failed: .*expected to exit" 101*00b67f09SDavid van Moolenbroek done 102*00b67f09SDavid van Moolenbroek} 103*00b67f09SDavid van Moolenbroek 104*00b67f09SDavid van Moolenbroekatf_test_case expect_signal 105*00b67f09SDavid van Moolenbroekexpect_signal_body() { 106*00b67f09SDavid van Moolenbroek for h in $(get_helpers); do 107*00b67f09SDavid van Moolenbroek atf_check -s signal:9 -e ignore "${h}" -r result \ 108*00b67f09SDavid van Moolenbroek expect_signal_any_and_signal 109*00b67f09SDavid van Moolenbroek check_result result "expected_signal: Call will signal" 110*00b67f09SDavid van Moolenbroek 111*00b67f09SDavid van Moolenbroek atf_check -s signal:hup -e ignore "${h}" -r result \ 112*00b67f09SDavid van Moolenbroek expect_signal_no_and_signal 113*00b67f09SDavid van Moolenbroek check_result result "expected_signal\(1\): Call will signal" 114*00b67f09SDavid van Moolenbroek 115*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e ignore "${h}" -r result \ 116*00b67f09SDavid van Moolenbroek expect_signal_but_pass 117*00b67f09SDavid van Moolenbroek check_result result "failed: .*termination signal" 118*00b67f09SDavid van Moolenbroek done 119*00b67f09SDavid van Moolenbroek} 120*00b67f09SDavid van Moolenbroek 121*00b67f09SDavid van Moolenbroekatf_test_case expect_death 122*00b67f09SDavid van Moolenbroekexpect_death_body() { 123*00b67f09SDavid van Moolenbroek for h in $(get_helpers); do 124*00b67f09SDavid van Moolenbroek atf_check -s eq:123 -e ignore "${h}" -r result expect_death_and_exit 125*00b67f09SDavid van Moolenbroek check_result result "expected_death: Exit case" 126*00b67f09SDavid van Moolenbroek 127*00b67f09SDavid van Moolenbroek atf_check -s signal:kill -e ignore "${h}" -r result \ 128*00b67f09SDavid van Moolenbroek expect_death_and_signal 129*00b67f09SDavid van Moolenbroek check_result result "expected_death: Signal case" 130*00b67f09SDavid van Moolenbroek 131*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e ignore "${h}" -r result expect_death_but_pass 132*00b67f09SDavid van Moolenbroek check_result result "failed: .*terminate abruptly" 133*00b67f09SDavid van Moolenbroek done 134*00b67f09SDavid van Moolenbroek} 135*00b67f09SDavid van Moolenbroek 136*00b67f09SDavid van Moolenbroekatf_test_case expect_timeout 137*00b67f09SDavid van Moolenbroekexpect_timeout_body() { 138*00b67f09SDavid van Moolenbroek for h in $(get_helpers); do 139*00b67f09SDavid van Moolenbroek atf_check -s eq:1 -e ignore "${h}" -r result expect_timeout_but_pass 140*00b67f09SDavid van Moolenbroek check_result result "failed: Test case was expected to hang but it" \ 141*00b67f09SDavid van Moolenbroek "continued execution" 142*00b67f09SDavid van Moolenbroek done 143*00b67f09SDavid van Moolenbroek} 144*00b67f09SDavid van Moolenbroek 145*00b67f09SDavid van Moolenbroekatf_init_test_cases() 146*00b67f09SDavid van Moolenbroek{ 147*00b67f09SDavid van Moolenbroek atf_add_test_case expect_pass 148*00b67f09SDavid van Moolenbroek atf_add_test_case expect_fail 149*00b67f09SDavid van Moolenbroek atf_add_test_case expect_exit 150*00b67f09SDavid van Moolenbroek atf_add_test_case expect_signal 151*00b67f09SDavid van Moolenbroek atf_add_test_case expect_death 152*00b67f09SDavid van Moolenbroek atf_add_test_case expect_timeout 153*00b67f09SDavid van Moolenbroek} 154*00b67f09SDavid van Moolenbroek 155*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 156