Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F101993578
D44505.id136212.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D44505.id136212.diff
View Options
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,156 @@
+#
+# 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
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 7, 7:36 AM (16 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14506939
Default Alt Text
D44505.id136212.diff (4 KB)
Attached To
Mode
D44505: touch: Add unit tests.
Attached
Detach File
Event Timeline
Log In to Comment