Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/atf/atf-sh/atf-check_test.sh
39482 views
1
# Copyright (c) 2008 The NetBSD Foundation, Inc.
2
# All rights reserved.
3
#
4
# Redistribution and use in source and binary forms, with or without
5
# modification, are permitted provided that the following conditions
6
# are met:
7
# 1. Redistributions of source code must retain the above copyright
8
# notice, this list of conditions and the following disclaimer.
9
# 2. Redistributions in binary form must reproduce the above copyright
10
# notice, this list of conditions and the following disclaimer in the
11
# documentation and/or other materials provided with the distribution.
12
#
13
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
14
# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
15
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17
# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
18
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
20
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
22
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
24
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26
# The Atf_Check and Atf-Shell variables are set by atf-sh.
27
28
h_pass()
29
{
30
cmd="$1"; shift
31
32
echo "Running [atf-check $*] against [${cmd}]"
33
34
cat >script.sh <<EOF
35
#! ${Atf_Shell}
36
${cmd}
37
EOF
38
chmod +x script.sh
39
40
if ! ${Atf_Check} "${@}" ./script.sh >tmp; then
41
cat tmp
42
atf_fail "atf-check failed"
43
fi
44
}
45
46
h_fail()
47
{
48
cmd="$1"; shift
49
50
echo "Running [atf-check $*] against [${cmd}]"
51
52
cat >script.sh <<EOF
53
#! ${Atf_Shell}
54
${cmd}
55
EOF
56
chmod +x script.sh
57
58
if ${Atf_Check} "${@}" ./script.sh 2>tmp; then
59
cat tmp
60
atf_fail "atf-check succeeded but should fail"
61
fi
62
}
63
64
atf_test_case sflag_eq_ne
65
sflag_eq_ne_head()
66
{
67
atf_set "descr" "Tests for the -s option using the 'eq' and 'ne' qualifiers"
68
}
69
sflag_eq_ne_body()
70
{
71
h_pass "true" -s eq:0
72
h_pass "false" -s ne:0
73
h_pass "exit 255" -s eq:255
74
h_pass "exit 0" -s ne:255
75
76
h_fail "exit 256" -s eq:256
77
h_fail "exit -1" -s eq:-1
78
h_fail "true" -s ne:256
79
h_fail "true" -s ne:-1
80
}
81
82
atf_test_case sflag_exit
83
sflag_exit_head()
84
{
85
atf_set "descr" "Tests for the -s option using the 'exit' qualifier"
86
}
87
sflag_exit_body()
88
{
89
h_pass 'true' -s exit:0
90
h_pass 'false' -s not-exit:0
91
h_pass 'exit 255' -s exit:255
92
h_pass 'exit 0' -s not-exit:255
93
94
h_fail 'exit 256' -s exit:256
95
h_fail 'exit -1' -s exit:-1
96
h_fail 'true' -s not-exit:256
97
h_fail 'true' -s not-exit:-1
98
99
h_pass 'true' -s exit
100
h_pass 'false' -s exit
101
if ${Atf_Check} -s exit -x 'kill $$'; then
102
atf_fail "Signal detected as clean exit"
103
fi
104
}
105
106
atf_test_case sflag_ignore
107
sflag_ignore_head()
108
{
109
atf_set "descr" "Tests for the -s option using the 'ignore' qualifier"
110
}
111
sflag_ignore_body()
112
{
113
h_pass 'true' -s ignore
114
h_pass 'false' -s ignore
115
if ${Atf_Check} -s ignored -x 'kill $$'; then
116
atf_fail "Signal not ignored"
117
fi
118
}
119
120
atf_test_case sflag_signal
121
sflag_signal_head()
122
{
123
atf_set "descr" "Tests for the -s option using the 'signal' qualifier"
124
}
125
sflag_signal_body()
126
{
127
${Atf_Check} -s signal:hup -x 'kill -1 $$' || atf_fail "Signal not detected"
128
${Atf_Check} -s signal:sighup -x 'kill -1 $$' || atf_fail "Signal not" \
129
"detected"
130
${Atf_Check} -s signal:1 -x 'kill -1 $$' || atf_fail "Signal not detected"
131
${Atf_Check} -s signal -x 'kill -1 $$' || atf_fail "Signal not detected"
132
133
${Atf_Check} -s not-signal:kill -x 'kill -9 $$' && \
134
atf_fail "not-signal:kill matched kill -9"
135
${Atf_Check} -s not-signal:kill -x 'kill -1 $$' || \
136
atf_fail "not-signal:kill did not match kill -1"
137
138
h_fail 'true' -s signal
139
h_fail 'false' -s signal
140
}
141
142
atf_test_case xflag
143
xflag_head()
144
{
145
atf_set "descr" "Tests for the -x option"
146
}
147
xflag_body()
148
{
149
${Atf_Check} -s ne:0 -o ignore -e ignore "echo foo 2>&1" || \
150
atf_fail "Shell command succeeded without -x"
151
152
${Atf_Check} -e inline:"foo\n" -x "echo foo 1>&2" || \
153
atf_fail "Cannot run command with -x"
154
155
${Atf_Check} -o inline:"foo\n" -x echo foo || \
156
atf_fail "Using -x does not respect all provided arguments"
157
}
158
159
atf_test_case oflag_empty
160
oflag_empty_head()
161
{
162
atf_set "descr" "Tests for the -o option using the 'empty' argument"
163
}
164
oflag_empty_body()
165
{
166
h_pass "true" -o empty
167
h_fail "echo foo" -o empty
168
}
169
170
atf_test_case oflag_ignore
171
oflag_ignore_head()
172
{
173
atf_set "descr" "Tests for the -o option using the 'ignore' argument"
174
}
175
oflag_ignore_body()
176
{
177
h_pass "true" -o ignore
178
h_pass "echo foo" -o ignore
179
}
180
181
atf_test_case oflag_file
182
oflag_file_head()
183
{
184
atf_set "descr" "Tests for the -o option using the 'file:' argument"
185
}
186
oflag_file_body()
187
{
188
touch empty
189
h_pass "true" -o file:empty
190
191
echo foo >text
192
h_pass "echo foo" -o file:text
193
h_fail "echo bar" -o file:text
194
195
dd if=/dev/urandom of=bin bs=1k count=10
196
h_pass "cat bin" -o file:bin
197
}
198
199
atf_test_case oflag_inline
200
oflag_inline_head()
201
{
202
atf_set "descr" "Tests for the -o option using the 'inline:' argument"
203
}
204
oflag_inline_body()
205
{
206
h_pass "true" -o inline:
207
h_pass "echo foo bar" -o inline:"foo bar\n"
208
h_pass "printf 'foo bar'" -o inline:"foo bar"
209
h_pass "printf '\t\n\t\n'" -o inline:"\t\n\t\n"
210
h_pass "printf '\a\b\033\f\n\r\t\v'" -o inline:"\a\b\e\f\n\r\t\v"
211
h_pass "printf '\011\022\033\012'" -o inline:"\011\022\033\012"
212
213
h_fail "echo foo bar" -o inline:"foo bar"
214
h_fail "echo -n foo bar" -o inline:"foo bar\n"
215
}
216
217
atf_test_case oflag_match
218
oflag_match_head()
219
{
220
atf_set "descr" "Tests for the -o option using the 'match:' argument"
221
}
222
oflag_match_body()
223
{
224
h_pass "printf no-newline" -o "match:^no-newline"
225
h_pass "echo line1; echo foo bar" -o "match:^foo"
226
h_pass "echo foo bar" -o "match:o b"
227
h_fail "echo foo bar" -o "match:baz"
228
h_fail "echo foo bar" -o "match:^bar"
229
}
230
231
atf_test_case oflag_save
232
oflag_save_head()
233
{
234
atf_set "descr" "Tests for the -o option using the 'save:' argument"
235
}
236
oflag_save_body()
237
{
238
h_pass "echo foo" -o save:out
239
echo foo >exp
240
cmp -s out exp || atf_fail "Saved output does not match expected results"
241
}
242
243
atf_test_case oflag_multiple
244
oflag_multiple_head()
245
{
246
atf_set "descr" "Tests for multiple occurrences of the -o option"
247
}
248
oflag_multiple_body()
249
{
250
h_pass "echo foo bar" -o match:foo -o match:bar
251
h_pass "echo foo; echo bar" -o match:foo -o match:bar
252
h_fail "echo foo baz" -o match:bar -o match:foo
253
h_fail "echo foo; echo baz" -o match:bar -o match:foo
254
}
255
256
atf_test_case oflag_negated
257
oflag_negated_head()
258
{
259
atf_set "descr" "Tests for negated occurrences of the -o option"
260
}
261
oflag_negated_body()
262
{
263
h_fail "echo foo" -o empty
264
h_pass "echo foo" -o not-empty
265
266
h_pass "echo foo bar" -o match:foo
267
h_fail "echo foo bar" -o not-match:foo
268
}
269
270
atf_test_case eflag_empty
271
eflag_empty_head()
272
{
273
atf_set "descr" "Tests for the -e option using the 'empty' argument"
274
}
275
eflag_empty_body()
276
{
277
h_pass "true 1>&2" -e empty
278
h_fail "echo foo 1>&2" -e empty
279
}
280
281
atf_test_case eflag_ignore
282
eflag_ignore_head()
283
{
284
atf_set "descr" "Tests for the -e option using the 'ignore' argument"
285
}
286
eflag_ignore_body()
287
{
288
h_pass "true 1>&2" -e ignore
289
h_pass "echo foo 1>&2" -e ignore
290
}
291
292
atf_test_case eflag_file
293
eflag_file_head()
294
{
295
atf_set "descr" "Tests for the -e option using the 'file:' argument"
296
}
297
eflag_file_body()
298
{
299
touch empty
300
h_pass "true 1>&2" -e file:empty
301
302
echo foo >text
303
h_pass "echo foo 1>&2" -e file:text
304
h_fail "echo bar 1>&2" -e file:text
305
306
dd if=/dev/urandom of=bin bs=1k count=10
307
h_pass "cat bin 1>&2" -e file:bin
308
}
309
310
atf_test_case eflag_inline
311
eflag_inline_head()
312
{
313
atf_set "descr" "Tests for the -e option using the 'inline:' argument"
314
}
315
eflag_inline_body()
316
{
317
h_pass "true 1>&2" -e inline:
318
h_pass "echo foo bar 1>&2" -e inline:"foo bar\n"
319
h_pass "printf 'foo bar' 1>&2" -e inline:"foo bar"
320
h_pass "printf '\t\n\t\n' 1>&2" -e inline:"\t\n\t\n"
321
h_pass "printf '\a\b\033\f\n\r\t\v' 1>&2" -e inline:"\a\b\e\f\n\r\t\v"
322
h_pass "printf '\011\022\033\012' 1>&2" -e inline:"\011\022\033\012"
323
324
h_fail "echo foo bar 1>&2" -e inline:"foo bar"
325
h_fail "echo -n foo bar 1>&2" -e inline:"foo bar\n"
326
}
327
328
atf_test_case eflag_save
329
eflag_save_head()
330
{
331
atf_set "descr" "Tests for the -e option using the 'save:' argument"
332
}
333
eflag_save_body()
334
{
335
h_pass "echo foo 1>&2" -e save:out
336
echo foo >exp
337
cmp -s out exp || atf_fail "Saved output does not match expected results"
338
}
339
340
atf_test_case eflag_match
341
eflag_match_head()
342
{
343
atf_set "descr" "Tests for the -e option using the 'match:' argument"
344
}
345
eflag_match_body()
346
{
347
h_pass "printf no-newline 1>&2" -e "match:^no-newline"
348
h_pass "echo line1 1>&2; echo foo bar 1>&2" -e "match:^foo"
349
h_pass "echo foo bar 1>&2" -e "match:o b"
350
h_fail "echo foo bar 1>&2" -e "match:baz"
351
h_fail "echo foo bar 1>&2" -e "match:^bar"
352
}
353
354
atf_test_case eflag_multiple
355
eflag_multiple_head()
356
{
357
atf_set "descr" "Tests for multiple occurrences of the -e option"
358
}
359
eflag_multiple_body()
360
{
361
h_pass "echo foo bar 1>&2" -e match:foo -e match:bar
362
h_pass "echo foo 1>&2; echo bar 1>&2" -e match:foo -e match:bar
363
h_fail "echo foo baz 1>&2" -e match:bar -e match:foo
364
h_fail "echo foo 1>&2; echo baz 1>&2" -e match:bar -e match:foo
365
}
366
367
atf_test_case eflag_negated
368
eflag_negated_head()
369
{
370
atf_set "descr" "Tests for negated occurrences of the -e option"
371
}
372
eflag_negated_body()
373
{
374
h_fail "echo foo 1>&2" -e empty
375
h_pass "echo foo 1>&2" -e not-empty
376
377
h_pass "echo foo bar 1>&2" -e match:foo
378
h_fail "echo foo bar 1>&2" -e not-match:foo
379
}
380
381
atf_test_case stdin
382
stdin_head()
383
{
384
atf_set "descr" "Tests that stdin is preserved"
385
}
386
stdin_body()
387
{
388
echo "hello" | ${Atf_Check} -o match:"hello" cat || \
389
atf_fail "atf-check does not seem to respect stdin"
390
}
391
392
atf_test_case unusual_umask
393
unusual_umask_head()
394
{
395
atf_set "descr" "Tests that atf-check doesn't care about unusual umasks"
396
}
397
unusual_umask_body()
398
{
399
for mask in 022 027 0222 0177 0777 ; do
400
umask $mask
401
${Atf_Check} true || \
402
atf_fail "atf-check failed with umask $mask"
403
done
404
umask 022
405
}
406
407
atf_init_test_cases()
408
{
409
atf_add_test_case sflag_eq_ne
410
atf_add_test_case sflag_exit
411
atf_add_test_case sflag_ignore
412
atf_add_test_case sflag_signal
413
414
atf_add_test_case xflag
415
416
atf_add_test_case oflag_empty
417
atf_add_test_case oflag_ignore
418
atf_add_test_case oflag_file
419
atf_add_test_case oflag_inline
420
atf_add_test_case oflag_match
421
atf_add_test_case oflag_save
422
atf_add_test_case oflag_multiple
423
atf_add_test_case oflag_negated
424
425
atf_add_test_case eflag_empty
426
atf_add_test_case eflag_ignore
427
atf_add_test_case eflag_file
428
atf_add_test_case eflag_inline
429
atf_add_test_case eflag_match
430
atf_add_test_case eflag_save
431
atf_add_test_case eflag_multiple
432
atf_add_test_case eflag_negated
433
434
atf_add_test_case stdin
435
436
atf_add_test_case unusual_umask
437
}
438
439
# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
440
441