Page MenuHomeFreeBSD

D48195.id153964.diff
No OneTemporary

D48195.id153964.diff

diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist
--- a/etc/mtree/BSD.tests.dist
+++ b/etc/mtree/BSD.tests.dist
@@ -1207,6 +1207,8 @@
..
tar
..
+ tee
+ ..
tftp
..
touch
diff --git a/usr.bin/tee/Makefile b/usr.bin/tee/Makefile
--- a/usr.bin/tee/Makefile
+++ b/usr.bin/tee/Makefile
@@ -1,3 +1,8 @@
+.include <src.opts.mk>
+
PROG= tee
+HAS_TESTS=
+SUBDIR.${MK_TESTS}+= tests
+
.include <bsd.prog.mk>
diff --git a/usr.bin/tee/tests/Makefile b/usr.bin/tee/tests/Makefile
new file mode 100644
--- /dev/null
+++ b/usr.bin/tee/tests/Makefile
@@ -0,0 +1,6 @@
+PACKAGE= tests
+
+ATF_TESTS_SH+= tee_test
+${PACKAGE}FILES+= sigint.orch
+
+.include <bsd.test.mk>
diff --git a/usr.bin/tee/tests/sigint.orch b/usr.bin/tee/tests/sigint.orch
new file mode 100644
--- /dev/null
+++ b/usr.bin/tee/tests/sigint.orch
@@ -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()
diff --git a/usr.bin/tee/tests/tee_test.sh b/usr.bin/tee/tests/tee_test.sh
new file mode 100644
--- /dev/null
+++ b/usr.bin/tee/tests/tee_test.sh
@@ -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
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Oct 24, 3:30 AM (11 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24116495
Default Alt Text
D48195.id153964.diff (3 KB)

Event Timeline