xref: /freebsd/tools/regression/tmpfs/t_times (revision 9336e0699bda8a301cd2bfa37106b6ec5e32012e)
1#!/bin/sh
2#
3# $NetBSD: t_times,v 1.6 2006/11/09 16:20:06 jmmv Exp $
4#
5# Copyright (c) 2005, 2006 The NetBSD Foundation, Inc.
6# All rights reserved.
7#
8# This code is derived from software contributed to The NetBSD Foundation
9# by Julio M. Merino Vidal, developed as part of Google's Summer of Code
10# 2005 program.
11#
12# Redistribution and use in source and binary forms, with or without
13# modification, are permitted provided that the following conditions
14# are met:
15# 1. Redistributions of source code must retain the above copyright
16#    notice, this list of conditions and the following disclaimer.
17# 2. Redistributions in binary form must reproduce the above copyright
18#    notice, this list of conditions and the following disclaimer in the
19#    documentation and/or other materials provided with the distribution.
20# 3. All advertising materials mentioning features or use of this software
21#    must display the following acknowledgement:
22#        This product includes software developed by the NetBSD
23#        Foundation, Inc. and its contributors.
24# 4. Neither the name of The NetBSD Foundation nor the names of its
25#    contributors may be used to endorse or promote products derived
26#    from this software without specific prior written permission.
27#
28# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
29# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
30# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
32# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38# POSSIBILITY OF SUCH DAMAGE.
39#
40# $FreeBSD$
41#
42
43#
44# Verifies that node times are properly handled.
45#
46
47test_run() {
48	test_mount
49
50	test_name "Creation of empty file"
51	touch a || die
52	eval $(stat -s a | sed -e 's|st_|ost_|g') || die
53	[ ${ost_birthtime} -eq ${ost_atime} ] || die
54	[ ${ost_birthtime} -eq ${ost_ctime} ] || die
55	[ ${ost_birthtime} -eq ${ost_mtime} ] || die
56
57	test_name "Read of empty file"
58	sleep 1
59	cat a >/dev/null || die
60	eval $(stat -s a) || die
61	[ ${st_atime} -gt ${ost_atime} ] || die
62	[ ${st_ctime} -eq ${ost_ctime} ] || die
63	[ ${st_mtime} -eq ${ost_mtime} ] || die
64
65	test_name "Write to (and extension of) empty file"
66	sleep 1
67	echo foo >a || die
68	eval $(stat -s a) || die
69	[ ${st_atime} -gt ${ost_atime} ] || die
70	[ ${st_ctime} -gt ${ost_ctime} ] || die
71	[ ${st_mtime} -gt ${ost_mtime} ] || die
72
73	test_name "Creation of non-empty file"
74	echo foo >b || die
75	eval $(stat -s b | sed -e 's|st_|ost_|g') || die
76
77	test_name "Read of non-empty file"
78	sleep 1
79	cat b >/dev/null || die
80	eval $(stat -s b) || die
81	[ ${st_atime} -gt ${ost_atime} ] || die
82	[ ${st_ctime} -eq ${ost_ctime} ] || die
83	[ ${st_mtime} -eq ${ost_mtime} ] || die
84
85	test_name "Creation of non-empty file"
86	echo foo >c || die
87	eval $(stat -s c | sed -e 's|st_|ost_|g') || die
88
89	test_name "New link to non-empty file"
90	sleep 1
91	ln c d || die
92	eval $(stat -s c) || die
93	[ ${st_atime} -eq ${ost_atime} ] || die
94	[ ${st_ctime} -gt ${ost_ctime} ] || die
95	[ ${st_mtime} -eq ${ost_mtime} ] || die
96
97	test_name "File renaming does not change times"
98	mkdir e || die
99	echo foo >e/a || die
100	eval $(stat -s e | sed -e 's|st_|dost_|g') || die
101	eval $(stat -s e/a | sed -e 's|st_|ost_|g') || die
102	sleep 1
103	mv e/a e/b || die
104	eval $(stat -s e | sed -e 's|st_|dst_|g') || die
105	eval $(stat -s e/b) || die
106	[ ${st_atime} -eq ${ost_atime} ] || die
107	[ ${st_ctime} -gt ${ost_ctime} ] || die
108	[ ${st_mtime} -eq ${ost_mtime} ] || die
109	[ ${dst_mtime} -gt ${dost_mtime} ] || die
110
111	test_unmount
112}
113
114. ${SUBRDIR}/h_funcs.subr
115