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