Page MenuHomeFreeBSD

D44505.diff
No OneTemporary

D44505.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
@@ -1187,6 +1187,8 @@
..
tftp
..
+ touch
+ ..
tr
..
truncate
diff --git a/usr.bin/touch/Makefile b/usr.bin/touch/Makefile
--- a/usr.bin/touch/Makefile
+++ b/usr.bin/touch/Makefile
@@ -1,4 +1,7 @@
+.include <src.opts.mk>
PROG= touch
+HAS_TESTS=
+SUBDIR.${MK_TESTS}= tests
.include <bsd.prog.mk>
diff --git a/usr.bin/touch/tests/Makefile b/usr.bin/touch/tests/Makefile
new file mode 100644
--- /dev/null
+++ b/usr.bin/touch/tests/Makefile
@@ -0,0 +1,4 @@
+PACKAGE= tests
+ATF_TESTS_SH= touch_test
+
+.include <bsd.test.mk>
diff --git a/usr.bin/touch/tests/touch_test.sh b/usr.bin/touch/tests/touch_test.sh
new file mode 100644
--- /dev/null
+++ b/usr.bin/touch/tests/touch_test.sh
@@ -0,0 +1,157 @@
+#
+# Copyright (c) 2024 Dag-Erling Smørgrav
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+export TZ=UTC
+
+atf_check_mtime()
+{
+ local mtime=$1 filename=$2
+ atf_check -o inline:"$((mtime))\n" stat -f%m "$filename"
+}
+
+atf_test_case touch_none
+touch_none_head()
+{
+ atf_set descr "No arguments"
+}
+touch_none_body()
+{
+ atf_check -s exit:1 -e match:"^usage" touch
+}
+
+atf_test_case touch_one
+touch_one_head()
+{
+ atf_set descr "One argument"
+}
+touch_one_body()
+{
+ atf_check touch foo
+ atf_check test -f foo
+}
+
+atf_test_case touch_multiple
+touch_multiple_head()
+{
+ atf_set descr "Multiple arguments"
+}
+touch_multiple_body()
+{
+ atf_check touch foo bar baz
+ atf_check test -f foo -a -f bar -a -f baz
+}
+
+atf_test_case touch_absolute
+touch_absolute_head()
+{
+ atf_set descr "Absolute date / time"
+}
+touch_absolute_body()
+{
+ atf_check touch -t 7001010101 foo
+ atf_check_mtime 3660 foo
+ atf_check rm foo
+
+ atf_check touch -t 7001010101.01 foo
+ atf_check_mtime 3661 foo
+ atf_check rm foo
+
+ atf_check touch -t 196912312359 foo
+ atf_check_mtime -60 foo
+ atf_check rm foo
+
+ atf_check touch -t 196912312359.58 foo
+ atf_check_mtime -2 foo
+ atf_check rm foo
+
+ atf_check touch -t 196912312359.59 foo
+ atf_expect_fail "VFS interprets -1 as “do not set”"
+ atf_check_mtime -1 foo
+ atf_check rm foo
+
+ atf_check touch -d1969-12-31T23:59:58 foo
+ atf_check_mtime -2 foo
+ atf_check rm foo
+
+ atf_check touch -d1969-12-31\ 23:59:58 foo
+ atf_check_mtime -2 foo
+ atf_check rm foo
+
+ atf_check env TZ=CET touch -d1970-01-01T00:59:58 foo
+ atf_check_mtime -2 foo
+ atf_check rm foo
+
+ atf_check env TZ=CET touch -d1970-01-01T00:59:58Z foo
+ atf_check_mtime 3598 foo
+ atf_check rm foo
+
+ atf_check touch -d1969-12-31T23:59:59Z foo
+ atf_expect_fail "VFS interprets -1 as “do not set”"
+ atf_check_mtime -1 foo
+ atf_check rm foo
+}
+
+atf_test_case touch_relative
+touch_relative_head()
+{
+ atf_set descr "Relative date / time"
+}
+touch_relative_body()
+{
+ atf_check touch -t 202403241234.56 foo
+ atf_check_mtime 1711283696 foo
+ atf_check touch -A -36 foo
+ atf_check_mtime 1711283660 foo
+ atf_check touch -A -0100 foo
+ atf_check_mtime 1711283600 foo
+ atf_check touch -A -010000 foo
+ atf_check_mtime 1711280000 foo
+ atf_check touch -A 010136 foo
+ atf_check_mtime 1711283696 foo
+}
+
+atf_test_case touch_copy
+touch_copy_head()
+{
+ atf_set descr "Copy time from another file"
+}
+touch_copy_body()
+{
+ atf_check touch -t 202403241234.56 foo
+ atf_check_mtime 1711283696 foo
+ atf_check touch -t 7001010000 bar
+ atf_check_mtime 0 bar
+ atf_check touch -r foo bar
+ atf_check_mtime 1711283696 bar
+}
+
+atf_test_case touch_nocreate
+touch_nocreate_head()
+{
+ atf_set descr "Do not create file"
+}
+touch_nocreate_body()
+{
+ atf_check touch -t 202403241234.56 foo
+ atf_check_mtime 1711283696 foo
+ atf_check touch -c -t 7001010000 foo bar
+ atf_check_mtime 0 foo
+ atf_check -s exit:1 test -f bar
+ atf_check touch -c bar
+ atf_check -s exit:1 test -f bar
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case touch_none
+ atf_add_test_case touch_one
+ atf_add_test_case touch_multiple
+ atf_add_test_case touch_absolute
+ atf_add_test_case touch_relative
+ atf_add_test_case touch_copy
+ atf_add_test_case touch_nocreate
+ # TODO: add test cases for -a, -h, -m
+}

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 7, 7:30 AM (16 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14506855
Default Alt Text
D44505.diff (4 KB)

Event Timeline