xref: /minix3/external/bsd/bind/dist/unit/atf-src/atf-run/integration_test.sh (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
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 Moolenbroekcreate_atffile()
31*00b67f09SDavid van Moolenbroek{
32*00b67f09SDavid van Moolenbroek    ATF_CONFDIR="$(pwd)"; export ATF_CONFDIR
33*00b67f09SDavid van Moolenbroek
34*00b67f09SDavid van Moolenbroek    cat >Atffile <<EOF
35*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-atffile; version="1"
36*00b67f09SDavid van Moolenbroek
37*00b67f09SDavid van Moolenbroekprop: test-suite = atf
38*00b67f09SDavid van Moolenbroek
39*00b67f09SDavid van MoolenbroekEOF
40*00b67f09SDavid van Moolenbroek    for f in "${@}"; do
41*00b67f09SDavid van Moolenbroek        echo "tp: ${f}" >>Atffile
42*00b67f09SDavid van Moolenbroek    done
43*00b67f09SDavid van Moolenbroek}
44*00b67f09SDavid van Moolenbroek
45*00b67f09SDavid van Moolenbroekcreate_helper()
46*00b67f09SDavid van Moolenbroek{
47*00b67f09SDavid van Moolenbroek    cp $(atf_get_srcdir)/misc_helpers helper
48*00b67f09SDavid van Moolenbroek    create_atffile helper
49*00b67f09SDavid van Moolenbroek    TESTCASE=${1}; export TESTCASE
50*00b67f09SDavid van Moolenbroek}
51*00b67f09SDavid van Moolenbroek
52*00b67f09SDavid van Moolenbroekcreate_helper_stdin()
53*00b67f09SDavid van Moolenbroek{
54*00b67f09SDavid van Moolenbroek    # TODO: This really, really, really must use real test programs.
55*00b67f09SDavid van Moolenbroek    cat >${1} <<EOF
56*00b67f09SDavid van Moolenbroek#! $(atf-config -t atf_shell)
57*00b67f09SDavid van Moolenbroekwhile [ \${#} -gt 0 ]; do
58*00b67f09SDavid van Moolenbroek    case \${1} in
59*00b67f09SDavid van Moolenbroek        -l)
60*00b67f09SDavid van Moolenbroek            echo 'Content-Type: application/X-atf-tp; version="1"'
61*00b67f09SDavid van Moolenbroek            echo
62*00b67f09SDavid van MoolenbroekEOF
63*00b67f09SDavid van Moolenbroek    cnt=1
64*00b67f09SDavid van Moolenbroek    while [ ${cnt} -le ${2} ]; do
65*00b67f09SDavid van Moolenbroek        echo "echo 'ident: tc${cnt}'" >>${1}
66*00b67f09SDavid van Moolenbroek        [ ${cnt} -lt ${2} ] && echo "echo" >>${1}
67*00b67f09SDavid van Moolenbroek        cnt=$((${cnt} + 1))
68*00b67f09SDavid van Moolenbroek    done
69*00b67f09SDavid van Moolenbroekcat >>${1} <<EOF
70*00b67f09SDavid van Moolenbroek            exit 0
71*00b67f09SDavid van Moolenbroek            ;;
72*00b67f09SDavid van Moolenbroek        -r*)
73*00b67f09SDavid van Moolenbroek            resfile=\$(echo \${1} | cut -d r -f 2-)
74*00b67f09SDavid van Moolenbroek            ;;
75*00b67f09SDavid van Moolenbroek    esac
76*00b67f09SDavid van Moolenbroek    testcase=\$(echo \${1} | cut -d : -f 1)
77*00b67f09SDavid van Moolenbroek    shift
78*00b67f09SDavid van Moolenbroekdone
79*00b67f09SDavid van MoolenbroekEOF
80*00b67f09SDavid van Moolenbroek    cat >>${1}
81*00b67f09SDavid van Moolenbroek}
82*00b67f09SDavid van Moolenbroek
83*00b67f09SDavid van Moolenbroekcreate_mount_helper()
84*00b67f09SDavid van Moolenbroek{
85*00b67f09SDavid van Moolenbroek    cat >${1} <<EOF
86*00b67f09SDavid van Moolenbroek#! /usr/bin/env atf-sh
87*00b67f09SDavid van Moolenbroek
88*00b67f09SDavid van Moolenbroekdo_mount() {
89*00b67f09SDavid van Moolenbroek    platform=\$(uname)
90*00b67f09SDavid van Moolenbroek    case \${platform} in
91*00b67f09SDavid van Moolenbroek    Linux|NetBSD)
92*00b67f09SDavid van Moolenbroek        mount -t tmpfs tmpfs \${1} || atf_fail "Mount failed"
93*00b67f09SDavid van Moolenbroek        ;;
94*00b67f09SDavid van Moolenbroek    FreeBSD)
95*00b67f09SDavid van Moolenbroek        mdmfs -s 16m md \${1} || atf_fail "Mount failed"
96*00b67f09SDavid van Moolenbroek        ;;
97*00b67f09SDavid van Moolenbroek    SunOS)
98*00b67f09SDavid van Moolenbroek        mount -F tmpfs tmpfs \$(pwd)/\${1} || atf_fail "Mount failed"
99*00b67f09SDavid van Moolenbroek        ;;
100*00b67f09SDavid van Moolenbroek    *)
101*00b67f09SDavid van Moolenbroek        atf_fail "create_mount_helper called for an unsupported platform."
102*00b67f09SDavid van Moolenbroek        ;;
103*00b67f09SDavid van Moolenbroek    esac
104*00b67f09SDavid van Moolenbroek}
105*00b67f09SDavid van Moolenbroek
106*00b67f09SDavid van Moolenbroekatf_test_case main
107*00b67f09SDavid van Moolenbroekmain_head() {
108*00b67f09SDavid van Moolenbroek    atf_set "require.user" "root"
109*00b67f09SDavid van Moolenbroek}
110*00b67f09SDavid van Moolenbroekmain_body() {
111*00b67f09SDavid van MoolenbroekEOF
112*00b67f09SDavid van Moolenbroek    cat >>${1}
113*00b67f09SDavid van Moolenbroek    cat >>${1} <<EOF
114*00b67f09SDavid van Moolenbroek}
115*00b67f09SDavid van Moolenbroek
116*00b67f09SDavid van Moolenbroekatf_init_test_cases()
117*00b67f09SDavid van Moolenbroek{
118*00b67f09SDavid van Moolenbroek    atf_add_test_case main
119*00b67f09SDavid van Moolenbroek}
120*00b67f09SDavid van MoolenbroekEOF
121*00b67f09SDavid van Moolenbroek}
122*00b67f09SDavid van Moolenbroek
123*00b67f09SDavid van Moolenbroekatf_test_case no_warnings
124*00b67f09SDavid van Moolenbroekno_warnings_head()
125*00b67f09SDavid van Moolenbroek{
126*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run suppresses warnings about not running" \
127*00b67f09SDavid van Moolenbroek                    "within atf-run"
128*00b67f09SDavid van Moolenbroek}
129*00b67f09SDavid van Moolenbroekno_warnings_body()
130*00b67f09SDavid van Moolenbroek{
131*00b67f09SDavid van Moolenbroek    create_helper pass
132*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o ignore -e not-match:'WARNING.*atf-run' atf-run helper
133*00b67f09SDavid van Moolenbroek}
134*00b67f09SDavid van Moolenbroek
135*00b67f09SDavid van Moolenbroekatf_test_case config
136*00b67f09SDavid van Moolenbroekconfig_head()
137*00b67f09SDavid van Moolenbroek{
138*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that the config files are read in the correct" \
139*00b67f09SDavid van Moolenbroek                    "order"
140*00b67f09SDavid van Moolenbroek}
141*00b67f09SDavid van Moolenbroekconfig_body()
142*00b67f09SDavid van Moolenbroek{
143*00b67f09SDavid van Moolenbroek    create_helper config
144*00b67f09SDavid van Moolenbroek
145*00b67f09SDavid van Moolenbroek    mkdir etc
146*00b67f09SDavid van Moolenbroek    mkdir .atf
147*00b67f09SDavid van Moolenbroek
148*00b67f09SDavid van Moolenbroek    echo "First: read system-wide common.conf."
149*00b67f09SDavid van Moolenbroek    cat >etc/common.conf <<EOF
150*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-config; version="1"
151*00b67f09SDavid van Moolenbroek
152*00b67f09SDavid van Moolenbroek1st = "sw common"
153*00b67f09SDavid van Moolenbroek2nd = "sw common"
154*00b67f09SDavid van Moolenbroek3rd = "sw common"
155*00b67f09SDavid van Moolenbroek4th = "sw common"
156*00b67f09SDavid van MoolenbroekEOF
157*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
158*00b67f09SDavid van Moolenbroek        -o match:'1st: sw common' \
159*00b67f09SDavid van Moolenbroek        -o match:'2nd: sw common' \
160*00b67f09SDavid van Moolenbroek        -o match:'3rd: sw common' \
161*00b67f09SDavid van Moolenbroek        -o match:'4th: sw common' \
162*00b67f09SDavid van Moolenbroek        -e ignore -x \
163*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper"
164*00b67f09SDavid van Moolenbroek
165*00b67f09SDavid van Moolenbroek    echo "Second: read system-wide <test-suite>.conf."
166*00b67f09SDavid van Moolenbroek    cat >etc/atf.conf <<EOF
167*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-config; version="1"
168*00b67f09SDavid van Moolenbroek
169*00b67f09SDavid van Moolenbroek1st = "sw atf"
170*00b67f09SDavid van MoolenbroekEOF
171*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
172*00b67f09SDavid van Moolenbroek        -o match:'1st: sw atf' \
173*00b67f09SDavid van Moolenbroek        -o match:'2nd: sw common' \
174*00b67f09SDavid van Moolenbroek        -o match:'3rd: sw common' \
175*00b67f09SDavid van Moolenbroek        -o match:'4th: sw common' \
176*00b67f09SDavid van Moolenbroek        -e ignore -x \
177*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper"
178*00b67f09SDavid van Moolenbroek
179*00b67f09SDavid van Moolenbroek    echo "Third: read user-specific common.conf."
180*00b67f09SDavid van Moolenbroek    cat >.atf/common.conf <<EOF
181*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-config; version="1"
182*00b67f09SDavid van Moolenbroek
183*00b67f09SDavid van Moolenbroek2nd = "us common"
184*00b67f09SDavid van MoolenbroekEOF
185*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
186*00b67f09SDavid van Moolenbroek        -o match:'1st: sw atf' \
187*00b67f09SDavid van Moolenbroek        -o match:'2nd: us common' \
188*00b67f09SDavid van Moolenbroek        -o match:'3rd: sw common' \
189*00b67f09SDavid van Moolenbroek        -o match:'4th: sw common' \
190*00b67f09SDavid van Moolenbroek        -e ignore -x \
191*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper"
192*00b67f09SDavid van Moolenbroek
193*00b67f09SDavid van Moolenbroek    echo "Fourth: read user-specific <test-suite>.conf."
194*00b67f09SDavid van Moolenbroek    cat >.atf/atf.conf <<EOF
195*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-config; version="1"
196*00b67f09SDavid van Moolenbroek
197*00b67f09SDavid van Moolenbroek3rd = "us atf"
198*00b67f09SDavid van MoolenbroekEOF
199*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
200*00b67f09SDavid van Moolenbroek        -o match:'1st: sw atf' \
201*00b67f09SDavid van Moolenbroek        -o match:'2nd: us common' \
202*00b67f09SDavid van Moolenbroek        -o match:'3rd: us atf' \
203*00b67f09SDavid van Moolenbroek        -o match:'4th: sw common' \
204*00b67f09SDavid van Moolenbroek        -e ignore -x \
205*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc HOME=$(pwd) atf-run helper"
206*00b67f09SDavid van Moolenbroek}
207*00b67f09SDavid van Moolenbroek
208*00b67f09SDavid van Moolenbroekatf_test_case vflag
209*00b67f09SDavid van Moolenbroekvflag_head()
210*00b67f09SDavid van Moolenbroek{
211*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that the -v flag works and that it properly" \
212*00b67f09SDavid van Moolenbroek                    "overrides the values in configuration files"
213*00b67f09SDavid van Moolenbroek}
214*00b67f09SDavid van Moolenbroekvflag_body()
215*00b67f09SDavid van Moolenbroek{
216*00b67f09SDavid van Moolenbroek    create_helper testvar
217*00b67f09SDavid van Moolenbroek
218*00b67f09SDavid van Moolenbroek    echo "Checking that 'testvar' is not defined."
219*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o ignore -e ignore -x \
220*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc atf-run helper"
221*00b67f09SDavid van Moolenbroek
222*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' trough '-v' works."
223*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \
224*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc atf-run -v testvar='a value' helper"
225*00b67f09SDavid van Moolenbroek
226*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' trough the configuration" \
227*00b67f09SDavid van Moolenbroek         "file works."
228*00b67f09SDavid van Moolenbroek    mkdir etc
229*00b67f09SDavid van Moolenbroek    cat >etc/common.conf <<EOF
230*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-config; version="1"
231*00b67f09SDavid van Moolenbroek
232*00b67f09SDavid van Moolenbroektestvar = "value in conf file"
233*00b67f09SDavid van MoolenbroekEOF
234*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: value in conf file' -e ignore -x \
235*00b67f09SDavid van Moolenbroek              "ATF_CONFDIR=$(pwd)/etc atf-run helper"
236*00b67f09SDavid van Moolenbroek
237*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' trough -v overrides the" \
238*00b67f09SDavid van Moolenbroek         "configuration file."
239*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \
240*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc atf-run -v testvar='a value' helper"
241*00b67f09SDavid van Moolenbroek}
242*00b67f09SDavid van Moolenbroek
243*00b67f09SDavid van Moolenbroekatf_test_case atffile
244*00b67f09SDavid van Moolenbroekatffile_head()
245*00b67f09SDavid van Moolenbroek{
246*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that the variables defined by the Atffile" \
247*00b67f09SDavid van Moolenbroek                    "are recognized and that they take the lowest priority"
248*00b67f09SDavid van Moolenbroek}
249*00b67f09SDavid van Moolenbroekatffile_body()
250*00b67f09SDavid van Moolenbroek{
251*00b67f09SDavid van Moolenbroek    create_helper testvar
252*00b67f09SDavid van Moolenbroek
253*00b67f09SDavid van Moolenbroek    echo "Checking that 'testvar' is not defined."
254*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o ignore -e ignore -x \
255*00b67f09SDavid van Moolenbroek              "ATF_CONFDIR=$(pwd)/etc atf-run helper"
256*00b67f09SDavid van Moolenbroek
257*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' trough the Atffile works."
258*00b67f09SDavid van Moolenbroek    echo 'conf: testvar = "a value"' >>Atffile
259*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \
260*00b67f09SDavid van Moolenbroek              "ATF_CONFDIR=$(pwd)/etc atf-run helper"
261*00b67f09SDavid van Moolenbroek
262*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' trough the configuration" \
263*00b67f09SDavid van Moolenbroek         "file overrides the one in the Atffile."
264*00b67f09SDavid van Moolenbroek    mkdir etc
265*00b67f09SDavid van Moolenbroek    cat >etc/common.conf <<EOF
266*00b67f09SDavid van MoolenbroekContent-Type: application/X-atf-config; version="1"
267*00b67f09SDavid van Moolenbroek
268*00b67f09SDavid van Moolenbroektestvar = "value in conf file"
269*00b67f09SDavid van MoolenbroekEOF
270*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: value in conf file' -e ignore -x \
271*00b67f09SDavid van Moolenbroek              "ATF_CONFDIR=$(pwd)/etc atf-run helper"
272*00b67f09SDavid van Moolenbroek    rm -rf etc
273*00b67f09SDavid van Moolenbroek
274*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' trough -v overrides the" \
275*00b67f09SDavid van Moolenbroek         "one in the Atffile."
276*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: new value' -e ignore -x \
277*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/etc atf-run -v testvar='new value' helper"
278*00b67f09SDavid van Moolenbroek}
279*00b67f09SDavid van Moolenbroek
280*00b67f09SDavid van Moolenbroekatf_test_case atffile_recursive
281*00b67f09SDavid van Moolenbroekatffile_recursive_head()
282*00b67f09SDavid van Moolenbroek{
283*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that variables defined by an Atffile are not" \
284*00b67f09SDavid van Moolenbroek                    "inherited by other Atffiles."
285*00b67f09SDavid van Moolenbroek}
286*00b67f09SDavid van Moolenbroekatffile_recursive_body()
287*00b67f09SDavid van Moolenbroek{
288*00b67f09SDavid van Moolenbroek    create_helper testvar
289*00b67f09SDavid van Moolenbroek
290*00b67f09SDavid van Moolenbroek    mkdir dir
291*00b67f09SDavid van Moolenbroek    mv Atffile helper dir
292*00b67f09SDavid van Moolenbroek
293*00b67f09SDavid van Moolenbroek    echo "Checking that 'testvar' is not inherited."
294*00b67f09SDavid van Moolenbroek    create_atffile dir
295*00b67f09SDavid van Moolenbroek    echo 'conf: testvar = "a value"' >> Atffile
296*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o ignore -e ignore -x "ATF_CONFDIR=$(pwd)/etc atf-run"
297*00b67f09SDavid van Moolenbroek
298*00b67f09SDavid van Moolenbroek    echo "Checking that defining 'testvar' in the correct Atffile works."
299*00b67f09SDavid van Moolenbroek    echo 'conf: testvar = "a value"' >>dir/Atffile
300*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'testvar: a value' -e ignore -x \
301*00b67f09SDavid van Moolenbroek              "ATF_CONFDIR=$(pwd)/etc atf-run"
302*00b67f09SDavid van Moolenbroek}
303*00b67f09SDavid van Moolenbroek
304*00b67f09SDavid van Moolenbroekatf_test_case fds
305*00b67f09SDavid van Moolenbroekfds_head()
306*00b67f09SDavid van Moolenbroek{
307*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that all streams are properly captured"
308*00b67f09SDavid van Moolenbroek}
309*00b67f09SDavid van Moolenbroekfds_body()
310*00b67f09SDavid van Moolenbroek{
311*00b67f09SDavid van Moolenbroek    create_helper fds
312*00b67f09SDavid van Moolenbroek
313*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
314*00b67f09SDavid van Moolenbroek        -o match:'^tc-so:msg1 to stdout$' \
315*00b67f09SDavid van Moolenbroek        -o match:'^tc-so:msg2 to stdout$' \
316*00b67f09SDavid van Moolenbroek        -o match:'^tc-se:msg1 to stderr$' \
317*00b67f09SDavid van Moolenbroek        -o match:'^tc-se:msg2 to stderr$' \
318*00b67f09SDavid van Moolenbroek        -e empty atf-run
319*00b67f09SDavid van Moolenbroek}
320*00b67f09SDavid van Moolenbroek
321*00b67f09SDavid van Moolenbroekatf_test_case mux_streams
322*00b67f09SDavid van Moolenbroekmux_streams_head()
323*00b67f09SDavid van Moolenbroek{
324*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests for a race condition in stream multiplexing"
325*00b67f09SDavid van Moolenbroek}
326*00b67f09SDavid van Moolenbroekmux_streams_body()
327*00b67f09SDavid van Moolenbroek{
328*00b67f09SDavid van Moolenbroek    create_helper mux_streams
329*00b67f09SDavid van Moolenbroek
330*00b67f09SDavid van Moolenbroek    for i in 1 2 3 4 5; do
331*00b67f09SDavid van Moolenbroek        echo "Attempt ${i}"
332*00b67f09SDavid van Moolenbroek        atf_check -s eq:0 -o match:'stdout 9999' -o match:'stderr 9999' atf-run
333*00b67f09SDavid van Moolenbroek    done
334*00b67f09SDavid van Moolenbroek}
335*00b67f09SDavid van Moolenbroek
336*00b67f09SDavid van Moolenbroekatf_test_case expect
337*00b67f09SDavid van Moolenbroekexpect_head()
338*00b67f09SDavid van Moolenbroek{
339*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests the processing of test case results and the" \
340*00b67f09SDavid van Moolenbroek        "expect features"
341*00b67f09SDavid van Moolenbroek}
342*00b67f09SDavid van Moolenbroekexpect_body()
343*00b67f09SDavid van Moolenbroek{
344*00b67f09SDavid van Moolenbroek    ln -s "$(atf_get_srcdir)/expect_helpers" .
345*00b67f09SDavid van Moolenbroek    create_atffile expect_helpers
346*00b67f09SDavid van Moolenbroek
347*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
348*00b67f09SDavid van Moolenbroek        -o match:'death_and_exit, expected_death' \
349*00b67f09SDavid van Moolenbroek        -o match:'death_and_signal, expected_death' \
350*00b67f09SDavid van Moolenbroek        -o match:'death_but_pass, failed' \
351*00b67f09SDavid van Moolenbroek        -o match:'exit_any_and_exit, expected_exit' \
352*00b67f09SDavid van Moolenbroek        -o match:'exit_but_pass, failed' \
353*00b67f09SDavid van Moolenbroek        -o match:'exit_code_and_exit, expected_exit' \
354*00b67f09SDavid van Moolenbroek        -o match:'fail_and_fail_check, expected_failure' \
355*00b67f09SDavid van Moolenbroek        -o match:'fail_and_fail_requirement, expected_failure' \
356*00b67f09SDavid van Moolenbroek        -o match:'fail_but_pass, failed' \
357*00b67f09SDavid van Moolenbroek        -o match:'pass_and_pass, passed' \
358*00b67f09SDavid van Moolenbroek        -o match:'pass_but_fail_check, failed' \
359*00b67f09SDavid van Moolenbroek        -o match:'pass_but_fail_requirement, failed' \
360*00b67f09SDavid van Moolenbroek        -o match:'signal_any_and_signal, expected_signal' \
361*00b67f09SDavid van Moolenbroek        -o match:'signal_but_pass, failed' \
362*00b67f09SDavid van Moolenbroek        -o match:'signal_no_and_signal, expected_signal' \
363*00b67f09SDavid van Moolenbroek        -o match:'timeout_and_hang, expected_timeout' \
364*00b67f09SDavid van Moolenbroek        -o match:'timeout_but_pass, failed' \
365*00b67f09SDavid van Moolenbroek        -e empty atf-run
366*00b67f09SDavid van Moolenbroek}
367*00b67f09SDavid van Moolenbroek
368*00b67f09SDavid van Moolenbroekatf_test_case missing_results
369*00b67f09SDavid van Moolenbroekmissing_results_head()
370*00b67f09SDavid van Moolenbroek{
371*00b67f09SDavid van Moolenbroek    atf_set "descr" "Ensures that atf-run correctly handles test cases that " \
372*00b67f09SDavid van Moolenbroek                    "do not create the results file"
373*00b67f09SDavid van Moolenbroek}
374*00b67f09SDavid van Moolenbroekmissing_results_body()
375*00b67f09SDavid van Moolenbroek{
376*00b67f09SDavid van Moolenbroek    create_helper_stdin helper 1 <<EOF
377*00b67f09SDavid van Moolenbroektest -f \${resfile} && echo "resfile found"
378*00b67f09SDavid van Moolenbroekexit 0
379*00b67f09SDavid van MoolenbroekEOF
380*00b67f09SDavid van Moolenbroek    chmod +x helper
381*00b67f09SDavid van Moolenbroek
382*00b67f09SDavid van Moolenbroek    create_atffile helper
383*00b67f09SDavid van Moolenbroek
384*00b67f09SDavid van Moolenbroek    re='^tc-end: [0-9][0-9]*\.[0-9]*, tc1,'
385*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
386*00b67f09SDavid van Moolenbroek        -o match:"${re} failed,.*failed to create" \
387*00b67f09SDavid van Moolenbroek        -o not-match:'resfile found' \
388*00b67f09SDavid van Moolenbroek        -e empty atf-run
389*00b67f09SDavid van Moolenbroek}
390*00b67f09SDavid van Moolenbroek
391*00b67f09SDavid van Moolenbroekatf_test_case broken_results
392*00b67f09SDavid van Moolenbroekbroken_results_head()
393*00b67f09SDavid van Moolenbroek{
394*00b67f09SDavid van Moolenbroek    atf_set "descr" "Ensures that atf-run reports test programs that" \
395*00b67f09SDavid van Moolenbroek                    "provide a bogus results output as broken programs"
396*00b67f09SDavid van Moolenbroek}
397*00b67f09SDavid van Moolenbroekbroken_results_body()
398*00b67f09SDavid van Moolenbroek{
399*00b67f09SDavid van Moolenbroek    # We produce two errors from the header to ensure that the parse
400*00b67f09SDavid van Moolenbroek    # errors are printed on a single line on the output file.  Printing
401*00b67f09SDavid van Moolenbroek    # them on separate lines would be incorrect.
402*00b67f09SDavid van Moolenbroek    create_helper_stdin helper 1 <<EOF
403*00b67f09SDavid van Moolenbroekecho 'line 1' >\${resfile}
404*00b67f09SDavid van Moolenbroekecho 'line 2' >>\${resfile}
405*00b67f09SDavid van Moolenbroekexit 0
406*00b67f09SDavid van MoolenbroekEOF
407*00b67f09SDavid van Moolenbroek    chmod +x helper
408*00b67f09SDavid van Moolenbroek
409*00b67f09SDavid van Moolenbroek    create_atffile helper
410*00b67f09SDavid van Moolenbroek
411*00b67f09SDavid van Moolenbroek    re='^tc-end: [0-9][0-9]*\.[0-9]*, tc1,'
412*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o match:"${re} .*line 1.*line 2" -e empty atf-run
413*00b67f09SDavid van Moolenbroek}
414*00b67f09SDavid van Moolenbroek
415*00b67f09SDavid van Moolenbroekatf_test_case broken_tp_list
416*00b67f09SDavid van Moolenbroekbroken_tp_list_head()
417*00b67f09SDavid van Moolenbroek{
418*00b67f09SDavid van Moolenbroek    atf_set "descr" "Ensures that atf-run reports test programs that" \
419*00b67f09SDavid van Moolenbroek                    "provide a bogus test case list"
420*00b67f09SDavid van Moolenbroek}
421*00b67f09SDavid van Moolenbroekbroken_tp_list_body()
422*00b67f09SDavid van Moolenbroek{
423*00b67f09SDavid van Moolenbroek    cat >helper <<EOF
424*00b67f09SDavid van Moolenbroek#! $(atf-config -t atf_shell)
425*00b67f09SDavid van Moolenbroekwhile [ \${#} -gt 0 ]; do
426*00b67f09SDavid van Moolenbroek    if [ \${1} = -l ]; then
427*00b67f09SDavid van Moolenbroek        echo 'Content-Type: application/X-atf-tp; version="1"'
428*00b67f09SDavid van Moolenbroek        echo
429*00b67f09SDavid van Moolenbroek        echo 'foo: bar'
430*00b67f09SDavid van Moolenbroek        exit 0
431*00b67f09SDavid van Moolenbroek    else
432*00b67f09SDavid van Moolenbroek        shift
433*00b67f09SDavid van Moolenbroek    fi
434*00b67f09SDavid van Moolenbroekdone
435*00b67f09SDavid van Moolenbroekexit 0
436*00b67f09SDavid van MoolenbroekEOF
437*00b67f09SDavid van Moolenbroek    chmod +x helper
438*00b67f09SDavid van Moolenbroek
439*00b67f09SDavid van Moolenbroek    create_atffile helper
440*00b67f09SDavid van Moolenbroek
441*00b67f09SDavid van Moolenbroek    re='^tp-end: [0-9][0-9]*\.[0-9]*, helper,'
442*00b67f09SDavid van Moolenbroek    re="${re} Invalid format for test case list:.*First property.*ident"
443*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o match:"${re}" -e empty atf-run
444*00b67f09SDavid van Moolenbroek}
445*00b67f09SDavid van Moolenbroek
446*00b67f09SDavid van Moolenbroekatf_test_case zero_tcs
447*00b67f09SDavid van Moolenbroekzero_tcs_head()
448*00b67f09SDavid van Moolenbroek{
449*00b67f09SDavid van Moolenbroek    atf_set "descr" "Ensures that atf-run reports test programs without" \
450*00b67f09SDavid van Moolenbroek                    "test cases as errors"
451*00b67f09SDavid van Moolenbroek}
452*00b67f09SDavid van Moolenbroekzero_tcs_body()
453*00b67f09SDavid van Moolenbroek{
454*00b67f09SDavid van Moolenbroek    create_helper_stdin helper 0 <<EOF
455*00b67f09SDavid van Moolenbroekecho 'Content-Type: application/X-atf-tp; version="1"'
456*00b67f09SDavid van Moolenbroekecho
457*00b67f09SDavid van Moolenbroekexit 1
458*00b67f09SDavid van MoolenbroekEOF
459*00b67f09SDavid van Moolenbroek    chmod +x helper
460*00b67f09SDavid van Moolenbroek
461*00b67f09SDavid van Moolenbroek    create_atffile helper
462*00b67f09SDavid van Moolenbroek
463*00b67f09SDavid van Moolenbroek    re='^tp-end: [0-9][0-9]*\.[0-9]*, helper,'
464*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
465*00b67f09SDavid van Moolenbroek        -o match:"${re} .*Invalid format for test case list" \
466*00b67f09SDavid van Moolenbroek        -e empty atf-run
467*00b67f09SDavid van Moolenbroek}
468*00b67f09SDavid van Moolenbroek
469*00b67f09SDavid van Moolenbroekatf_test_case exit_codes
470*00b67f09SDavid van Moolenbroekexit_codes_head()
471*00b67f09SDavid van Moolenbroek{
472*00b67f09SDavid van Moolenbroek    atf_set "descr" "Ensures that atf-run reports bogus exit codes for" \
473*00b67f09SDavid van Moolenbroek                    "programs correctly"
474*00b67f09SDavid van Moolenbroek}
475*00b67f09SDavid van Moolenbroekexit_codes_body()
476*00b67f09SDavid van Moolenbroek{
477*00b67f09SDavid van Moolenbroek    create_helper_stdin helper 1 <<EOF
478*00b67f09SDavid van Moolenbroekecho "failed: Yes, it failed" >\${resfile}
479*00b67f09SDavid van Moolenbroekexit 0
480*00b67f09SDavid van MoolenbroekEOF
481*00b67f09SDavid van Moolenbroek    chmod +x helper
482*00b67f09SDavid van Moolenbroek
483*00b67f09SDavid van Moolenbroek    create_atffile helper
484*00b67f09SDavid van Moolenbroek
485*00b67f09SDavid van Moolenbroek    re='^tc-end: [0-9][0-9]*\.[0-9]*, tc1,'
486*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
487*00b67f09SDavid van Moolenbroek        -o match:"${re} .*exited successfully.*reported failure" \
488*00b67f09SDavid van Moolenbroek        -e empty atf-run
489*00b67f09SDavid van Moolenbroek}
490*00b67f09SDavid van Moolenbroek
491*00b67f09SDavid van Moolenbroekatf_test_case signaled
492*00b67f09SDavid van Moolenbroeksignaled_head()
493*00b67f09SDavid van Moolenbroek{
494*00b67f09SDavid van Moolenbroek    atf_set "descr" "Ensures that atf-run reports test program's crashes" \
495*00b67f09SDavid van Moolenbroek                    "correctly regardless of their actual results"
496*00b67f09SDavid van Moolenbroek}
497*00b67f09SDavid van Moolenbroeksignaled_body()
498*00b67f09SDavid van Moolenbroek{
499*00b67f09SDavid van Moolenbroek    create_helper_stdin helper 2 <<EOF
500*00b67f09SDavid van Moolenbroekecho "passed" >\${resfile}
501*00b67f09SDavid van Moolenbroekcase \${testcase} in
502*00b67f09SDavid van Moolenbroek    tc1) ;;
503*00b67f09SDavid van Moolenbroek    tc2) echo "Killing myself!" ; kill -9 \$\$ ;;
504*00b67f09SDavid van Moolenbroekesac
505*00b67f09SDavid van MoolenbroekEOF
506*00b67f09SDavid van Moolenbroek    chmod +x helper
507*00b67f09SDavid van Moolenbroek
508*00b67f09SDavid van Moolenbroek    create_atffile helper
509*00b67f09SDavid van Moolenbroek
510*00b67f09SDavid van Moolenbroek    re='^tc-end: [0-9][0-9]*\.[0-9]*, tc2,'
511*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o match:"${re} .*received signal 9" \
512*00b67f09SDavid van Moolenbroek        -e empty atf-run
513*00b67f09SDavid van Moolenbroek}
514*00b67f09SDavid van Moolenbroek
515*00b67f09SDavid van Moolenbroekatf_test_case hooks
516*00b67f09SDavid van Moolenbroekhooks_head()
517*00b67f09SDavid van Moolenbroek{
518*00b67f09SDavid van Moolenbroek    atf_set "descr" "Checks that the default hooks work and that they" \
519*00b67f09SDavid van Moolenbroek                    "can be overriden by the user"
520*00b67f09SDavid van Moolenbroek}
521*00b67f09SDavid van Moolenbroekhooks_body()
522*00b67f09SDavid van Moolenbroek{
523*00b67f09SDavid van Moolenbroek    cp $(atf_get_srcdir)/pass_helper helper
524*00b67f09SDavid van Moolenbroek    create_atffile helper
525*00b67f09SDavid van Moolenbroek
526*00b67f09SDavid van Moolenbroek    mkdir atf
527*00b67f09SDavid van Moolenbroek    mkdir .atf
528*00b67f09SDavid van Moolenbroek
529*00b67f09SDavid van Moolenbroek    echo "Checking default hooks"
530*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'^info: time.start, ' \
531*00b67f09SDavid van Moolenbroek        -o match:'^info: time.end, ' -e empty -x \
532*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/atf atf-run"
533*00b67f09SDavid van Moolenbroek
534*00b67f09SDavid van Moolenbroek    echo "Checking the system-wide info_start hook"
535*00b67f09SDavid van Moolenbroek    cat >atf/atf-run.hooks <<EOF
536*00b67f09SDavid van Moolenbroekinfo_start_hook()
537*00b67f09SDavid van Moolenbroek{
538*00b67f09SDavid van Moolenbroek    atf_tps_writer_info "test" "sw value"
539*00b67f09SDavid van Moolenbroek}
540*00b67f09SDavid van MoolenbroekEOF
541*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
542*00b67f09SDavid van Moolenbroek        -o match:'^info: test, sw value' \
543*00b67f09SDavid van Moolenbroek        -o not-match:'^info: time.start, ' \
544*00b67f09SDavid van Moolenbroek        -o match:'^info: time.end, ' \
545*00b67f09SDavid van Moolenbroek        -e empty -x \
546*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/atf atf-run"
547*00b67f09SDavid van Moolenbroek
548*00b67f09SDavid van Moolenbroek    echo "Checking the user-specific info_start hook"
549*00b67f09SDavid van Moolenbroek    cat >.atf/atf-run.hooks <<EOF
550*00b67f09SDavid van Moolenbroekinfo_start_hook()
551*00b67f09SDavid van Moolenbroek{
552*00b67f09SDavid van Moolenbroek    atf_tps_writer_info "test" "user value"
553*00b67f09SDavid van Moolenbroek}
554*00b67f09SDavid van MoolenbroekEOF
555*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
556*00b67f09SDavid van Moolenbroek        -o match:'^info: test, user value' \
557*00b67f09SDavid van Moolenbroek        -o not-match:'^info: time.start, ' \
558*00b67f09SDavid van Moolenbroek        -o match:'^info: time.end, ' \
559*00b67f09SDavid van Moolenbroek        -e empty -x \
560*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/atf atf-run"
561*00b67f09SDavid van Moolenbroek
562*00b67f09SDavid van Moolenbroek    rm atf/atf-run.hooks
563*00b67f09SDavid van Moolenbroek    rm .atf/atf-run.hooks
564*00b67f09SDavid van Moolenbroek
565*00b67f09SDavid van Moolenbroek    echo "Checking the system-wide info_end hook"
566*00b67f09SDavid van Moolenbroek    cat >atf/atf-run.hooks <<EOF
567*00b67f09SDavid van Moolenbroekinfo_end_hook()
568*00b67f09SDavid van Moolenbroek{
569*00b67f09SDavid van Moolenbroek    atf_tps_writer_info "test" "sw value"
570*00b67f09SDavid van Moolenbroek}
571*00b67f09SDavid van MoolenbroekEOF
572*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
573*00b67f09SDavid van Moolenbroek        -o match:'^info: time.start, ' \
574*00b67f09SDavid van Moolenbroek        -o not-match:'^info: time.end, ' \
575*00b67f09SDavid van Moolenbroek        -o match:'^info: test, sw value' \
576*00b67f09SDavid van Moolenbroek        -e empty -x \
577*00b67f09SDavid van Moolenbroek        "ATF_CONFDIR=$(pwd)/atf atf-run"
578*00b67f09SDavid van Moolenbroek
579*00b67f09SDavid van Moolenbroek    echo "Checking the user-specific info_end hook"
580*00b67f09SDavid van Moolenbroek    cat >.atf/atf-run.hooks <<EOF
581*00b67f09SDavid van Moolenbroekinfo_end_hook()
582*00b67f09SDavid van Moolenbroek{
583*00b67f09SDavid van Moolenbroek    atf_tps_writer_info "test" "user value"
584*00b67f09SDavid van Moolenbroek}
585*00b67f09SDavid van MoolenbroekEOF
586*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
587*00b67f09SDavid van Moolenbroek        -o match:'^info: time.start, ' \
588*00b67f09SDavid van Moolenbroek        -o not-match:'^info: time.end, ' \
589*00b67f09SDavid van Moolenbroek        -o match:'^info: test, user value' \
590*00b67f09SDavid van Moolenbroek        -e empty -x \
591*00b67f09SDavid van Moolenbroek         "ATF_CONFDIR=$(pwd)/atf atf-run"
592*00b67f09SDavid van Moolenbroek}
593*00b67f09SDavid van Moolenbroek
594*00b67f09SDavid van Moolenbroekatf_test_case isolation_env
595*00b67f09SDavid van Moolenbroekisolation_env_head()
596*00b67f09SDavid van Moolenbroek{
597*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run sets a set of environment variables" \
598*00b67f09SDavid van Moolenbroek                    "to known sane values"
599*00b67f09SDavid van Moolenbroek}
600*00b67f09SDavid van Moolenbroekisolation_env_body()
601*00b67f09SDavid van Moolenbroek{
602*00b67f09SDavid van Moolenbroek    undef_vars="LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY \
603*00b67f09SDavid van Moolenbroek                LC_NUMERIC LC_TIME"
604*00b67f09SDavid van Moolenbroek    def_vars="HOME TZ"
605*00b67f09SDavid van Moolenbroek
606*00b67f09SDavid van Moolenbroek    mangleenv="env"
607*00b67f09SDavid van Moolenbroek    for v in ${undef_vars} ${def_vars}; do
608*00b67f09SDavid van Moolenbroek        mangleenv="${mangleenv} ${v}=bogus-value"
609*00b67f09SDavid van Moolenbroek    done
610*00b67f09SDavid van Moolenbroek
611*00b67f09SDavid van Moolenbroek    create_helper env_list
612*00b67f09SDavid van Moolenbroek    create_atffile helper
613*00b67f09SDavid van Moolenbroek
614*00b67f09SDavid van Moolenbroek    # We must ignore stderr in this call (instead of specifying -e empty)
615*00b67f09SDavid van Moolenbroek    # because, when atf-run invokes the shell to run the hooks, we may get
616*00b67f09SDavid van Moolenbroek    # error messages about an invalid locale.  This happens, at least, when
617*00b67f09SDavid van Moolenbroek    # the shell is bash 4.x.
618*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o save:stdout -e ignore ${mangleenv} atf-run helper
619*00b67f09SDavid van Moolenbroek
620*00b67f09SDavid van Moolenbroek    for v in ${undef_vars}; do
621*00b67f09SDavid van Moolenbroek        atf_check -s eq:1 -o empty -e empty grep "^tc-so:${v}=" stdout
622*00b67f09SDavid van Moolenbroek    done
623*00b67f09SDavid van Moolenbroek
624*00b67f09SDavid van Moolenbroek    for v in ${def_vars}; do
625*00b67f09SDavid van Moolenbroek        atf_check -s eq:0 -o ignore -e empty grep "^tc-so:${v}=" stdout
626*00b67f09SDavid van Moolenbroek    done
627*00b67f09SDavid van Moolenbroek
628*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o ignore -e empty grep "^tc-so:TZ=UTC" stdout
629*00b67f09SDavid van Moolenbroek}
630*00b67f09SDavid van Moolenbroek
631*00b67f09SDavid van Moolenbroekatf_test_case isolation_home
632*00b67f09SDavid van Moolenbroekisolation_home_head()
633*00b67f09SDavid van Moolenbroek{
634*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run sets HOME to a sane and valid value"
635*00b67f09SDavid van Moolenbroek}
636*00b67f09SDavid van Moolenbroekisolation_home_body()
637*00b67f09SDavid van Moolenbroek{
638*00b67f09SDavid van Moolenbroek    create_helper env_home
639*00b67f09SDavid van Moolenbroek    create_atffile helper
640*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o ignore -e ignore env HOME=foo atf-run helper
641*00b67f09SDavid van Moolenbroek}
642*00b67f09SDavid van Moolenbroek
643*00b67f09SDavid van Moolenbroekatf_test_case isolation_stdin
644*00b67f09SDavid van Moolenbroekisolation_stdin_head()
645*00b67f09SDavid van Moolenbroek{
646*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run nullifies the stdin of test cases"
647*00b67f09SDavid van Moolenbroek}
648*00b67f09SDavid van Moolenbroekisolation_stdin_body()
649*00b67f09SDavid van Moolenbroek{
650*00b67f09SDavid van Moolenbroek    create_helper read_stdin
651*00b67f09SDavid van Moolenbroek    create_atffile helper
652*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o ignore -e ignore -x 'echo hello world | atf-run helper'
653*00b67f09SDavid van Moolenbroek}
654*00b67f09SDavid van Moolenbroek
655*00b67f09SDavid van Moolenbroekatf_test_case isolation_umask
656*00b67f09SDavid van Moolenbroekisolation_umask_head()
657*00b67f09SDavid van Moolenbroek{
658*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run sets the umask to a known value"
659*00b67f09SDavid van Moolenbroek}
660*00b67f09SDavid van Moolenbroekisolation_umask_body()
661*00b67f09SDavid van Moolenbroek{
662*00b67f09SDavid van Moolenbroek    create_helper umask
663*00b67f09SDavid van Moolenbroek    create_atffile helper
664*00b67f09SDavid van Moolenbroek
665*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'umask: 0022' -e ignore -x \
666*00b67f09SDavid van Moolenbroek        "umask 0000 && atf-run helper"
667*00b67f09SDavid van Moolenbroek}
668*00b67f09SDavid van Moolenbroek
669*00b67f09SDavid van Moolenbroekatf_test_case cleanup_pass
670*00b67f09SDavid van Moolenbroekcleanup_pass_head()
671*00b67f09SDavid van Moolenbroek{
672*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run calls the cleanup routine of the test" \
673*00b67f09SDavid van Moolenbroek        "case when the test case result is passed"
674*00b67f09SDavid van Moolenbroek}
675*00b67f09SDavid van Moolenbroekcleanup_pass_body()
676*00b67f09SDavid van Moolenbroek{
677*00b67f09SDavid van Moolenbroek    create_helper cleanup_states
678*00b67f09SDavid van Moolenbroek    create_atffile helper
679*00b67f09SDavid van Moolenbroek
680*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'cleanup_states, passed' -e ignore atf-run \
681*00b67f09SDavid van Moolenbroek        -v state=pass -v statedir=$(pwd) helper
682*00b67f09SDavid van Moolenbroek    test -f to-stay || atf_fail "Test case body did not run correctly"
683*00b67f09SDavid van Moolenbroek    if [ -f to-delete ]; then
684*00b67f09SDavid van Moolenbroek        atf_fail "Test case cleanup did not run correctly"
685*00b67f09SDavid van Moolenbroek    fi
686*00b67f09SDavid van Moolenbroek}
687*00b67f09SDavid van Moolenbroek
688*00b67f09SDavid van Moolenbroekatf_test_case cleanup_fail
689*00b67f09SDavid van Moolenbroekcleanup_fail_head()
690*00b67f09SDavid van Moolenbroek{
691*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run calls the cleanup routine of the test" \
692*00b67f09SDavid van Moolenbroek        "case when the test case result is failed"
693*00b67f09SDavid van Moolenbroek}
694*00b67f09SDavid van Moolenbroekcleanup_fail_body()
695*00b67f09SDavid van Moolenbroek{
696*00b67f09SDavid van Moolenbroek    create_helper cleanup_states
697*00b67f09SDavid van Moolenbroek    create_atffile helper
698*00b67f09SDavid van Moolenbroek
699*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o match:'cleanup_states, failed' -e ignore atf-run \
700*00b67f09SDavid van Moolenbroek        -v state=fail -v statedir=$(pwd) helper
701*00b67f09SDavid van Moolenbroek    test -f to-stay || atf_fail "Test case body did not run correctly"
702*00b67f09SDavid van Moolenbroek    if [ -f to-delete ]; then
703*00b67f09SDavid van Moolenbroek        atf_fail "Test case cleanup did not run correctly"
704*00b67f09SDavid van Moolenbroek    fi
705*00b67f09SDavid van Moolenbroek}
706*00b67f09SDavid van Moolenbroek
707*00b67f09SDavid van Moolenbroekatf_test_case cleanup_skip
708*00b67f09SDavid van Moolenbroekcleanup_skip_head()
709*00b67f09SDavid van Moolenbroek{
710*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run calls the cleanup routine of the test" \
711*00b67f09SDavid van Moolenbroek        "case when the test case result is skipped"
712*00b67f09SDavid van Moolenbroek}
713*00b67f09SDavid van Moolenbroekcleanup_skip_body()
714*00b67f09SDavid van Moolenbroek{
715*00b67f09SDavid van Moolenbroek    create_helper cleanup_states
716*00b67f09SDavid van Moolenbroek    create_atffile helper
717*00b67f09SDavid van Moolenbroek
718*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'cleanup_states, skipped' -e ignore atf-run \
719*00b67f09SDavid van Moolenbroek        -v state=skip -v statedir=$(pwd) helper
720*00b67f09SDavid van Moolenbroek    test -f to-stay || atf_fail "Test case body did not run correctly"
721*00b67f09SDavid van Moolenbroek    if [ -f to-delete ]; then
722*00b67f09SDavid van Moolenbroek        atf_fail "Test case cleanup did not run correctly"
723*00b67f09SDavid van Moolenbroek    fi
724*00b67f09SDavid van Moolenbroek}
725*00b67f09SDavid van Moolenbroek
726*00b67f09SDavid van Moolenbroekatf_test_case cleanup_curdir
727*00b67f09SDavid van Moolenbroekcleanup_curdir_head()
728*00b67f09SDavid van Moolenbroek{
729*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run calls the cleanup routine in the same" \
730*00b67f09SDavid van Moolenbroek        "work directory as the body so that they can share data"
731*00b67f09SDavid van Moolenbroek}
732*00b67f09SDavid van Moolenbroekcleanup_curdir_body()
733*00b67f09SDavid van Moolenbroek{
734*00b67f09SDavid van Moolenbroek    create_helper cleanup_curdir
735*00b67f09SDavid van Moolenbroek    create_atffile helper
736*00b67f09SDavid van Moolenbroek
737*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:'cleanup_curdir, passed' \
738*00b67f09SDavid van Moolenbroek        -o match:'Old value: 1234' -e ignore atf-run helper
739*00b67f09SDavid van Moolenbroek}
740*00b67f09SDavid van Moolenbroek
741*00b67f09SDavid van Moolenbroekatf_test_case cleanup_signal
742*00b67f09SDavid van Moolenbroekcleanup_signal_head()
743*00b67f09SDavid van Moolenbroek{
744*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run calls the cleanup routine if it gets" \
745*00b67f09SDavid van Moolenbroek        "a termination signal while running the body"
746*00b67f09SDavid van Moolenbroek}
747*00b67f09SDavid van Moolenbroekcleanup_signal_body()
748*00b67f09SDavid van Moolenbroek{
749*00b67f09SDavid van Moolenbroek    : # TODO: Write this.
750*00b67f09SDavid van Moolenbroek}
751*00b67f09SDavid van Moolenbroek
752*00b67f09SDavid van Moolenbroekatf_test_case cleanup_mount
753*00b67f09SDavid van Moolenbroekcleanup_mount_head()
754*00b67f09SDavid van Moolenbroek{
755*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that the removal algorithm does not cross" \
756*00b67f09SDavid van Moolenbroek                    "mount points"
757*00b67f09SDavid van Moolenbroek    atf_set "require.user" "root"
758*00b67f09SDavid van Moolenbroek}
759*00b67f09SDavid van Moolenbroekcleanup_mount_body()
760*00b67f09SDavid van Moolenbroek{
761*00b67f09SDavid van Moolenbroek    ROOT="$(pwd)/root"; export ROOT
762*00b67f09SDavid van Moolenbroek
763*00b67f09SDavid van Moolenbroek    create_mount_helper helper <<EOF
764*00b67f09SDavid van Moolenbroekecho \$(pwd) >\${ROOT}
765*00b67f09SDavid van Moolenbroekmkdir foo
766*00b67f09SDavid van Moolenbroekmkdir foo/bar
767*00b67f09SDavid van Moolenbroekmkdir foo/bar/mnt
768*00b67f09SDavid van Moolenbroekdo_mount foo/bar/mnt
769*00b67f09SDavid van Moolenbroekmkdir foo/baz
770*00b67f09SDavid van Moolenbroekdo_mount foo/baz
771*00b67f09SDavid van Moolenbroekmkdir foo/baz/foo
772*00b67f09SDavid van Moolenbroekmkdir foo/baz/foo/bar
773*00b67f09SDavid van Moolenbroekdo_mount foo/baz/foo/bar
774*00b67f09SDavid van MoolenbroekEOF
775*00b67f09SDavid van Moolenbroek    create_atffile helper
776*00b67f09SDavid van Moolenbroek    chmod +x helper
777*00b67f09SDavid van Moolenbroek
778*00b67f09SDavid van Moolenbroek    platform=$(uname)
779*00b67f09SDavid van Moolenbroek    case ${platform} in
780*00b67f09SDavid van Moolenbroek    Linux|FreeBSD|NetBSD|SunOS)
781*00b67f09SDavid van Moolenbroek        ;;
782*00b67f09SDavid van Moolenbroek    *)
783*00b67f09SDavid van Moolenbroek        # XXX Possibly specify in meta-data too.
784*00b67f09SDavid van Moolenbroek        atf_skip "Test unimplemented in this platform (${platform})"
785*00b67f09SDavid van Moolenbroek        ;;
786*00b67f09SDavid van Moolenbroek    esac
787*00b67f09SDavid van Moolenbroek
788*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"main, passed" -e ignore atf-run helper
789*00b67f09SDavid van Moolenbroek    mount | grep $(cat root) && atf_fail "Some file systems remain mounted"
790*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o empty -e empty test -d $(cat root)/foo
791*00b67f09SDavid van Moolenbroek}
792*00b67f09SDavid van Moolenbroek
793*00b67f09SDavid van Moolenbroekatf_test_case cleanup_symlink
794*00b67f09SDavid van Moolenbroekcleanup_symlink_head()
795*00b67f09SDavid van Moolenbroek{
796*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that the removal algorithm does not follow" \
797*00b67f09SDavid van Moolenbroek                    "symlinks, which may live in another device and thus" \
798*00b67f09SDavid van Moolenbroek                    "be treated as mount points"
799*00b67f09SDavid van Moolenbroek    atf_set "require.user" "root"
800*00b67f09SDavid van Moolenbroek}
801*00b67f09SDavid van Moolenbroekcleanup_symlink_body()
802*00b67f09SDavid van Moolenbroek{
803*00b67f09SDavid van Moolenbroek    ROOT="$(pwd)/root"; export ROOT
804*00b67f09SDavid van Moolenbroek
805*00b67f09SDavid van Moolenbroek    create_mount_helper helper <<EOF
806*00b67f09SDavid van Moolenbroekecho \$(pwd) >\${ROOT}
807*00b67f09SDavid van Moolenbroekatf_check -s eq:0 -o empty -e empty mkdir foo
808*00b67f09SDavid van Moolenbroekatf_check -s eq:0 -o empty -e empty mkdir foo/bar
809*00b67f09SDavid van Moolenbroekdo_mount foo/bar
810*00b67f09SDavid van Moolenbroekatf_check -s eq:0 -o empty -e empty touch a
811*00b67f09SDavid van Moolenbroekatf_check -s eq:0 -o empty -e empty ln -s "\$(pwd)/a" foo/bar
812*00b67f09SDavid van MoolenbroekEOF
813*00b67f09SDavid van Moolenbroek    create_atffile helper
814*00b67f09SDavid van Moolenbroek    chmod +x helper
815*00b67f09SDavid van Moolenbroek
816*00b67f09SDavid van Moolenbroek    platform=$(uname)
817*00b67f09SDavid van Moolenbroek    case ${platform} in
818*00b67f09SDavid van Moolenbroek    Linux|FreeBSD|NetBSD|SunOS)
819*00b67f09SDavid van Moolenbroek        ;;
820*00b67f09SDavid van Moolenbroek    *)
821*00b67f09SDavid van Moolenbroek        # XXX Possibly specify in meta-data too.
822*00b67f09SDavid van Moolenbroek        atf_skip "Test unimplemented in this platform (${platform})"
823*00b67f09SDavid van Moolenbroek        ;;
824*00b67f09SDavid van Moolenbroek    esac
825*00b67f09SDavid van Moolenbroek
826*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"main, passed" -e ignore atf-run helper
827*00b67f09SDavid van Moolenbroek    mount | grep $(cat root) && atf_fail "Some file systems remain mounted"
828*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o empty -e empty test -d $(cat root)/foo
829*00b67f09SDavid van Moolenbroek}
830*00b67f09SDavid van Moolenbroek
831*00b67f09SDavid van Moolenbroekatf_test_case require_arch
832*00b67f09SDavid van Moolenbroekrequire_arch_head()
833*00b67f09SDavid van Moolenbroek{
834*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.arch property"
835*00b67f09SDavid van Moolenbroek}
836*00b67f09SDavid van Moolenbroekrequire_arch_body()
837*00b67f09SDavid van Moolenbroek{
838*00b67f09SDavid van Moolenbroek    create_helper require_arch
839*00b67f09SDavid van Moolenbroek    create_atffile helper
840*00b67f09SDavid van Moolenbroek
841*00b67f09SDavid van Moolenbroek    echo "Checking for the real architecture"
842*00b67f09SDavid van Moolenbroek    arch=$(atf-config -t atf_arch)
843*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
844*00b67f09SDavid van Moolenbroek        -v arch="${arch}" helper
845*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
846*00b67f09SDavid van Moolenbroek        -v arch="foo ${arch}" helper
847*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
848*00b67f09SDavid van Moolenbroek        -v arch="${arch} foo" helper
849*00b67f09SDavid van Moolenbroek
850*00b67f09SDavid van Moolenbroek    echo "Checking for a fictitious architecture"
851*00b67f09SDavid van Moolenbroek    arch=fictitious
852*00b67f09SDavid van Moolenbroek    export ATF_ARCH=fictitious
853*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
854*00b67f09SDavid van Moolenbroek        -v arch="${arch}" helper
855*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
856*00b67f09SDavid van Moolenbroek        -v arch="foo ${arch}" helper
857*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
858*00b67f09SDavid van Moolenbroek        -v arch="${arch} foo" helper
859*00b67f09SDavid van Moolenbroek
860*00b67f09SDavid van Moolenbroek    echo "Triggering some failures"
861*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*foo.*architecture" \
862*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v arch="foo" helper
863*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
864*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*foo bar.*architectures" -e ignore \
865*00b67f09SDavid van Moolenbroek        atf-run -v arch="foo bar" helper
866*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
867*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*fictitiousxxx.*architecture" \
868*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v arch="${arch}xxx" helper
869*00b67f09SDavid van Moolenbroek}
870*00b67f09SDavid van Moolenbroek
871*00b67f09SDavid van Moolenbroekatf_test_case require_config
872*00b67f09SDavid van Moolenbroekrequire_config_head()
873*00b67f09SDavid van Moolenbroek{
874*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.config property"
875*00b67f09SDavid van Moolenbroek}
876*00b67f09SDavid van Moolenbroekrequire_config_body()
877*00b67f09SDavid van Moolenbroek{
878*00b67f09SDavid van Moolenbroek    create_helper require_config
879*00b67f09SDavid van Moolenbroek    create_atffile helper
880*00b67f09SDavid van Moolenbroek
881*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*var1.*not defined" \
882*00b67f09SDavid van Moolenbroek        -e ignore atf-run helper
883*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*var2.*not defined" \
884*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v var1=foo helper
885*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
886*00b67f09SDavid van Moolenbroek        -v var1=a -v var2=' ' helper
887*00b67f09SDavid van Moolenbroek}
888*00b67f09SDavid van Moolenbroek
889*00b67f09SDavid van Moolenbroekatf_test_case require_files
890*00b67f09SDavid van Moolenbroekrequire_files_head()
891*00b67f09SDavid van Moolenbroek{
892*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.files property"
893*00b67f09SDavid van Moolenbroek}
894*00b67f09SDavid van Moolenbroekrequire_files_body()
895*00b67f09SDavid van Moolenbroek{
896*00b67f09SDavid van Moolenbroek    create_helper require_files
897*00b67f09SDavid van Moolenbroek    create_atffile helper
898*00b67f09SDavid van Moolenbroek
899*00b67f09SDavid van Moolenbroek    touch i-exist
900*00b67f09SDavid van Moolenbroek
901*00b67f09SDavid van Moolenbroek    echo "Checking absolute paths"
902*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
903*00b67f09SDavid van Moolenbroek        -v files='/bin/cp' helper
904*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
905*00b67f09SDavid van Moolenbroek        -v files="$(pwd)/i-exist" helper
906*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
907*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*/dont-exist" \
908*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v files="$(pwd)/i-exist $(pwd)/dont-exist" helper
909*00b67f09SDavid van Moolenbroek
910*00b67f09SDavid van Moolenbroek    echo "Checking that relative paths are not allowed"
911*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
912*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*hello" \
913*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v files='hello' helper
914*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
915*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*a/b" \
916*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v files='a/b' helper
917*00b67f09SDavid van Moolenbroek}
918*00b67f09SDavid van Moolenbroek
919*00b67f09SDavid van Moolenbroekatf_test_case require_machine
920*00b67f09SDavid van Moolenbroekrequire_machine_head()
921*00b67f09SDavid van Moolenbroek{
922*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.machine property"
923*00b67f09SDavid van Moolenbroek}
924*00b67f09SDavid van Moolenbroekrequire_machine_body()
925*00b67f09SDavid van Moolenbroek{
926*00b67f09SDavid van Moolenbroek    create_helper require_machine
927*00b67f09SDavid van Moolenbroek    create_atffile helper
928*00b67f09SDavid van Moolenbroek
929*00b67f09SDavid van Moolenbroek    echo "Checking for the real machine type"
930*00b67f09SDavid van Moolenbroek    machine=$(atf-config -t atf_machine)
931*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
932*00b67f09SDavid van Moolenbroek        -v machine="${machine}" helper
933*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
934*00b67f09SDavid van Moolenbroek        -v machine="foo ${machine}" helper
935*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
936*00b67f09SDavid van Moolenbroek        -v machine="${machine} foo" helper
937*00b67f09SDavid van Moolenbroek
938*00b67f09SDavid van Moolenbroek    echo "Checking for a fictitious machine type"
939*00b67f09SDavid van Moolenbroek    machine=fictitious
940*00b67f09SDavid van Moolenbroek    export ATF_MACHINE=fictitious
941*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
942*00b67f09SDavid van Moolenbroek        -v machine="${machine}" helper
943*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
944*00b67f09SDavid van Moolenbroek        -v machine="foo ${machine}" helper
945*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
946*00b67f09SDavid van Moolenbroek        -v machine="${machine} foo" helper
947*00b67f09SDavid van Moolenbroek
948*00b67f09SDavid van Moolenbroek    echo "Triggering some failures"
949*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, skipped, .*foo.*machine type" \
950*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v machine="foo" helper
951*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
952*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*foo bar.*machine types" -e ignore \
953*00b67f09SDavid van Moolenbroek        atf-run -v machine="foo bar" helper
954*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
955*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*fictitiousxxx.*machine type" \
956*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v machine="${machine}xxx" helper
957*00b67f09SDavid van Moolenbroek}
958*00b67f09SDavid van Moolenbroek
959*00b67f09SDavid van Moolenbroekatf_test_case require_progs
960*00b67f09SDavid van Moolenbroekrequire_progs_head()
961*00b67f09SDavid van Moolenbroek{
962*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.progs property"
963*00b67f09SDavid van Moolenbroek}
964*00b67f09SDavid van Moolenbroekrequire_progs_body()
965*00b67f09SDavid van Moolenbroek{
966*00b67f09SDavid van Moolenbroek    create_helper require_progs
967*00b67f09SDavid van Moolenbroek    create_atffile helper
968*00b67f09SDavid van Moolenbroek
969*00b67f09SDavid van Moolenbroek    echo "Checking absolute paths"
970*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
971*00b67f09SDavid van Moolenbroek        -v progs='/bin/cp' helper
972*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
973*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*/bin/__non-existent__.*PATH" \
974*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v progs='/bin/__non-existent__' helper
975*00b67f09SDavid van Moolenbroek
976*00b67f09SDavid van Moolenbroek    echo "Checking that relative paths are not allowed"
977*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
978*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, failed, Relative paths.*not allowed.*bin/cp" \
979*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v progs='bin/cp' helper
980*00b67f09SDavid van Moolenbroek
981*00b67f09SDavid van Moolenbroek    echo "Check plain file names, searching them in the PATH."
982*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
983*00b67f09SDavid van Moolenbroek        -v progs='cp' helper
984*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 \
985*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, skipped, .*__non-existent__.*PATH" -e ignore \
986*00b67f09SDavid van Moolenbroek        atf-run -v progs='__non-existent__' helper
987*00b67f09SDavid van Moolenbroek}
988*00b67f09SDavid van Moolenbroek
989*00b67f09SDavid van Moolenbroekatf_test_case require_user_root
990*00b67f09SDavid van Moolenbroekrequire_user_root_head()
991*00b67f09SDavid van Moolenbroek{
992*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.user property" \
993*00b67f09SDavid van Moolenbroek        "when it is set to 'root'"
994*00b67f09SDavid van Moolenbroek}
995*00b67f09SDavid van Moolenbroekrequire_user_root_body()
996*00b67f09SDavid van Moolenbroek{
997*00b67f09SDavid van Moolenbroek    create_helper require_user
998*00b67f09SDavid van Moolenbroek    create_atffile helper
999*00b67f09SDavid van Moolenbroek
1000*00b67f09SDavid van Moolenbroek    if [ $(id -u) -eq 0 ]; then
1001*00b67f09SDavid van Moolenbroek        exp=passed
1002*00b67f09SDavid van Moolenbroek    else
1003*00b67f09SDavid van Moolenbroek        exp=skipped
1004*00b67f09SDavid van Moolenbroek    fi
1005*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, ${exp}" -e ignore atf-run \
1006*00b67f09SDavid van Moolenbroek        -v user=root helper
1007*00b67f09SDavid van Moolenbroek}
1008*00b67f09SDavid van Moolenbroek
1009*00b67f09SDavid van Moolenbroekatf_test_case require_user_unprivileged
1010*00b67f09SDavid van Moolenbroekrequire_user_unprivileged_head()
1011*00b67f09SDavid van Moolenbroek{
1012*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.user property" \
1013*00b67f09SDavid van Moolenbroek        "when it is set to 'root'"
1014*00b67f09SDavid van Moolenbroek}
1015*00b67f09SDavid van Moolenbroekrequire_user_unprivileged_body()
1016*00b67f09SDavid van Moolenbroek{
1017*00b67f09SDavid van Moolenbroek    create_helper require_user
1018*00b67f09SDavid van Moolenbroek    create_atffile helper
1019*00b67f09SDavid van Moolenbroek
1020*00b67f09SDavid van Moolenbroek    if [ $(id -u) -eq 0 ]; then
1021*00b67f09SDavid van Moolenbroek        exp=skipped
1022*00b67f09SDavid van Moolenbroek    else
1023*00b67f09SDavid van Moolenbroek        exp=passed
1024*00b67f09SDavid van Moolenbroek    fi
1025*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, ${exp}" -e ignore atf-run \
1026*00b67f09SDavid van Moolenbroek        -v user=unprivileged helper
1027*00b67f09SDavid van Moolenbroek}
1028*00b67f09SDavid van Moolenbroek
1029*00b67f09SDavid van Moolenbroekatf_test_case require_user_bad
1030*00b67f09SDavid van Moolenbroekrequire_user_bad_head()
1031*00b67f09SDavid van Moolenbroek{
1032*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run validates the require.user property" \
1033*00b67f09SDavid van Moolenbroek        "when it is set to 'root'"
1034*00b67f09SDavid van Moolenbroek}
1035*00b67f09SDavid van Moolenbroekrequire_user_bad_body()
1036*00b67f09SDavid van Moolenbroek{
1037*00b67f09SDavid van Moolenbroek    create_helper require_user
1038*00b67f09SDavid van Moolenbroek    create_atffile helper
1039*00b67f09SDavid van Moolenbroek
1040*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 -o match:"${TESTCASE}, failed, Invalid value.*foobar" \
1041*00b67f09SDavid van Moolenbroek        -e ignore atf-run -v user=foobar helper
1042*00b67f09SDavid van Moolenbroek}
1043*00b67f09SDavid van Moolenbroek
1044*00b67f09SDavid van Moolenbroekatf_test_case timeout
1045*00b67f09SDavid van Moolenbroektimeout_head()
1046*00b67f09SDavid van Moolenbroek{
1047*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run kills a test case that times out"
1048*00b67f09SDavid van Moolenbroek}
1049*00b67f09SDavid van Moolenbroektimeout_body()
1050*00b67f09SDavid van Moolenbroek{
1051*00b67f09SDavid van Moolenbroek    create_helper timeout
1052*00b67f09SDavid van Moolenbroek    create_atffile helper
1053*00b67f09SDavid van Moolenbroek
1054*00b67f09SDavid van Moolenbroek    atf_check -s eq:1 \
1055*00b67f09SDavid van Moolenbroek        -o match:"${TESTCASE}, failed, .*timed out after 1 second" -e ignore \
1056*00b67f09SDavid van Moolenbroek        atf-run -v statedir=$(pwd) helper
1057*00b67f09SDavid van Moolenbroek    if [ -f finished ]; then
1058*00b67f09SDavid van Moolenbroek        atf_fail "Test case was not killed after time out"
1059*00b67f09SDavid van Moolenbroek    fi
1060*00b67f09SDavid van Moolenbroek}
1061*00b67f09SDavid van Moolenbroek
1062*00b67f09SDavid van Moolenbroekatf_test_case timeout_forkexit
1063*00b67f09SDavid van Moolenbroektimeout_forkexit_head()
1064*00b67f09SDavid van Moolenbroek{
1065*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run deals gracefully with a test program" \
1066*00b67f09SDavid van Moolenbroek        "that forks, exits, but the child process hangs"
1067*00b67f09SDavid van Moolenbroek}
1068*00b67f09SDavid van Moolenbroektimeout_forkexit_body()
1069*00b67f09SDavid van Moolenbroek{
1070*00b67f09SDavid van Moolenbroek    create_helper timeout_forkexit
1071*00b67f09SDavid van Moolenbroek    create_atffile helper
1072*00b67f09SDavid van Moolenbroek
1073*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o match:"${TESTCASE}, passed" -e ignore atf-run \
1074*00b67f09SDavid van Moolenbroek        -v statedir=$(pwd) helper
1075*00b67f09SDavid van Moolenbroek    test -f parent-finished || atf_fail "Parent did not exit as expected"
1076*00b67f09SDavid van Moolenbroek    test -f child-finished && atf_fail "Subprocess exited but it should have" \
1077*00b67f09SDavid van Moolenbroek        "been forcibly terminated" || true
1078*00b67f09SDavid van Moolenbroek}
1079*00b67f09SDavid van Moolenbroek
1080*00b67f09SDavid van Moolenbroekatf_test_case ignore_deprecated_use_fs
1081*00b67f09SDavid van Moolenbroekignore_deprecated_use_fs_head()
1082*00b67f09SDavid van Moolenbroek{
1083*00b67f09SDavid van Moolenbroek    atf_set "descr" "Tests that atf-run ignores the deprecated use.fs property"
1084*00b67f09SDavid van Moolenbroek}
1085*00b67f09SDavid van Moolenbroekignore_deprecated_use_fs_body()
1086*00b67f09SDavid van Moolenbroek{
1087*00b67f09SDavid van Moolenbroek    create_helper use_fs
1088*00b67f09SDavid van Moolenbroek    create_atffile helper
1089*00b67f09SDavid van Moolenbroek
1090*00b67f09SDavid van Moolenbroek    atf_check -s eq:0 -o ignore -e ignore atf-run helper
1091*00b67f09SDavid van Moolenbroek}
1092*00b67f09SDavid van Moolenbroek
1093*00b67f09SDavid van Moolenbroekatf_init_test_cases()
1094*00b67f09SDavid van Moolenbroek{
1095*00b67f09SDavid van Moolenbroek    atf_add_test_case no_warnings
1096*00b67f09SDavid van Moolenbroek    atf_add_test_case config
1097*00b67f09SDavid van Moolenbroek    atf_add_test_case vflag
1098*00b67f09SDavid van Moolenbroek    atf_add_test_case atffile
1099*00b67f09SDavid van Moolenbroek    atf_add_test_case atffile_recursive
1100*00b67f09SDavid van Moolenbroek    atf_add_test_case expect
1101*00b67f09SDavid van Moolenbroek    atf_add_test_case fds
1102*00b67f09SDavid van Moolenbroek    atf_add_test_case mux_streams
1103*00b67f09SDavid van Moolenbroek    atf_add_test_case missing_results
1104*00b67f09SDavid van Moolenbroek    atf_add_test_case broken_results
1105*00b67f09SDavid van Moolenbroek    atf_add_test_case broken_tp_list
1106*00b67f09SDavid van Moolenbroek    atf_add_test_case zero_tcs
1107*00b67f09SDavid van Moolenbroek    atf_add_test_case exit_codes
1108*00b67f09SDavid van Moolenbroek    atf_add_test_case signaled
1109*00b67f09SDavid van Moolenbroek    atf_add_test_case hooks
1110*00b67f09SDavid van Moolenbroek    atf_add_test_case isolation_env
1111*00b67f09SDavid van Moolenbroek    atf_add_test_case isolation_home
1112*00b67f09SDavid van Moolenbroek    atf_add_test_case isolation_stdin
1113*00b67f09SDavid van Moolenbroek    atf_add_test_case isolation_umask
1114*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_pass
1115*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_fail
1116*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_skip
1117*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_curdir
1118*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_signal
1119*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_mount
1120*00b67f09SDavid van Moolenbroek    atf_add_test_case cleanup_symlink
1121*00b67f09SDavid van Moolenbroek    atf_add_test_case require_arch
1122*00b67f09SDavid van Moolenbroek    atf_add_test_case require_config
1123*00b67f09SDavid van Moolenbroek    atf_add_test_case require_files
1124*00b67f09SDavid van Moolenbroek    atf_add_test_case require_machine
1125*00b67f09SDavid van Moolenbroek    atf_add_test_case require_progs
1126*00b67f09SDavid van Moolenbroek    atf_add_test_case require_user_root
1127*00b67f09SDavid van Moolenbroek    atf_add_test_case require_user_unprivileged
1128*00b67f09SDavid van Moolenbroek    atf_add_test_case require_user_bad
1129*00b67f09SDavid van Moolenbroek    atf_add_test_case timeout
1130*00b67f09SDavid van Moolenbroek    atf_add_test_case timeout_forkexit
1131*00b67f09SDavid van Moolenbroek    atf_add_test_case ignore_deprecated_use_fs
1132*00b67f09SDavid van Moolenbroek}
1133*00b67f09SDavid van Moolenbroek
1134*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
1135