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