tee: add some basic tests

The cases are ordered in such a way that we naturally progress through
the functionality, with the earliest failures perhaps shedding light on
any later failures.

sysutils/porch is used for one test if it's available, just to cleanly
check that SIGINT is being ignored properly.

Reviewed by:	des, emaste

(cherry picked from commit 85ff0b08ee699ff323404727998993275b4d2e2a)
This commit is contained in:
Kyle Evans 2025-04-20 11:34:50 -05:00
parent ba560cd8fb
commit 00640ea314
5 changed files with 101 additions and 0 deletions

View file

@ -1147,6 +1147,8 @@
..
tar
..
tee
..
tftp
..
touch

View file

@ -1,5 +1,10 @@
# @(#)Makefile 8.1 (Berkeley) 6/6/93
.include <src.opts.mk>
PROG= tee
HAS_TESTS=
SUBDIR.${MK_TESTS}+= tests
.include <bsd.prog.mk>

View file

@ -0,0 +1,6 @@
PACKAGE= tests
ATF_TESTS_SH+= tee_test
${PACKAGE}FILES+= sigint.orch
.include <bsd.test.mk>

View file

@ -0,0 +1,14 @@
-- We expect the caller to have spawned the appropriate application
write "text\r"
match "text"
write "^C"
-- If SIGINT isn't being ignored, we'll bail out somewhere in the process of
-- writing to the pty or trying to read from it to perform the following match.
write "text\r"
match "text"
-- Finally, just close it out cleanly.
write "^D"
eof()

View file

@ -0,0 +1,74 @@
#
# Copyright (c) 2024 Kyle Evans <kevans@FreeBSD.org>
#
# SPDX-License-Identifier: BSD-2-Clause
#
atf_test_case single_file
single_file_body()
{
atf_check -o inline:"text\n" -x "echo text | tee file"
atf_check -o inline:"text\n" cat file
}
atf_test_case device
device_body()
{
atf_check -e inline:"text\n" -o inline:"text\n" -x \
"echo text | tee /dev/stderr"
}
atf_test_case multiple_file
multiple_file_body()
{
atf_check -o inline:"text\n" -x "echo text | tee file1 file2"
atf_check -o inline:"text\n" cat file1
atf_check -o inline:"text\n" cat file2
}
atf_test_case append
append_body()
{
atf_check -o ignore -x "echo text | tee file"
atf_check -o inline:"text\n" cat file
# Should overwrite if done again
atf_check -o ignore -x "echo text | tee file"
atf_check -o inline:"text\n" cat file
# Should duplicate if we use -a
atf_check -o ignore -x "echo text | tee -a file"
atf_check -o inline:"text\ntext\n" cat file
}
atf_test_case sigint_ignored
sigint_ignored_head()
{
# This is most cleanly tested with interactive input, to avoid adding
# a lot of complexity in trying to manage an input and signal delivery
# dance purely in shell.
atf_set "require.progs" "porch"
}
sigint_ignored_body()
{
# sigint.orch will write "text" to the file twice if we're properly
# ignoring SIGINT, so we'll do one test to confirm that SIGINT is not
# being ignored by porch(1), then another to confirm that tee(1) will
# ignore SIGINT when instructed to.
atf_check -s exit:1 -e ignore \
porch -f $(atf_get_srcdir)/sigint.orch tee file
atf_check -o inline:"text\n" cat file
atf_check porch -f $(atf_get_srcdir)/sigint.orch tee -i file
atf_check -o inline:"text\ntext\n" cat file
}
atf_init_test_cases()
{
atf_add_test_case single_file
atf_add_test_case device
atf_add_test_case multiple_file
atf_add_test_case append
atf_add_test_case sigint_ignored
}