Home | History | Annotate | Line # | Download | only in tmpfs
t_setattr.sh revision 1.4
      1 # $NetBSD: t_setattr.sh,v 1.4 2010/06/04 08:39:40 jmmv Exp $
      2 #
      3 # Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
      4 # All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 # 1. Redistributions of source code must retain the above copyright
     10 #    notice, this list of conditions and the following disclaimer.
     11 # 2. Redistributions in binary form must reproduce the above copyright
     12 #    notice, this list of conditions and the following disclaimer in the
     13 #    documentation and/or other materials provided with the distribution.
     14 #
     15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     25 # POSSIBILITY OF SUCH DAMAGE.
     26 #
     27 
     28 #
     29 # Verifies that the setattr vnode operation works, using several commands
     30 # that require this function.
     31 #
     32 
     33 atf_test_case chown
     34 chown_head() {
     35 	atf_set "descr" "Tests that the file owner can be changed"
     36 	atf_set "require.user" "root"
     37 	atf_set "use.fs" "true"
     38 }
     39 chown_body() {
     40 	test_mount
     41 
     42 	atf_check -s eq:0 -o empty -e empty mkdir own
     43 	eval $(stat -s own | sed -e 's|st_|ost_|g')
     44 	atf_check -s eq:0 -o empty -e empty chown 1234 own
     45 	eval $(stat -s own)
     46 	[ ${st_uid} -eq 1234 ] || atf_fail "uid was not set"
     47 	[ ${st_gid} -eq ${ost_gid} ] || atf_fail "gid was modified"
     48 
     49 	test_unmount
     50 }
     51 
     52 atf_test_case chown_kqueue
     53 chown_kqueue_head() {
     54 	atf_set "descr" "Tests that changing the file owner raises" \
     55 	                "NOTE_ATTRIB on it"
     56 	atf_set "require.user" "root"
     57 	atf_set "use.fs" "true"
     58 }
     59 chown_kqueue_body() {
     60 	test_mount
     61 
     62 	atf_check -s eq:0 -o empty -e empty mkdir ownq
     63 	echo 'chown 1234 ownq' | kqueue_monitor 1 ownq
     64 	kqueue_check ownq NOTE_ATTRIB
     65 
     66 	test_unmount
     67 }
     68 
     69 atf_test_case chgrp
     70 chgrp_head() {
     71 	atf_set "descr" "Tests that the file group can be changed"
     72 	atf_set "require.user" "root"
     73 	atf_set "use.fs" "true"
     74 }
     75 chgrp_body() {
     76 	test_mount
     77 
     78 	atf_check -s eq:0 -o empty -e empty mkdir grp
     79 	eval $(stat -s grp | sed -e 's|st_|ost_|g')
     80 	atf_check -s eq:0 -o empty -e empty chgrp 5678 grp
     81 	eval $(stat -s grp)
     82 	[ ${st_uid} -eq ${ost_uid} ] || atf_fail "uid was modified"
     83 	[ ${st_gid} -eq 5678 ] || atf_fail "gid was not set"
     84 
     85 	test_unmount
     86 }
     87 
     88 atf_test_case chgrp_kqueue
     89 chgrp_kqueue_head() {
     90 	atf_set "descr" "Tests that changing the file group raises" \
     91 	                "NOTE_ATTRIB on it"
     92 	atf_set "require.user" "root"
     93 	atf_set "use.fs" "true"
     94 }
     95 chgrp_kqueue_body() {
     96 	test_mount
     97 
     98 	atf_check -s eq:0 -o empty -e empty mkdir grpq
     99 	echo 'chgrp 1234 grpq' | kqueue_monitor 1 grpq
    100 	kqueue_check grpq NOTE_ATTRIB
    101 
    102 	test_unmount
    103 }
    104 
    105 atf_test_case chowngrp
    106 chowngrp_head() {
    107 	atf_set "descr" "Tests that the file owner and group can be" \
    108 	                "changed at once"
    109 	atf_set "require.user" "root"
    110 	atf_set "use.fs" "true"
    111 }
    112 chowngrp_body() {
    113 	test_mount
    114 
    115 	atf_check -s eq:0 -o empty -e empty mkdir owngrp
    116 	atf_check -s eq:0 -o empty -e empty chown 1234:5678 owngrp
    117 	eval $(stat -s owngrp)
    118 	[ ${st_uid} -eq 1234 ] || atf_fail "uid was not modified"
    119 	[ ${st_gid} -eq 5678 ] || atf_fail "gid was not modified"
    120 
    121 	test_unmount
    122 }
    123 
    124 atf_test_case chowngrp_kqueue
    125 chowngrp_kqueue_head() {
    126 	atf_set "descr" "Tests that changing the file owner and group" \
    127 	                "raises NOTE_ATTRIB on it"
    128 	atf_set "require.user" "root"
    129 	atf_set "use.fs" "true"
    130 }
    131 chowngrp_kqueue_body() {
    132 	test_mount
    133 
    134 	atf_check -s eq:0 -o empty -e empty mkdir owngrpp
    135 	echo 'chown 1234:5678 owngrpp' | kqueue_monitor 1 owngrpp
    136 	kqueue_check owngrpp NOTE_ATTRIB
    137 
    138 	test_unmount
    139 }
    140 
    141 atf_test_case chmod
    142 chmod_head() {
    143 	atf_set "descr" "Tests that the file mode can be changed"
    144 	atf_set "require.user" "root"
    145 	atf_set "use.fs" "true"
    146 }
    147 chmod_body() {
    148 	test_mount
    149 
    150 	atf_check -s eq:0 -o empty -e empty mkdir mode
    151 	atf_check -s eq:0 -o empty -e empty chmod 0000 mode
    152 	eval $(stat -s mode)
    153 	[ ${st_mode} -eq 40000 ] || af_fail "mode was not set"
    154 
    155 	test_unmount
    156 }
    157 
    158 atf_test_case chmod_kqueue
    159 chmod_kqueue_head() {
    160 	atf_set "descr" "Tests that changing the file mode raises" \
    161 	                "NOTE_ATTRIB on it"
    162 	atf_set "require.user" "root"
    163 	atf_set "use.fs" "true"
    164 }
    165 chmod_kqueue_body() {
    166 	test_mount
    167 
    168 	atf_check -s eq:0 -o empty -e empty mkdir modeq
    169 	echo 'chmod 0000 modeq' | kqueue_monitor 1 modeq
    170 	kqueue_check modeq NOTE_ATTRIB
    171 
    172 	test_unmount
    173 }
    174 
    175 atf_test_case chtimes
    176 chtimes_head() {
    177 	atf_set "descr" "Tests that file times can be changed"
    178 	atf_set "require.user" "root"
    179 	atf_set "use.fs" "true"
    180 }
    181 chtimes_body() {
    182 	test_mount
    183 
    184 	atf_check -s eq:0 -o empty -e empty mkdir times
    185 	atf_check -s eq:0 -o empty -e empty \
    186 	    -x 'TZ=GMT touch -t 200501010101 times'
    187 	eval $(stat -s times)
    188 	[ ${st_atime} = ${st_mtime} ] || \
    189 	    atf_fail "atime does not match mtime"
    190 	[ ${st_atime} = 1104541260 ] || atf_fail "atime does not match"
    191 
    192 	test_unmount
    193 }
    194 
    195 atf_test_case chtimes_kqueue
    196 chtimes_kqueue_head() {
    197 	atf_set "descr" "Tests that changing the file times raises" \
    198 	                "NOTE_ATTRIB on it"
    199 	atf_set "require.user" "root"
    200 	atf_set "use.fs" "true"
    201 }
    202 chtimes_kqueue_body() {
    203 	test_mount
    204 
    205 	atf_check -s eq:0 -o empty -e empty mkdir timesq
    206 	echo 'touch timesq' | kqueue_monitor 1 timesq
    207 	kqueue_check timesq NOTE_ATTRIB
    208 
    209 	test_unmount
    210 }
    211 
    212 atf_init_test_cases() {
    213 	. $(atf_get_srcdir)/../h_funcs.subr
    214 	. $(atf_get_srcdir)/h_funcs.subr
    215 
    216 	atf_add_test_case chown
    217 	atf_add_test_case chown_kqueue
    218 	atf_add_test_case chgrp
    219 	atf_add_test_case chgrp_kqueue
    220 	atf_add_test_case chowngrp
    221 	atf_add_test_case chowngrp_kqueue
    222 	atf_add_test_case chmod
    223 	atf_add_test_case chmod_kqueue
    224 	atf_add_test_case chtimes
    225 	atf_add_test_case chtimes_kqueue
    226 }
    227