]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/pjdfstest/tests/chflags/00.t
Merge lld release_80 branch r351543, and resolve conflicts.
[FreeBSD/FreeBSD.git] / contrib / pjdfstest / tests / chflags / 00.t
1 #!/bin/sh
2 # vim: filetype=sh noexpandtab ts=8 sw=8
3 # $FreeBSD: head/tools/regression/pjdfstest/tests/chflags/00.t 211352 2010-08-15 21:24:17Z pjd $
4
5 desc="chflags changes flags"
6
7 dir=`dirname $0`
8 . ${dir}/../misc.sh
9
10 require chflags
11
12 case "${os}:${fs}" in
13 FreeBSD:UFS)
14         allflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
15         userflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE"
16         systemflags="SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
17
18         echo "1..742"
19         ;;
20 FreeBSD:ZFS)
21         allflags="UF_NODUMP,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
22         userflags="UF_NODUMP"
23         systemflags="SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK"
24
25         echo "1..482"
26         ;;
27 *)
28         quick_exit
29         ;;
30 esac
31
32 n0=`namegen`
33 n1=`namegen`
34 n2=`namegen`
35
36 expect 0 mkdir ${n2} 0755
37 cdir=`pwd`
38 cd ${n2}
39
40 for type in regular dir fifo block char socket; do
41         create_file ${type} ${n0}
42         expect none stat ${n0} flags
43         expect 0 chflags ${n0} ${allflags}
44         expect ${allflags} stat ${n0} flags
45         expect 0 chflags ${n0} ${userflags}
46         expect ${userflags} stat ${n0} flags
47         expect 0 chflags ${n0} ${systemflags}
48         expect ${systemflags} stat ${n0} flags
49         expect 0 chflags ${n0} none
50         expect none stat ${n0} flags
51         if [ "${type}" = "dir" ]; then
52                 expect 0 rmdir ${n0}
53         else
54                 expect 0 unlink ${n0}
55         fi
56
57         create_file ${type} ${n0}
58         expect none stat ${n0} flags
59         expect 0 lchflags ${n0} ${allflags}
60         expect ${allflags} stat ${n0} flags
61         expect 0 lchflags ${n0} ${userflags}
62         expect ${userflags} stat ${n0} flags
63         expect 0 lchflags ${n0} ${systemflags}
64         expect ${systemflags} stat ${n0} flags
65         expect 0 lchflags ${n0} none
66         expect none stat ${n0} flags
67         if [ "${type}" = "dir" ]; then
68                 expect 0 rmdir ${n0}
69         else
70                 expect 0 unlink ${n0}
71         fi
72 done
73
74 expect 0 create ${n0} 0644
75 expect 0 symlink ${n0} ${n1}
76 expect none stat ${n1} flags
77 expect none lstat ${n1} flags
78 expect 0 chflags ${n1} ${allflags}
79 expect ${allflags} stat ${n1} flags
80 expect none lstat ${n1} flags
81 expect 0 chflags ${n1} ${userflags}
82 expect ${userflags} stat ${n1} flags
83 expect none lstat ${n1} flags
84 expect 0 chflags ${n1} ${systemflags}
85 expect ${systemflags} stat ${n1} flags
86 expect none lstat ${n1} flags
87 expect 0 chflags ${n1} none
88 expect none stat ${n1} flags
89 expect none lstat ${n1} flags
90 expect 0 unlink ${n1}
91 expect 0 unlink ${n0}
92
93 expect 0 create ${n0} 0644
94 expect 0 symlink ${n0} ${n1}
95 expect none stat ${n1} flags
96 expect none lstat ${n1} flags
97 expect 0 lchflags ${n1} ${allflags}
98 expect ${allflags} lstat ${n1} flags
99 expect none stat ${n1} flags
100 expect 0 lchflags ${n1} ${userflags}
101 expect ${userflags} lstat ${n1} flags
102 expect none stat ${n1} flags
103 expect 0 lchflags ${n1} ${systemflags}
104 expect ${systemflags} lstat ${n1} flags
105 expect none stat ${n1} flags
106 expect 0 lchflags ${n1} none
107 expect none lstat ${n1} flags
108 expect none stat ${n1} flags
109 expect 0 unlink ${n1}
110 expect 0 unlink ${n0}
111
112 # successful chflags(2) updates ctime.
113 for type in regular dir fifo block char socket symlink; do
114         if [ "${type}" != "symlink" ]; then
115                 create_file ${type} ${n0}
116                 for flag in `echo ${allflags},none | tr ',' ' '`; do
117                         ctime1=`${fstest} stat ${n0} ctime`
118                         sleep 1
119                         expect 0 chflags ${n0} ${flag}
120                         ctime2=`${fstest} stat ${n0} ctime`
121                         test_check $ctime1 -lt $ctime2
122                 done
123                 if [ "${type}" = "dir" ]; then
124                         expect 0 rmdir ${n0}
125                 else
126                         expect 0 unlink ${n0}
127                 fi
128         fi
129
130         create_file ${type} ${n0}
131         for flag in `echo ${allflags},none | tr ',' ' '`; do
132                 ctime1=`${fstest} lstat ${n0} ctime`
133                 sleep 1
134                 expect 0 lchflags ${n0} ${flag}
135                 ctime2=`${fstest} lstat ${n0} ctime`
136                 test_check $ctime1 -lt $ctime2
137         done
138         if [ "${type}" = "dir" ]; then
139                 expect 0 rmdir ${n0}
140         else
141                 expect 0 unlink ${n0}
142         fi
143 done
144
145 # unsuccessful chflags(2) does not update ctime.
146 for type in regular dir fifo block char socket symlink; do
147         if [ "${type}" != "symlink" ]; then
148                 create_file ${type} ${n0}
149                 for flag in `echo ${allflags},none | tr ',' ' '`; do
150                         ctime1=`${fstest} stat ${n0} ctime`
151                         sleep 1
152                         expect EPERM -u 65534 chflags ${n0} ${flag}
153                         ctime2=`${fstest} stat ${n0} ctime`
154                         test_check $ctime1 -eq $ctime2
155                 done
156                 if [ "${type}" = "dir" ]; then
157                         expect 0 rmdir ${n0}
158                 else
159                         expect 0 unlink ${n0}
160                 fi
161         fi
162
163         create_file ${type} ${n0}
164         for flag in `echo ${allflags},none | tr ',' ' '`; do
165                 ctime1=`${fstest} lstat ${n0} ctime`
166                 sleep 1
167                 expect EPERM -u 65534 lchflags ${n0} ${flag}
168                 ctime2=`${fstest} lstat ${n0} ctime`
169                 test_check $ctime1 -eq $ctime2
170         done
171         if [ "${type}" = "dir" ]; then
172                 expect 0 rmdir ${n0}
173         else
174                 expect 0 unlink ${n0}
175         fi
176 done
177
178 cd ${cdir}
179 expect 0 rmdir ${n2}