atf_check_test.sh revision ef421f66f47224a42073deaf087378c5d0c9952e
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews#
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# Automated Testing Framework (atf)
62ec9fd1681ffae7d6b0d54618599ecf650e3100Mark Andrews#
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# Copyright (c) 2007, 2008, 2010 The NetBSD Foundation, Inc.
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence# All rights reserved.
7de2c6e6d51f38daeb2d346f3f21dc01ccece6daEvan Hunt#
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# Redistribution and use in source and binary forms, with or without
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# modification, are permitted provided that the following conditions
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence# are met:
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# 1. Redistributions of source code must retain the above copyright
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# notice, this list of conditions and the following disclaimer.
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# 2. Redistributions in binary form must reproduce the above copyright
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# notice, this list of conditions and the following disclaimer in the
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# documentation and/or other materials provided with the distribution.
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews#
281bfa2a98f1d1721538086e1b550185559f1d8bMark Andrews# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
a14613fce99dee3cad5bf842fd6be78f8e463582Brian Wellington# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
279c6ec074be17dce62dd1b2c6ed7c2cc56a7b78David Lawrence# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
a5d43b72413db3edd6b36a58f9bdf2cf6ff692f2Bob Halley# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein#
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff# TODO: Bring in the checks in the bootstrap testsuite for atf_check.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halleyatf_test_case info_ok
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halleyinfo_ok_head()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley atf_set "descr" "Verifies that atf_check prints an informative" \
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley "message even when the command is successful"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
dc97fe4ed08488d314ab5bc8e99ed839542cf411David Lawrenceinfo_ok_body()
dc97fe4ed08488d314ab5bc8e99ed839542cf411David Lawrence{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)"
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley
8d4257cff01b3821abcb9a21f46c6c6a43bb1e72Bob Halley atf_check -s eq:0 -o save:stdout -e save:stderr -x \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "${h} atf_check_info_ok"
50453ad879d0d93854de5a3385776bd799e8f35cBob Halley grep 'Executing command.*true' stdout >/dev/null || \
50453ad879d0d93854de5a3385776bd799e8f35cBob Halley atf_fail "atf_check does not print an informative message"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
7005cfed8cd3296d356883dcb414979f22e06b13Brian Wellington atf_check -s eq:0 -o save:stdout -e save:stderr -x \
7005cfed8cd3296d356883dcb414979f22e06b13Brian Wellington "${h} atf_check_info_fail"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein grep 'Executing command.*false' stdout >/dev/null || \
6f7660093e70d3a7c80738b681ac0f5c1b661c00Mark Andrews atf_fail "atf_check does not print an informative message"
6f7660093e70d3a7c80738b681ac0f5c1b661c00Mark Andrews}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
d8dcd6ad4617cc8d7df979bd62101fa9c4bac1bcBob Halleyatf_test_case expout_mismatch
d8dcd6ad4617cc8d7df979bd62101fa9c4bac1bcBob Halleyexpout_mismatch_head()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
baf7c7e589f313f10b29d9119811fc4d36c2e4bcMark Andrews atf_set "descr" "Verifies that atf_check prints a diff of the" \
baf7c7e589f313f10b29d9119811fc4d36c2e4bcMark Andrews "stdout and the expected stdout if the two do no" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "match"
a30e7fc23415fd238d067a8a871607bca36068baMichael Graff}
a30e7fc23415fd238d067a8a871607bca36068baMichael Graffexpout_mismatch_body()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
6286983c506433d642b23e64845c50be30f2a7f6Mark Andrews h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)"
6286983c506433d642b23e64845c50be30f2a7f6Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein atf_check -s eq:1 -o save:stdout -e save:stderr -x \
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff "${h} atf_check_expout_mismatch"
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff grep 'Executing command.*echo bar' stdout >/dev/null || \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein atf_fail "atf_check does not print an informative message"
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff grep 'stdout does not match golden output' stderr >/dev/null || \
8313838954d67250d0ed7edf67fba5da0790d1a7Michael Graff atf_fail "atf_check does not print the stdout header"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein grep 'stderr' stderr >/dev/null && \
703e1c0bb66f3cd3d300358ca0c1fdf3cb5fb1c5Brian Wellington atf_fail "atf_check prints the stderr header"
703e1c0bb66f3cd3d300358ca0c1fdf3cb5fb1c5Brian Wellington grep '^-foo' stderr >/dev/null || \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein atf_fail "atf_check does not print the stdout's diff"
b15c543f7957fbb4284f0fc20b3278f2a411d272Mark Andrews grep '^+bar' stderr >/dev/null || \
b15c543f7957fbb4284f0fc20b3278f2a411d272Mark Andrews atf_fail "atf_check does not print the stdout's diff"
1ea6e09c376b1351c614474a88675b1a9bda6571Evan Hunt}
1ea6e09c376b1351c614474a88675b1a9bda6571Evan Hunt
1ea6e09c376b1351c614474a88675b1a9bda6571Evan Huntatf_test_case experr_mismatch
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinexperr_mismatch_head()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff atf_set "descr" "Verifies that atf_check prints a diff of the" \
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff "stderr and the expected stderr if the two do no" \
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff "match"
0eb2572d79822d02ea05448ce4e5f1759c73d171Michael Graff}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinexperr_mismatch_body()
4108eed5092156cf0407a97a9bd8ab7775164694Brian Wellington{
4108eed5092156cf0407a97a9bd8ab7775164694Brian Wellington h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
3f123dcc2fe5d2cd08ca91b732741d86a4036906Brian Wellington atf_check -s eq:1 -o save:stdout -e save:stderr -x \
3f123dcc2fe5d2cd08ca91b732741d86a4036906Brian Wellington "${h} atf_check_experr_mismatch"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein grep 'Executing command.*echo bar' stdout >/dev/null || \
64b92523f9333ba053f4b2860335583be455b0b3Brian Wellington atf_fail "atf_check does not print an informative message"
64b92523f9333ba053f4b2860335583be455b0b3Brian Wellington grep 'stdout' stderr >/dev/null && \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein atf_fail "atf_check prints the stdout header"
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence grep 'stderr does not match golden output' stderr >/dev/null || \
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence atf_fail "atf_check does not print the stderr header"
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence grep '^-foo' stderr >/dev/null || \
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence atf_fail "atf_check does not print the stderr's diff"
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence grep '^+bar' stderr >/dev/null || \
876753d5ce1be48f3218fb4875fac501f8adfd6cDavid Lawrence atf_fail "atf_check does not print the stderr's diff"
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein}
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrenceatf_test_case null_stdout
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrencenull_stdout_head()
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence{
ed71ea51c6ecb5d7d659b6e6a20f6b3f5c2678c6David Lawrence atf_set "descr" "Verifies that atf_check prints a the stdout it got" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "when it was supposed to be null"
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence}
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrencenull_stdout_body()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)"
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence atf_check -s eq:1 -o save:stdout -e save:stderr -x \
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence "${h} atf_check_null_stdout"
2e61d171bc1fa47ea4d551b87546ebcf78f61e4aMark Andrews grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrence atf_fail "atf_check does not print an informative message"
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews grep 'stdout not empty' stderr >/dev/null || \
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews atf_fail "atf_check does not print the stdout header"
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews grep 'stderr' stderr >/dev/null && \
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews atf_fail "atf_check prints the stderr header"
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews grep 'These are the contents' stderr >/dev/null || \
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews atf_fail "atf_check does not print stdout's contents"
f54d0c9c6e65de367d4ef08f51d22a2fb4c56208Mark Andrews}
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
49a2cf8f211213712d452287ae8e121cf59e3178David Lawrenceatf_test_case null_stderr
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinnull_stderr_head()
529ff4b4959fb157194f985394951108ff5286e4Brian Wellington{
a14613fce99dee3cad5bf842fd6be78f8e463582Brian Wellington atf_set "descr" "Verifies that atf_check prints a the stderr it got" \
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein "when it was supposed to be null"
489b76292622f5bc18bf1a18845f8166a73bd797Brian Wellington}
489b76292622f5bc18bf1a18845f8166a73bd797Brian Wellingtonnull_stderr_body()
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein{
bff8ac12a8c099257bdbf7d0c55d2d5b77591926Mark Andrews h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)"
bff8ac12a8c099257bdbf7d0c55d2d5b77591926Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein atf_check -s eq:1 -o save:stdout -e save:stderr -x \
fd837244be31850a764863688bce11df9ce972f4Andreas Gustafsson "${h} atf_check_null_stderr"
fd837244be31850a764863688bce11df9ce972f4Andreas Gustafsson grep 'Executing command.*echo.*These.*contents' stdout >/dev/null || \
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews atf_fail "atf_check does not print an informative message"
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews grep 'stdout' stderr >/dev/null && \
cffc2e06f906dd048af4cc27d487deb157f5a082Mark Andrews atf_fail "atf_check prints the stdout header"
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt grep 'stderr not empty' stderr >/dev/null || \
ba751492fcc4f161a18b983d4f018a1a52938cb9Evan Hunt atf_fail "atf_check does not print the stderr header"
aaaf8d4f4873d21e55c3ffb4f656203d08339865Mark Andrews grep 'These are the contents' stderr >/dev/null || \
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews atf_fail "atf_check does not print stderr's contents"
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews}
43fe2897fc80bbec2115310ca79d432a252f3ea4Mark Andrews
70e854766f5304f43e94212dc38ebaefe214148cMark Andrewsatf_test_case equal
70e854766f5304f43e94212dc38ebaefe214148cMark Andrewsequal_head()
70e854766f5304f43e94212dc38ebaefe214148cMark Andrews{
a44bf3209afdb58360a82cf42e653dee5e0d4f26Automatic Updater atf_set "descr" "Verifies that atf_check_equal works"
a44bf3209afdb58360a82cf42e653dee5e0d4f26Automatic Updater}
a44bf3209afdb58360a82cf42e653dee5e0d4f26Automatic Updaterequal_body()
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews{
ce67023ae3ad39a77da5361d0187ab6f3f0219cbMark Andrews h="$(atf_get_srcdir)/misc_helpers -s $(atf_get_srcdir)"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
d878b8d87c3f46a25ccae9f5cfe6e39af67562e0Evan Hunt atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_ok"
d878b8d87c3f46a25ccae9f5cfe6e39af67562e0Evan Hunt
d878b8d87c3f46a25ccae9f5cfe6e39af67562e0Evan Hunt atf_check -s eq:1 -o ignore -e ignore -x \
9a97696b543b9957049a663b4f73245589c47921Mark Andrews "${h} -r resfile atf_check_equal_fail"
4417904b159f826f2009fd3453744057c0d9c82eMark Andrews atf_check -s eq:0 -o ignore -e empty grep '^failed: a != b (a != b)$' \
4417904b159f826f2009fd3453744057c0d9c82eMark Andrews resfile
4417904b159f826f2009fd3453744057c0d9c82eMark Andrews
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrews atf_check -s eq:0 -o ignore -e ignore -x "${h} atf_check_equal_eval_ok"
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrews
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrews atf_check -s eq:1 -o ignore -e ignore -x \
43501e6570e9081d459fb5c1a81b73c2c53c5df0Mark Andrews "${h} -r resfile atf_check_equal_eval_fail"
2b66a51a7d72e9cc07917fb583ad528b0539d2a3Mark Andrews atf_check -s eq:0 -o ignore -e empty \
2b66a51a7d72e9cc07917fb583ad528b0539d2a3Mark Andrews grep '^failed: \${x} != \${y} (a != b)$' resfile
2b66a51a7d72e9cc07917fb583ad528b0539d2a3Mark Andrews}
8b56b8956fc1e6c70efacb4f71db28d0d1f0c577Mark Andrews
8b56b8956fc1e6c70efacb4f71db28d0d1f0c577Mark Andrewsatf_init_test_cases()
8b56b8956fc1e6c70efacb4f71db28d0d1f0c577Mark Andrews{
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews atf_add_test_case info_ok
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews atf_add_test_case expout_mismatch
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews atf_add_test_case experr_mismatch
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews atf_add_test_case null_stdout
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews atf_add_test_case null_stderr
87708bde16713bc02ff2598f4a82f98c699a2f2dMark Andrews atf_add_test_case equal
4e9775118dbf128dd296f01638733ba221f76c34Mark Andrews}
4e9775118dbf128dd296f01638733ba221f76c34Mark Andrews
4e9775118dbf128dd296f01638733ba221f76c34Mark Andrews# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
5b02fc32d693bb811199308a40143df0adf818c1Mark Andrews