xref: /freebsd/usr.bin/touch/tests/touch_test.sh (revision 74a4aa9b1517d92bfa85b0b1cd7d4c1262bb1ef9)
1*74a4aa9bSDag-Erling Smørgrav#
2*74a4aa9bSDag-Erling Smørgrav# Copyright (c) 2024 Dag-Erling Smørgrav
3*74a4aa9bSDag-Erling Smørgrav#
4*74a4aa9bSDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause
5*74a4aa9bSDag-Erling Smørgrav#
6*74a4aa9bSDag-Erling Smørgrav
7*74a4aa9bSDag-Erling Smørgravexport TZ=UTC
8*74a4aa9bSDag-Erling Smørgrav
9*74a4aa9bSDag-Erling Smørgravatf_check_mtime()
10*74a4aa9bSDag-Erling Smørgrav{
11*74a4aa9bSDag-Erling Smørgrav	local mtime=$1 filename=$2
12*74a4aa9bSDag-Erling Smørgrav	atf_check -o inline:"$((mtime))\n" stat -f%m "$filename"
13*74a4aa9bSDag-Erling Smørgrav}
14*74a4aa9bSDag-Erling Smørgrav
15*74a4aa9bSDag-Erling Smørgravatf_test_case touch_none
16*74a4aa9bSDag-Erling Smørgravtouch_none_head()
17*74a4aa9bSDag-Erling Smørgrav{
18*74a4aa9bSDag-Erling Smørgrav	atf_set descr "No arguments"
19*74a4aa9bSDag-Erling Smørgrav}
20*74a4aa9bSDag-Erling Smørgravtouch_none_body()
21*74a4aa9bSDag-Erling Smørgrav{
22*74a4aa9bSDag-Erling Smørgrav	atf_check -s exit:1 -e match:"^usage" touch
23*74a4aa9bSDag-Erling Smørgrav}
24*74a4aa9bSDag-Erling Smørgrav
25*74a4aa9bSDag-Erling Smørgravatf_test_case touch_one
26*74a4aa9bSDag-Erling Smørgravtouch_one_head()
27*74a4aa9bSDag-Erling Smørgrav{
28*74a4aa9bSDag-Erling Smørgrav	atf_set descr "One argument"
29*74a4aa9bSDag-Erling Smørgrav}
30*74a4aa9bSDag-Erling Smørgravtouch_one_body()
31*74a4aa9bSDag-Erling Smørgrav{
32*74a4aa9bSDag-Erling Smørgrav	atf_check touch foo
33*74a4aa9bSDag-Erling Smørgrav	atf_check test -f foo
34*74a4aa9bSDag-Erling Smørgrav}
35*74a4aa9bSDag-Erling Smørgrav
36*74a4aa9bSDag-Erling Smørgravatf_test_case touch_multiple
37*74a4aa9bSDag-Erling Smørgravtouch_multiple_head()
38*74a4aa9bSDag-Erling Smørgrav{
39*74a4aa9bSDag-Erling Smørgrav	atf_set descr "Multiple arguments"
40*74a4aa9bSDag-Erling Smørgrav}
41*74a4aa9bSDag-Erling Smørgravtouch_multiple_body()
42*74a4aa9bSDag-Erling Smørgrav{
43*74a4aa9bSDag-Erling Smørgrav	atf_check touch foo bar baz
44*74a4aa9bSDag-Erling Smørgrav	atf_check test -f foo -a -f bar -a -f baz
45*74a4aa9bSDag-Erling Smørgrav}
46*74a4aa9bSDag-Erling Smørgrav
47*74a4aa9bSDag-Erling Smørgravatf_test_case touch_absolute
48*74a4aa9bSDag-Erling Smørgravtouch_absolute_head()
49*74a4aa9bSDag-Erling Smørgrav{
50*74a4aa9bSDag-Erling Smørgrav	atf_set descr "Absolute date / time"
51*74a4aa9bSDag-Erling Smørgrav}
52*74a4aa9bSDag-Erling Smørgravtouch_absolute_body()
53*74a4aa9bSDag-Erling Smørgrav{
54*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 7001010101 foo
55*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 3660 foo
56*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
57*74a4aa9bSDag-Erling Smørgrav
58*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 7001010101.01 foo
59*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 3661 foo
60*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
61*74a4aa9bSDag-Erling Smørgrav
62*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 196912312359 foo
63*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -60 foo
64*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
65*74a4aa9bSDag-Erling Smørgrav
66*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 196912312359.58 foo
67*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -2 foo
68*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
69*74a4aa9bSDag-Erling Smørgrav
70*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 196912312359.59 foo
71*74a4aa9bSDag-Erling Smørgrav	atf_expect_fail "VFS interprets -1 as “do not set”"
72*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -1 foo
73*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
74*74a4aa9bSDag-Erling Smørgrav
75*74a4aa9bSDag-Erling Smørgrav	atf_check touch -d1969-12-31T23:59:58 foo
76*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -2 foo
77*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
78*74a4aa9bSDag-Erling Smørgrav
79*74a4aa9bSDag-Erling Smørgrav	atf_check touch -d1969-12-31\ 23:59:58 foo
80*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -2 foo
81*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
82*74a4aa9bSDag-Erling Smørgrav
83*74a4aa9bSDag-Erling Smørgrav	atf_check env TZ=CET touch -d1970-01-01T00:59:58 foo
84*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -2 foo
85*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
86*74a4aa9bSDag-Erling Smørgrav
87*74a4aa9bSDag-Erling Smørgrav	atf_check env TZ=CET touch -d1970-01-01T00:59:58Z foo
88*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 3598 foo
89*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
90*74a4aa9bSDag-Erling Smørgrav
91*74a4aa9bSDag-Erling Smørgrav	atf_check touch -d1969-12-31T23:59:59Z foo
92*74a4aa9bSDag-Erling Smørgrav	atf_expect_fail "VFS interprets -1 as “do not set”"
93*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime -1 foo
94*74a4aa9bSDag-Erling Smørgrav	atf_check rm foo
95*74a4aa9bSDag-Erling Smørgrav}
96*74a4aa9bSDag-Erling Smørgrav
97*74a4aa9bSDag-Erling Smørgravatf_test_case touch_relative
98*74a4aa9bSDag-Erling Smørgravtouch_relative_head()
99*74a4aa9bSDag-Erling Smørgrav{
100*74a4aa9bSDag-Erling Smørgrav	atf_set descr "Relative date / time"
101*74a4aa9bSDag-Erling Smørgrav}
102*74a4aa9bSDag-Erling Smørgravtouch_relative_body()
103*74a4aa9bSDag-Erling Smørgrav{
104*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 202403241234.56 foo
105*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283696 foo
106*74a4aa9bSDag-Erling Smørgrav	atf_check touch -A -36 foo
107*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283660 foo
108*74a4aa9bSDag-Erling Smørgrav	atf_check touch -A -0100 foo
109*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283600 foo
110*74a4aa9bSDag-Erling Smørgrav	atf_check touch -A -010000 foo
111*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711280000 foo
112*74a4aa9bSDag-Erling Smørgrav	atf_check touch -A 010136 foo
113*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283696 foo
114*74a4aa9bSDag-Erling Smørgrav}
115*74a4aa9bSDag-Erling Smørgrav
116*74a4aa9bSDag-Erling Smørgravatf_test_case touch_copy
117*74a4aa9bSDag-Erling Smørgravtouch_copy_head()
118*74a4aa9bSDag-Erling Smørgrav{
119*74a4aa9bSDag-Erling Smørgrav	atf_set descr "Copy time from another file"
120*74a4aa9bSDag-Erling Smørgrav}
121*74a4aa9bSDag-Erling Smørgravtouch_copy_body()
122*74a4aa9bSDag-Erling Smørgrav{
123*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 202403241234.56 foo
124*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283696 foo
125*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 7001010000 bar
126*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 0 bar
127*74a4aa9bSDag-Erling Smørgrav	atf_check touch -r foo bar
128*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283696 bar
129*74a4aa9bSDag-Erling Smørgrav}
130*74a4aa9bSDag-Erling Smørgrav
131*74a4aa9bSDag-Erling Smørgravatf_test_case touch_nocreate
132*74a4aa9bSDag-Erling Smørgravtouch_nocreate_head()
133*74a4aa9bSDag-Erling Smørgrav{
134*74a4aa9bSDag-Erling Smørgrav	atf_set descr "Do not create file"
135*74a4aa9bSDag-Erling Smørgrav}
136*74a4aa9bSDag-Erling Smørgravtouch_nocreate_body()
137*74a4aa9bSDag-Erling Smørgrav{
138*74a4aa9bSDag-Erling Smørgrav	atf_check touch -t 202403241234.56 foo
139*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 1711283696 foo
140*74a4aa9bSDag-Erling Smørgrav	atf_check touch -c -t 7001010000 foo bar
141*74a4aa9bSDag-Erling Smørgrav	atf_check_mtime 0 foo
142*74a4aa9bSDag-Erling Smørgrav	atf_check -s exit:1 test -f bar
143*74a4aa9bSDag-Erling Smørgrav	atf_check touch -c bar
144*74a4aa9bSDag-Erling Smørgrav	atf_check -s exit:1 test -f bar
145*74a4aa9bSDag-Erling Smørgrav}
146*74a4aa9bSDag-Erling Smørgrav
147*74a4aa9bSDag-Erling Smørgravatf_init_test_cases()
148*74a4aa9bSDag-Erling Smørgrav{
149*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_none
150*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_one
151*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_multiple
152*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_absolute
153*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_relative
154*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_copy
155*74a4aa9bSDag-Erling Smørgrav	atf_add_test_case touch_nocreate
156*74a4aa9bSDag-Erling Smørgrav	# TODO: add test cases for -a, -h, -m
157*74a4aa9bSDag-Erling Smørgrav}
158