157718be8SEnji Cooper# $NetBSD: t_times.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $ 257718be8SEnji Cooper# 357718be8SEnji Cooper# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc. 457718be8SEnji Cooper# All rights reserved. 557718be8SEnji Cooper# 657718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without 757718be8SEnji Cooper# modification, are permitted provided that the following conditions 857718be8SEnji Cooper# are met: 957718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright 1057718be8SEnji Cooper# notice, this list of conditions and the following disclaimer. 1157718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 1257718be8SEnji Cooper# notice, this list of conditions and the following disclaimer in the 1357718be8SEnji Cooper# documentation and/or other materials provided with the distribution. 1457718be8SEnji Cooper# 1557718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1657718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1757718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1857718be8SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 1957718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2057718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2157718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2257718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2357718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2457718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2557718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 2657718be8SEnji Cooper# 2757718be8SEnji Cooper 2857718be8SEnji Cooper# 2957718be8SEnji Cooper# Verifies that node times are properly handled. 3057718be8SEnji Cooper# 3157718be8SEnji Cooper 3257718be8SEnji Cooperatf_test_case empty 3357718be8SEnji Cooperempty_head() { 3457718be8SEnji Cooper atf_set "descr" "Tests that creating an empty file and later" \ 3557718be8SEnji Cooper "manipulating it updates times correctly" 3657718be8SEnji Cooper atf_set "require.user" "root" 3757718be8SEnji Cooper} 3857718be8SEnji Cooperempty_body() { 3957718be8SEnji Cooper test_mount 4057718be8SEnji Cooper 4157718be8SEnji Cooper atf_check -s eq:0 -o empty -e empty touch a 4257718be8SEnji Cooper eval $(stat -s a | sed -e 's|st_|ost_|g') || atf_fail "stat failed" 4357718be8SEnji Cooper [ ${ost_birthtime} -eq ${ost_atime} ] || atf_fail "Incorrect atime" 4457718be8SEnji Cooper [ ${ost_birthtime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime" 4557718be8SEnji Cooper [ ${ost_birthtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 4657718be8SEnji Cooper 4757718be8SEnji Cooper sleep 1 48*8311bc5fSDag-Erling Smørgrav atf_check -s eq:0 -o empty -e empty cat a 49*8311bc5fSDag-Erling Smørgrav eval $(stat -s a) || atf_fail "stat failed" 50*8311bc5fSDag-Erling Smørgrav [ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime" 51*8311bc5fSDag-Erling Smørgrav [ ${st_ctime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime" 52*8311bc5fSDag-Erling Smørgrav [ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 53*8311bc5fSDag-Erling Smørgrav 54*8311bc5fSDag-Erling Smørgrav sleep 1 55*8311bc5fSDag-Erling Smørgrav ost_atime=${st_atime} 56*8311bc5fSDag-Erling Smørgrav echo foo >a || atf_fail "Write failed" 57*8311bc5fSDag-Erling Smørgrav eval $(stat -s a) || atf_fail "stat failed" 58*8311bc5fSDag-Erling Smørgrav [ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime" 59*8311bc5fSDag-Erling Smørgrav [ ${st_ctime} -gt ${ost_ctime} ] || atf_fail "Incorrect ctime" 60*8311bc5fSDag-Erling Smørgrav [ ${st_mtime} -gt ${ost_mtime} ] || atf_fail "Incorrect mtime" 61*8311bc5fSDag-Erling Smørgrav 62*8311bc5fSDag-Erling Smørgrav test_unmount 63*8311bc5fSDag-Erling Smørgrav} 64*8311bc5fSDag-Erling Smørgrav 65*8311bc5fSDag-Erling Smørgravatf_test_case holey 66*8311bc5fSDag-Erling Smørgravholey_head() { 67*8311bc5fSDag-Erling Smørgrav atf_set "descr" "Tests that creating a file consisting entirely" \ 68*8311bc5fSDag-Erling Smørgrav "of a hole and later" \ 69*8311bc5fSDag-Erling Smørgrav "manipulating it updates times correctly" 70*8311bc5fSDag-Erling Smørgrav atf_set "require.user" "root" 71*8311bc5fSDag-Erling Smørgrav} 72*8311bc5fSDag-Erling Smørgravholey_body() { 73*8311bc5fSDag-Erling Smørgrav test_mount 74*8311bc5fSDag-Erling Smørgrav 75*8311bc5fSDag-Erling Smørgrav atf_check -s eq:0 -o empty -e empty truncate -s 8k a 76*8311bc5fSDag-Erling Smørgrav eval $(stat -s a | sed -e 's|st_|ost_|g') || atf_fail "stat failed" 77*8311bc5fSDag-Erling Smørgrav [ ${ost_birthtime} -eq ${ost_atime} ] || atf_fail "Incorrect atime" 78*8311bc5fSDag-Erling Smørgrav [ ${ost_birthtime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime" 79*8311bc5fSDag-Erling Smørgrav [ ${ost_birthtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 80*8311bc5fSDag-Erling Smørgrav 81*8311bc5fSDag-Erling Smørgrav sleep 1 8257718be8SEnji Cooper atf_check -s eq:0 -o ignore -e empty cat a 8357718be8SEnji Cooper eval $(stat -s a) || atf_fail "stat failed" 8457718be8SEnji Cooper [ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime" 8557718be8SEnji Cooper [ ${st_ctime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime" 8657718be8SEnji Cooper [ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 8757718be8SEnji Cooper 8857718be8SEnji Cooper test_unmount 8957718be8SEnji Cooper} 9057718be8SEnji Cooper 9157718be8SEnji Cooperatf_test_case non_empty 9257718be8SEnji Coopernon_empty_head() { 9357718be8SEnji Cooper atf_set "descr" "Tests that creating a non-empty file and later" \ 9457718be8SEnji Cooper "manipulating it updates times correctly" 9557718be8SEnji Cooper atf_set "require.user" "root" 9657718be8SEnji Cooper} 9757718be8SEnji Coopernon_empty_body() { 9857718be8SEnji Cooper test_mount 9957718be8SEnji Cooper 10057718be8SEnji Cooper echo foo >b || atf_fail "Non-empty creation failed" 10157718be8SEnji Cooper eval $(stat -s b | sed -e 's|st_|ost_|g') || atf_fail "stat failed" 10257718be8SEnji Cooper 10357718be8SEnji Cooper sleep 1 104*8311bc5fSDag-Erling Smørgrav atf_check -s eq:0 -o inline:"foo\n" -e empty cat b 10557718be8SEnji Cooper eval $(stat -s b) || atf_fail "stat failed" 10657718be8SEnji Cooper [ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime" 10757718be8SEnji Cooper [ ${st_ctime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime" 10857718be8SEnji Cooper [ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 10957718be8SEnji Cooper 11057718be8SEnji Cooper test_unmount 11157718be8SEnji Cooper} 11257718be8SEnji Cooper 11357718be8SEnji Cooperatf_test_case link 11457718be8SEnji Cooperlink_head() { 11557718be8SEnji Cooper atf_set "descr" "Tests that linking to an existing file updates" \ 11657718be8SEnji Cooper "times correctly" 11757718be8SEnji Cooper atf_set "require.user" "root" 11857718be8SEnji Cooper} 11957718be8SEnji Cooperlink_body() { 12057718be8SEnji Cooper test_mount 12157718be8SEnji Cooper 12257718be8SEnji Cooper echo foo >c || atf_fail "Non-empty creation failed" 12357718be8SEnji Cooper eval $(stat -s c | sed -e 's|st_|ost_|g') || atf_fail "stat failed" 12457718be8SEnji Cooper 12557718be8SEnji Cooper sleep 1 12657718be8SEnji Cooper atf_check -s eq:0 -o empty -e empty ln c d 12757718be8SEnji Cooper eval $(stat -s c) || atf_fail "stat failed" 12857718be8SEnji Cooper [ ${st_atime} -eq ${ost_atime} ] || atf_fail "Incorrect atime" 12957718be8SEnji Cooper [ ${st_ctime} -gt ${ost_ctime} ] || atf_fail "Incorrect ctime" 13057718be8SEnji Cooper [ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 13157718be8SEnji Cooper 13257718be8SEnji Cooper test_unmount 13357718be8SEnji Cooper} 13457718be8SEnji Cooper 13557718be8SEnji Cooperatf_test_case rename 13657718be8SEnji Cooperrename_head() { 13757718be8SEnji Cooper atf_set "descr" "Tests that renaming an existing file updates" \ 13857718be8SEnji Cooper "times correctly" 13957718be8SEnji Cooper atf_set "require.user" "root" 14057718be8SEnji Cooper} 14157718be8SEnji Cooperrename_body() { 14257718be8SEnji Cooper test_mount 14357718be8SEnji Cooper 14457718be8SEnji Cooper atf_check -s eq:0 -o empty -e empty mkdir e 14557718be8SEnji Cooper echo foo >e/a || atf_fail "Creation failed" 14657718be8SEnji Cooper eval $(stat -s e | sed -e 's|st_|dost_|g') || atf_fail "stat failed" 14757718be8SEnji Cooper eval $(stat -s e/a | sed -e 's|st_|ost_|g') || atf_fail "stat failed" 14857718be8SEnji Cooper sleep 1 14957718be8SEnji Cooper atf_check -s eq:0 -o empty -e empty mv e/a e/b 15057718be8SEnji Cooper eval $(stat -s e | sed -e 's|st_|dst_|g') || atf_fail "stat failed" 15157718be8SEnji Cooper eval $(stat -s e/b) || atf_fail "stat failed" 15257718be8SEnji Cooper [ ${st_atime} -eq ${ost_atime} ] || atf_fail "Incorrect atime" 15357718be8SEnji Cooper [ ${st_ctime} -gt ${ost_ctime} ] || atf_fail "Incorrect ctime" 15457718be8SEnji Cooper [ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime" 15557718be8SEnji Cooper [ ${dst_mtime} -gt ${dost_mtime} ] || atf_fail "Incorrect mtime" 15657718be8SEnji Cooper 15757718be8SEnji Cooper test_unmount 15857718be8SEnji Cooper} 15957718be8SEnji Cooper 16057718be8SEnji Cooperatf_init_test_cases() { 16157718be8SEnji Cooper . $(atf_get_srcdir)/../h_funcs.subr 16257718be8SEnji Cooper . $(atf_get_srcdir)/h_funcs.subr 16357718be8SEnji Cooper 16457718be8SEnji Cooper atf_add_test_case empty 165*8311bc5fSDag-Erling Smørgrav atf_add_test_case holey 16657718be8SEnji Cooper atf_add_test_case non_empty 16757718be8SEnji Cooper atf_add_test_case link 16857718be8SEnji Cooper atf_add_test_case rename 16957718be8SEnji Cooper} 170