1166065Spjd#!/bin/sh
2166065Spjd# $FreeBSD: releng/10.3/tools/regression/pjdfstest/tests/unlink/00.t 211156 2010-08-10 22:57:43Z pjd $
3166065Spjd
4166065Spjddesc="unlink removes regular files, symbolic links, fifos and sockets"
5166065Spjd
6166065Spjddir=`dirname $0`
7166065Spjd. ${dir}/../misc.sh
8166065Spjd
9211156Spjdecho "1..112"
10166065Spjd
11166065Spjdn0=`namegen`
12166065Spjdn1=`namegen`
13166065Spjdn2=`namegen`
14166065Spjd
15166065Spjdexpect 0 mkdir ${n2} 0755
16166065Spjdcdir=`pwd`
17166065Spjdcd ${n2}
18166065Spjd
19166065Spjdexpect 0 create ${n0} 0644
20166065Spjdexpect regular lstat ${n0} type
21166065Spjdexpect 0 unlink ${n0}
22166065Spjdexpect ENOENT lstat ${n0} type
23166065Spjd
24166065Spjdexpect 0 symlink ${n1} ${n0}
25166065Spjdexpect symlink lstat ${n0} type
26166065Spjdexpect 0 unlink ${n0}
27166065Spjdexpect ENOENT lstat ${n0} type
28166065Spjd
29166065Spjdexpect 0 mkfifo ${n0} 0644
30166065Spjdexpect fifo lstat ${n0} type
31166065Spjdexpect 0 unlink ${n0}
32166065Spjdexpect ENOENT lstat ${n0} type
33166065Spjd
34211156Spjdexpect 0 mknod ${n0} b 0644 1 2
35211156Spjdexpect block lstat ${n0} type
36211156Spjdexpect 0 unlink ${n0}
37211156Spjdexpect ENOENT lstat ${n0} type
38166065Spjd
39211156Spjdexpect 0 mknod ${n0} c 0644 1 2
40211156Spjdexpect char lstat ${n0} type
41211156Spjdexpect 0 unlink ${n0}
42211156Spjdexpect ENOENT lstat ${n0} type
43211156Spjd
44211156Spjdexpect 0 bind ${n0}
45211156Spjdexpect socket lstat ${n0} type
46211156Spjdexpect 0 unlink ${n0}
47211156Spjdexpect ENOENT lstat ${n0} type
48211156Spjd
49166065Spjd# successful unlink(2) updates ctime.
50166065Spjdexpect 0 create ${n0} 0644
51166065Spjdexpect 0 link ${n0} ${n1}
52166065Spjdctime1=`${fstest} stat ${n0} ctime`
53166065Spjdsleep 1
54166065Spjdexpect 0 unlink ${n1}
55166065Spjdctime2=`${fstest} stat ${n0} ctime`
56166065Spjdtest_check $ctime1 -lt $ctime2
57166065Spjdexpect 0 unlink ${n0}
58166065Spjd
59166065Spjdexpect 0 mkfifo ${n0} 0644
60166065Spjdexpect 0 link ${n0} ${n1}
61166065Spjdctime1=`${fstest} stat ${n0} ctime`
62166065Spjdsleep 1
63166065Spjdexpect 0 unlink ${n1}
64166065Spjdctime2=`${fstest} stat ${n0} ctime`
65166065Spjdtest_check $ctime1 -lt $ctime2
66166065Spjdexpect 0 unlink ${n0}
67166065Spjd
68211156Spjdexpect 0 mknod ${n0} b 0644 1 2
69211156Spjdexpect 0 link ${n0} ${n1}
70211156Spjdctime1=`${fstest} stat ${n0} ctime`
71211156Spjdsleep 1
72211156Spjdexpect 0 unlink ${n1}
73211156Spjdctime2=`${fstest} stat ${n0} ctime`
74211156Spjdtest_check $ctime1 -lt $ctime2
75211156Spjdexpect 0 unlink ${n0}
76211156Spjd
77211156Spjdexpect 0 mknod ${n0} c 0644 1 2
78211156Spjdexpect 0 link ${n0} ${n1}
79211156Spjdctime1=`${fstest} stat ${n0} ctime`
80211156Spjdsleep 1
81211156Spjdexpect 0 unlink ${n1}
82211156Spjdctime2=`${fstest} stat ${n0} ctime`
83211156Spjdtest_check $ctime1 -lt $ctime2
84211156Spjdexpect 0 unlink ${n0}
85211156Spjd
86211156Spjdexpect 0 bind ${n0}
87211156Spjdexpect 0 link ${n0} ${n1}
88211156Spjdctime1=`${fstest} stat ${n0} ctime`
89211156Spjdsleep 1
90211156Spjdexpect 0 unlink ${n1}
91211156Spjdctime2=`${fstest} stat ${n0} ctime`
92211156Spjdtest_check $ctime1 -lt $ctime2
93211156Spjdexpect 0 unlink ${n0}
94211156Spjd
95166065Spjd# unsuccessful unlink(2) does not update ctime.
96166065Spjdexpect 0 create ${n0} 0644
97166065Spjdctime1=`${fstest} stat ${n0} ctime`
98166065Spjdsleep 1
99166065Spjdexpect EACCES -u 65534 unlink ${n0}
100166065Spjdctime2=`${fstest} stat ${n0} ctime`
101166065Spjdtest_check $ctime1 -eq $ctime2
102166065Spjdexpect 0 unlink ${n0}
103166065Spjd
104166065Spjdexpect 0 mkfifo ${n0} 0644
105166065Spjdctime1=`${fstest} stat ${n0} ctime`
106166065Spjdsleep 1
107166065Spjdexpect EACCES -u 65534 unlink ${n0}
108166065Spjdctime2=`${fstest} stat ${n0} ctime`
109166065Spjdtest_check $ctime1 -eq $ctime2
110166065Spjdexpect 0 unlink ${n0}
111166065Spjd
112211156Spjdexpect 0 mknod ${n0} b 0644 1 2
113211156Spjdctime1=`${fstest} stat ${n0} ctime`
114211156Spjdsleep 1
115211156Spjdexpect EACCES -u 65534 unlink ${n0}
116211156Spjdctime2=`${fstest} stat ${n0} ctime`
117211156Spjdtest_check $ctime1 -eq $ctime2
118211156Spjdexpect 0 unlink ${n0}
119211156Spjd
120211156Spjdexpect 0 mknod ${n0} c 0644 1 2
121211156Spjdctime1=`${fstest} stat ${n0} ctime`
122211156Spjdsleep 1
123211156Spjdexpect EACCES -u 65534 unlink ${n0}
124211156Spjdctime2=`${fstest} stat ${n0} ctime`
125211156Spjdtest_check $ctime1 -eq $ctime2
126211156Spjdexpect 0 unlink ${n0}
127211156Spjd
128211156Spjdexpect 0 bind ${n0}
129211156Spjdctime1=`${fstest} stat ${n0} ctime`
130211156Spjdsleep 1
131211156Spjdexpect EACCES -u 65534 unlink ${n0}
132211156Spjdctime2=`${fstest} stat ${n0} ctime`
133211156Spjdtest_check $ctime1 -eq $ctime2
134211156Spjdexpect 0 unlink ${n0}
135211156Spjd
136166065Spjdexpect 0 mkdir ${n0} 0755
137166065Spjdexpect 0 create ${n0}/${n1} 0644
138166065Spjdtime=`${fstest} stat ${n0} ctime`
139166065Spjdsleep 1
140166065Spjdexpect 0 unlink ${n0}/${n1}
141166065Spjdmtime=`${fstest} stat ${n0} mtime`
142166065Spjdtest_check $time -lt $mtime
143166065Spjdctime=`${fstest} stat ${n0} ctime`
144166065Spjdtest_check $time -lt $ctime
145166065Spjdexpect 0 rmdir ${n0}
146166065Spjd
147166065Spjdexpect 0 mkdir ${n0} 0755
148166065Spjdexpect 0 mkfifo ${n0}/${n1} 0644
149166065Spjdtime=`${fstest} stat ${n0} ctime`
150166065Spjdsleep 1
151166065Spjdexpect 0 unlink ${n0}/${n1}
152166065Spjdmtime=`${fstest} stat ${n0} mtime`
153166065Spjdtest_check $time -lt $mtime
154166065Spjdctime=`${fstest} stat ${n0} ctime`
155166065Spjdtest_check $time -lt $ctime
156166065Spjdexpect 0 rmdir ${n0}
157166065Spjd
158166065Spjdexpect 0 mkdir ${n0} 0755
159211156Spjdexpect 0 mknod ${n0}/${n1} b 0644 1 2
160211156Spjdtime=`${fstest} stat ${n0} ctime`
161211156Spjdsleep 1
162211156Spjdexpect 0 unlink ${n0}/${n1}
163211156Spjdmtime=`${fstest} stat ${n0} mtime`
164211156Spjdtest_check $time -lt $mtime
165211156Spjdctime=`${fstest} stat ${n0} ctime`
166211156Spjdtest_check $time -lt $ctime
167211156Spjdexpect 0 rmdir ${n0}
168211156Spjd
169211156Spjdexpect 0 mkdir ${n0} 0755
170211156Spjdexpect 0 mknod ${n0}/${n1} c 0644 1 2
171211156Spjdtime=`${fstest} stat ${n0} ctime`
172211156Spjdsleep 1
173211156Spjdexpect 0 unlink ${n0}/${n1}
174211156Spjdmtime=`${fstest} stat ${n0} mtime`
175211156Spjdtest_check $time -lt $mtime
176211156Spjdctime=`${fstest} stat ${n0} ctime`
177211156Spjdtest_check $time -lt $ctime
178211156Spjdexpect 0 rmdir ${n0}
179211156Spjd
180211156Spjdexpect 0 mkdir ${n0} 0755
181211156Spjdexpect 0 bind ${n0}/${n1}
182211156Spjdtime=`${fstest} stat ${n0} ctime`
183211156Spjdsleep 1
184211156Spjdexpect 0 unlink ${n0}/${n1}
185211156Spjdmtime=`${fstest} stat ${n0} mtime`
186211156Spjdtest_check $time -lt $mtime
187211156Spjdctime=`${fstest} stat ${n0} ctime`
188211156Spjdtest_check $time -lt $ctime
189211156Spjdexpect 0 rmdir ${n0}
190211156Spjd
191211156Spjdexpect 0 mkdir ${n0} 0755
192166065Spjdexpect 0 symlink test ${n0}/${n1}
193166065Spjdtime=`${fstest} stat ${n0} ctime`
194166065Spjdsleep 1
195166065Spjdexpect 0 unlink ${n0}/${n1}
196166065Spjdmtime=`${fstest} stat ${n0} mtime`
197166065Spjdtest_check $time -lt $mtime
198166065Spjdctime=`${fstest} stat ${n0} ctime`
199166065Spjdtest_check $time -lt $ctime
200166065Spjdexpect 0 rmdir ${n0}
201166065Spjd
202166065Spjdexpect 0 create ${n0} 0644
203166065Spjdexpect 0 link ${n0} ${n1}
204166065Spjdtime=`${fstest} stat ${n0} ctime`
205166065Spjdsleep 1
206166065Spjdexpect 0 unlink ${n1}
207166065Spjdctime=`${fstest} stat ${n0} ctime`
208166065Spjdtest_check $time -lt $ctime
209166065Spjdexpect 0 unlink ${n0}
210166065Spjd
211166065Spjdcd ${cdir}
212166065Spjdexpect 0 rmdir ${n2}
213