1edebbb8eSjmmv# 2edebbb8eSjmmv# Automated Testing Framework (atf) 3edebbb8eSjmmv# 4a551a20fSjmmv# Copyright (c) 2007 The NetBSD Foundation, Inc. 5edebbb8eSjmmv# All rights reserved. 6edebbb8eSjmmv# 7edebbb8eSjmmv# Redistribution and use in source and binary forms, with or without 8edebbb8eSjmmv# modification, are permitted provided that the following conditions 9edebbb8eSjmmv# are met: 10edebbb8eSjmmv# 1. Redistributions of source code must retain the above copyright 11edebbb8eSjmmv# notice, this list of conditions and the following disclaimer. 12edebbb8eSjmmv# 2. Redistributions in binary form must reproduce the above copyright 13edebbb8eSjmmv# notice, this list of conditions and the following disclaimer in the 14edebbb8eSjmmv# documentation and/or other materials provided with the distribution. 15edebbb8eSjmmv# 16edebbb8eSjmmv# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17edebbb8eSjmmv# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18edebbb8eSjmmv# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19edebbb8eSjmmv# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20edebbb8eSjmmv# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21edebbb8eSjmmv# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22edebbb8eSjmmv# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23edebbb8eSjmmv# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24edebbb8eSjmmv# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25edebbb8eSjmmv# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26edebbb8eSjmmv# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27edebbb8eSjmmv# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28edebbb8eSjmmv# 29edebbb8eSjmmv 30edebbb8eSjmmv# TODO: Bring in the checks in the bootstrap testsuite for atf_check. 31edebbb8eSjmmv 32edebbb8eSjmmvatf_test_case info_ok 33edebbb8eSjmmvinfo_ok_head() 34edebbb8eSjmmv{ 35edebbb8eSjmmv atf_set "descr" "Verifies that atf_check prints an informative" \ 36edebbb8eSjmmv "message even when the command is successful" 37edebbb8eSjmmv} 38edebbb8eSjmmvinfo_ok_body() 39edebbb8eSjmmv{ 40edebbb8eSjmmv h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 41edebbb8eSjmmv 42edebbb8eSjmmv atf_check -s eq:0 -o save:stdout -e save:stderr -x \ 43edebbb8eSjmmv "${h} atf_check_info_ok" 44edebbb8eSjmmv grep 'Executing command.*true' stdout >/dev/null || \ 45edebbb8eSjmmv atf_fail "atf_check does not print an informative message" 46edebbb8eSjmmv 47edebbb8eSjmmv atf_check -s eq:0 -o save:stdout -e save:stderr -x \ 48edebbb8eSjmmv "${h} atf_check_info_fail" 49edebbb8eSjmmv grep 'Executing command.*false' stdout >/dev/null || \ 50edebbb8eSjmmv atf_fail "atf_check does not print an informative message" 51edebbb8eSjmmv} 52edebbb8eSjmmv 53edebbb8eSjmmvatf_test_case expout_mismatch 54edebbb8eSjmmvexpout_mismatch_head() 55edebbb8eSjmmv{ 56edebbb8eSjmmv atf_set "descr" "Verifies that atf_check prints a diff of the" \ 570659fc67Sjmmv "stdout and the expected stdout if the two do not" \ 58edebbb8eSjmmv "match" 59edebbb8eSjmmv} 60edebbb8eSjmmvexpout_mismatch_body() 61edebbb8eSjmmv{ 62edebbb8eSjmmv h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 63edebbb8eSjmmv 64edebbb8eSjmmv atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 65edebbb8eSjmmv "${h} atf_check_expout_mismatch" 66edebbb8eSjmmv grep 'Executing command.*echo bar' stdout >/dev/null || \ 67edebbb8eSjmmv atf_fail "atf_check does not print an informative message" 68edebbb8eSjmmv grep 'stdout does not match golden output' stderr >/dev/null || \ 69edebbb8eSjmmv atf_fail "atf_check does not print the stdout header" 70edebbb8eSjmmv grep 'stderr' stderr >/dev/null && \ 71edebbb8eSjmmv atf_fail "atf_check prints the stderr header" 72edebbb8eSjmmv grep '^-foo' stderr >/dev/null || \ 73edebbb8eSjmmv atf_fail "atf_check does not print the stdout's diff" 74edebbb8eSjmmv grep '^+bar' stderr >/dev/null || \ 75edebbb8eSjmmv atf_fail "atf_check does not print the stdout's diff" 76edebbb8eSjmmv} 77edebbb8eSjmmv 78edebbb8eSjmmvatf_test_case experr_mismatch 79edebbb8eSjmmvexperr_mismatch_head() 80edebbb8eSjmmv{ 81edebbb8eSjmmv atf_set "descr" "Verifies that atf_check prints a diff of the" \ 820659fc67Sjmmv "stderr and the expected stderr if the two do not" \ 83edebbb8eSjmmv "match" 84edebbb8eSjmmv} 85edebbb8eSjmmvexperr_mismatch_body() 86edebbb8eSjmmv{ 87edebbb8eSjmmv h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 88edebbb8eSjmmv 89edebbb8eSjmmv atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 90edebbb8eSjmmv "${h} atf_check_experr_mismatch" 91edebbb8eSjmmv grep 'Executing command.*echo bar' stdout >/dev/null || \ 92edebbb8eSjmmv atf_fail "atf_check does not print an informative message" 93edebbb8eSjmmv grep 'stdout' stderr >/dev/null && \ 94edebbb8eSjmmv atf_fail "atf_check prints the stdout header" 95edebbb8eSjmmv grep 'stderr does not match golden output' stderr >/dev/null || \ 96edebbb8eSjmmv atf_fail "atf_check does not print the stderr header" 97edebbb8eSjmmv grep '^-foo' stderr >/dev/null || \ 98edebbb8eSjmmv atf_fail "atf_check does not print the stderr's diff" 99edebbb8eSjmmv grep '^+bar' stderr >/dev/null || \ 100edebbb8eSjmmv atf_fail "atf_check does not print the stderr's diff" 101edebbb8eSjmmv} 102edebbb8eSjmmv 103edebbb8eSjmmvatf_test_case null_stdout 104edebbb8eSjmmvnull_stdout_head() 105edebbb8eSjmmv{ 106edebbb8eSjmmv atf_set "descr" "Verifies that atf_check prints a the stdout it got" \ 107edebbb8eSjmmv "when it was supposed to be null" 108edebbb8eSjmmv} 109edebbb8eSjmmvnull_stdout_body() 110edebbb8eSjmmv{ 111edebbb8eSjmmv h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 112edebbb8eSjmmv 113edebbb8eSjmmv atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 114edebbb8eSjmmv "${h} atf_check_null_stdout" 115edebbb8eSjmmv grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \ 116edebbb8eSjmmv atf_fail "atf_check does not print an informative message" 117edebbb8eSjmmv grep 'stdout not empty' stderr >/dev/null || \ 118edebbb8eSjmmv atf_fail "atf_check does not print the stdout header" 119edebbb8eSjmmv grep 'stderr' stderr >/dev/null && \ 120edebbb8eSjmmv atf_fail "atf_check prints the stderr header" 121edebbb8eSjmmv grep 'These are the contents' stderr >/dev/null || \ 122edebbb8eSjmmv atf_fail "atf_check does not print stdout's contents" 123edebbb8eSjmmv} 124edebbb8eSjmmv 125edebbb8eSjmmvatf_test_case null_stderr 126edebbb8eSjmmvnull_stderr_head() 127edebbb8eSjmmv{ 128edebbb8eSjmmv atf_set "descr" "Verifies that atf_check prints a the stderr it got" \ 129edebbb8eSjmmv "when it was supposed to be null" 130edebbb8eSjmmv} 131edebbb8eSjmmvnull_stderr_body() 132edebbb8eSjmmv{ 133edebbb8eSjmmv h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 134edebbb8eSjmmv 135edebbb8eSjmmv atf_check -s eq:1 -o save:stdout -e save:stderr -x \ 136edebbb8eSjmmv "${h} atf_check_null_stderr" 137edebbb8eSjmmv grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \ 138edebbb8eSjmmv atf_fail "atf_check does not print an informative message" 139edebbb8eSjmmv grep 'stdout' stderr >/dev/null && \ 140edebbb8eSjmmv atf_fail "atf_check prints the stdout header" 141edebbb8eSjmmv grep 'stderr not empty' stderr >/dev/null || \ 142edebbb8eSjmmv atf_fail "atf_check does not print the stderr header" 143edebbb8eSjmmv grep 'These are the contents' stderr >/dev/null || \ 144edebbb8eSjmmv atf_fail "atf_check does not print stderr's contents" 145edebbb8eSjmmv} 146edebbb8eSjmmv 147edebbb8eSjmmvatf_test_case equal 148edebbb8eSjmmvequal_head() 149edebbb8eSjmmv{ 150edebbb8eSjmmv atf_set "descr" "Verifies that atf_check_equal works" 151edebbb8eSjmmv} 152edebbb8eSjmmvequal_body() 153edebbb8eSjmmv{ 154edebbb8eSjmmv h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)" 155edebbb8eSjmmv 156edebbb8eSjmmv atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_ok" 157edebbb8eSjmmv 158edebbb8eSjmmv atf_check -s eq:1 -o ignore -e ignore -x \ 159edebbb8eSjmmv "${h} -r resfile atf_check_equal_fail" 160edebbb8eSjmmv atf_check -s eq:0 -o ignore -e empty grep '^failed: a != b (a != b)$' \ 161edebbb8eSjmmv resfile 162edebbb8eSjmmv 163edebbb8eSjmmv atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_eval_ok" 164edebbb8eSjmmv 165edebbb8eSjmmv atf_check -s eq:1 -o ignore -e ignore -x \ 166edebbb8eSjmmv "${h} -r resfile atf_check_equal_eval_fail" 167edebbb8eSjmmv atf_check -s eq:0 -o ignore -e empty \ 168edebbb8eSjmmv grep '^failed: \${x} != \${y} (a != b)$' resfile 169edebbb8eSjmmv} 170edebbb8eSjmmv 171d780102eSjmmvatf_test_case flush_stdout_on_timeout 172d780102eSjmmvflush_stdout_on_timeout_body() 173d780102eSjmmv{ 174d780102eSjmmv "$(atf_get_srcdir)/misc_helpers" -s "$(atf_get_srcdir)" atf_check_timeout \ 175d780102eSjmmv >out 2>err & 176d780102eSjmmv pid="${!}" 177*fd70cdddSmartin sleep 10 178d780102eSjmmv kill "${pid}" 179d780102eSjmmv 180d780102eSjmmv grep 'Executing command.*true' out \ 181d780102eSjmmv || atf_fail 'First command not in output' 182d780102eSjmmv grep 'Executing command.*sleep 42' out \ 183d780102eSjmmv || atf_fail 'Second command not in output' 184d780102eSjmmv} 185d780102eSjmmv 186edebbb8eSjmmvatf_init_test_cases() 187edebbb8eSjmmv{ 188edebbb8eSjmmv atf_add_test_case info_ok 189edebbb8eSjmmv atf_add_test_case expout_mismatch 190edebbb8eSjmmv atf_add_test_case experr_mismatch 191edebbb8eSjmmv atf_add_test_case null_stdout 192edebbb8eSjmmv atf_add_test_case null_stderr 193edebbb8eSjmmv atf_add_test_case equal 194d780102eSjmmv atf_add_test_case flush_stdout_on_timeout 195edebbb8eSjmmv} 196edebbb8eSjmmv 197edebbb8eSjmmv# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 198