From nobody Sun Apr 20 16:35:46 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZgYyp2tNfz5tKfV; Sun, 20 Apr 2025 16:35:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZgYyp1lBHz4D4Z; Sun, 20 Apr 2025 16:35:46 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745166946; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Lao7U7HdnhYnIln4JT1bngqEboFokcrf4GbR7QUapHM=; b=v+dKRFIyUp27IQea4Fd5+kfl5KZXpGhs8/nwIk4H1YNgRX0XcKOcvg1efxnLgjz6ZeAsFL 0q0hZnlkmmCBuZ6+qmQsWrHzZkzbORGDq9cxW3ArssPUM1+lGQJFzCTLtKV4remHBCZ7gR 3VXTnIjfS7bDl6DNL/1ClIO6RatnxvGBG7pYqhVUGSk6HmlHQ8531HFuWx47HQ77NPHJTS 6uUaggoziTVyLeEuxzbX2Qe6X/b/rs5lXIcK9nxhg3ohwzzFyCIASDjBaxQsiMGTfz1r+F rqUtMevO42xxJTyJHxzN+uy9nrticPkzl+fGIJKsYVEm1rkGidf5P45xvAsUAA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745166946; a=rsa-sha256; cv=none; b=N65VJzBDaED4cEh306uugwLQz4bCvFAbtrFPPB16SE9+d/KIYUsFhYF9Qwt+KyBjRNX7cW gBub0O614A2RddnalQlZljsiA9iOAi5GHiZGI3NfnlrSwNrrGHqr0/Hit/DO3YUxWU6lps rRvue1qzbiqXwlf2d6iY3W3f4BwtgdTwELDfwWMBp3qRaYqCio0GTHAjn2r6K2k7gk1zJX cYF968fQhe46Gvk5rinFZpWq+kQjbZu4BbIP492k8tzY3CK1wr87Juki4zvYM8NVeD5Cp6 vglDN4QqzBnNdLThG7UxaZ8pTVV6NlOx8XBhtOq4oRnNVRxPtBB1cOIxyUINfw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745166946; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Lao7U7HdnhYnIln4JT1bngqEboFokcrf4GbR7QUapHM=; b=ECWTYaaZVj3mpZpCqBNfM/6rNlmiyor+7neH/c88Rfxvmv8WbWDicYAXkc/z4eg09fVZ2p H3RmiRpXSJZSXrwd7oQ6ZXDUKokC0BZsbZlBj6xE9OBXhCl8JA6EThLgMJ6K5sJ0Kbd+5g Vgj9qQ5il92UHot4RGaPecf4Zk3rIAbzTB3sYe1r3ed4TyDRQMSVK3OcGGzYbOtJ3S/1hq 9o7l9jUDeiGXLDKlPuiVBYOwPzIKdLIieLDDnRC3swtPk7Y2/RPTJHXpl5qTr/L/m0oQs4 uvphwQzEXfHtTGmF4qs9cBgzTuTyAhPumhC69LhkQas9XbkYsPqSX/vtvPLWbA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZgYyp1HVyz1B2j; Sun, 20 Apr 2025 16:35:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 53KGZk6r004691; Sun, 20 Apr 2025 16:35:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53KGZkAj004688; Sun, 20 Apr 2025 16:35:46 GMT (envelope-from git) Date: Sun, 20 Apr 2025 16:35:46 GMT Message-Id: <202504201635.53KGZkAj004688@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 85ff0b08ee69 - main - tee: add some basic tests List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 85ff0b08ee699ff323404727998993275b4d2e2a Auto-Submitted: auto-generated The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=85ff0b08ee699ff323404727998993275b4d2e2a commit 85ff0b08ee699ff323404727998993275b4d2e2a Author: Kyle Evans AuthorDate: 2025-04-20 16:34:50 +0000 Commit: Kyle Evans CommitDate: 2025-04-20 16:35:32 +0000 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 Differential Revision: https://reviews.freebsd.org/D48195 --- etc/mtree/BSD.tests.dist | 2 ++ usr.bin/tee/Makefile | 5 +++ usr.bin/tee/tests/Makefile | 6 ++++ usr.bin/tee/tests/sigint.orch | 14 ++++++++ usr.bin/tee/tests/tee_test.sh | 74 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+) diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist index f197021bd4e9..20744e7b944a 100644 --- 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 index ab7b93575967..1e5781bef4da 100644 --- a/usr.bin/tee/Makefile +++ b/usr.bin/tee/Makefile @@ -1,3 +1,8 @@ +.include + PROG= tee +HAS_TESTS= +SUBDIR.${MK_TESTS}+= tests + .include diff --git a/usr.bin/tee/tests/Makefile b/usr.bin/tee/tests/Makefile new file mode 100644 index 000000000000..acb78e671a8c --- /dev/null +++ b/usr.bin/tee/tests/Makefile @@ -0,0 +1,6 @@ +PACKAGE= tests + +ATF_TESTS_SH+= tee_test +${PACKAGE}FILES+= sigint.orch + +.include diff --git a/usr.bin/tee/tests/sigint.orch b/usr.bin/tee/tests/sigint.orch new file mode 100644 index 000000000000..2fc0b32c61fb --- /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 index 000000000000..6ac733f2e58f --- /dev/null +++ b/usr.bin/tee/tests/tee_test.sh @@ -0,0 +1,74 @@ +# +# Copyright (c) 2024 Kyle Evans +# +# 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 +}