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