1#!/bin/sh
2# $FreeBSD: head/tools/regression/pjdfstest/tests/unlink/00.t 211352 2010-08-15 21:24:17Z pjd $
3
4desc="unlink removes regular files, symbolic links, fifos and sockets"
5
6dir=`dirname $0`
7. ${dir}/../misc.sh
8
9echo "1..112"
10
11n0=`namegen`
12n1=`namegen`
13n2=`namegen`
14
15expect 0 mkdir ${n2} 0755
16cdir=`pwd`
17cd ${n2}
18
19expect 0 create ${n0} 0644
20expect regular lstat ${n0} type
21expect 0 unlink ${n0}
22expect ENOENT lstat ${n0} type
23
24expect 0 symlink ${n1} ${n0}
25expect symlink lstat ${n0} type
26expect 0 unlink ${n0}
27expect ENOENT lstat ${n0} type
28
29expect 0 mkfifo ${n0} 0644
30expect fifo lstat ${n0} type
31expect 0 unlink ${n0}
32expect ENOENT lstat ${n0} type
33
34expect 0 mknod ${n0} b 0644 1 2
35expect block lstat ${n0} type
36expect 0 unlink ${n0}
37expect ENOENT lstat ${n0} type
38
39expect 0 mknod ${n0} c 0644 1 2
40expect char lstat ${n0} type
41expect 0 unlink ${n0}
42expect ENOENT lstat ${n0} type
43
44expect 0 bind ${n0}
45expect socket lstat ${n0} type
46expect 0 unlink ${n0}
47expect ENOENT lstat ${n0} type
48
49# successful unlink(2) updates ctime.
50expect 0 create ${n0} 0644
51expect 0 link ${n0} ${n1}
52ctime1=`${fstest} stat ${n0} ctime`
53sleep 1
54expect 0 unlink ${n1}
55ctime2=`${fstest} stat ${n0} ctime`
56test_check $ctime1 -lt $ctime2
57expect 0 unlink ${n0}
58
59expect 0 mkfifo ${n0} 0644
60expect 0 link ${n0} ${n1}
61ctime1=`${fstest} stat ${n0} ctime`
62sleep 1
63expect 0 unlink ${n1}
64ctime2=`${fstest} stat ${n0} ctime`
65test_check $ctime1 -lt $ctime2
66expect 0 unlink ${n0}
67
68expect 0 mknod ${n0} b 0644 1 2
69expect 0 link ${n0} ${n1}
70ctime1=`${fstest} stat ${n0} ctime`
71sleep 1
72expect 0 unlink ${n1}
73ctime2=`${fstest} stat ${n0} ctime`
74test_check $ctime1 -lt $ctime2
75expect 0 unlink ${n0}
76
77expect 0 mknod ${n0} c 0644 1 2
78expect 0 link ${n0} ${n1}
79ctime1=`${fstest} stat ${n0} ctime`
80sleep 1
81expect 0 unlink ${n1}
82ctime2=`${fstest} stat ${n0} ctime`
83test_check $ctime1 -lt $ctime2
84expect 0 unlink ${n0}
85
86expect 0 bind ${n0}
87expect 0 link ${n0} ${n1}
88ctime1=`${fstest} stat ${n0} ctime`
89sleep 1
90expect 0 unlink ${n1}
91ctime2=`${fstest} stat ${n0} ctime`
92test_check $ctime1 -lt $ctime2
93expect 0 unlink ${n0}
94
95# unsuccessful unlink(2) does not update ctime.
96expect 0 create ${n0} 0644
97ctime1=`${fstest} stat ${n0} ctime`
98sleep 1
99expect EACCES -u 65534 unlink ${n0}
100ctime2=`${fstest} stat ${n0} ctime`
101test_check $ctime1 -eq $ctime2
102expect 0 unlink ${n0}
103
104expect 0 mkfifo ${n0} 0644
105ctime1=`${fstest} stat ${n0} ctime`
106sleep 1
107expect EACCES -u 65534 unlink ${n0}
108ctime2=`${fstest} stat ${n0} ctime`
109test_check $ctime1 -eq $ctime2
110expect 0 unlink ${n0}
111
112expect 0 mknod ${n0} b 0644 1 2
113ctime1=`${fstest} stat ${n0} ctime`
114sleep 1
115expect EACCES -u 65534 unlink ${n0}
116ctime2=`${fstest} stat ${n0} ctime`
117test_check $ctime1 -eq $ctime2
118expect 0 unlink ${n0}
119
120expect 0 mknod ${n0} c 0644 1 2
121ctime1=`${fstest} stat ${n0} ctime`
122sleep 1
123expect EACCES -u 65534 unlink ${n0}
124ctime2=`${fstest} stat ${n0} ctime`
125test_check $ctime1 -eq $ctime2
126expect 0 unlink ${n0}
127
128expect 0 bind ${n0}
129ctime1=`${fstest} stat ${n0} ctime`
130sleep 1
131expect EACCES -u 65534 unlink ${n0}
132ctime2=`${fstest} stat ${n0} ctime`
133test_check $ctime1 -eq $ctime2
134expect 0 unlink ${n0}
135
136expect 0 mkdir ${n0} 0755
137expect 0 create ${n0}/${n1} 0644
138time=`${fstest} stat ${n0} ctime`
139sleep 1
140expect 0 unlink ${n0}/${n1}
141mtime=`${fstest} stat ${n0} mtime`
142test_check $time -lt $mtime
143ctime=`${fstest} stat ${n0} ctime`
144test_check $time -lt $ctime
145expect 0 rmdir ${n0}
146
147expect 0 mkdir ${n0} 0755
148expect 0 mkfifo ${n0}/${n1} 0644
149time=`${fstest} stat ${n0} ctime`
150sleep 1
151expect 0 unlink ${n0}/${n1}
152mtime=`${fstest} stat ${n0} mtime`
153test_check $time -lt $mtime
154ctime=`${fstest} stat ${n0} ctime`
155test_check $time -lt $ctime
156expect 0 rmdir ${n0}
157
158expect 0 mkdir ${n0} 0755
159expect 0 mknod ${n0}/${n1} b 0644 1 2
160time=`${fstest} stat ${n0} ctime`
161sleep 1
162expect 0 unlink ${n0}/${n1}
163mtime=`${fstest} stat ${n0} mtime`
164test_check $time -lt $mtime
165ctime=`${fstest} stat ${n0} ctime`
166test_check $time -lt $ctime
167expect 0 rmdir ${n0}
168
169expect 0 mkdir ${n0} 0755
170expect 0 mknod ${n0}/${n1} c 0644 1 2
171time=`${fstest} stat ${n0} ctime`
172sleep 1
173expect 0 unlink ${n0}/${n1}
174mtime=`${fstest} stat ${n0} mtime`
175test_check $time -lt $mtime
176ctime=`${fstest} stat ${n0} ctime`
177test_check $time -lt $ctime
178expect 0 rmdir ${n0}
179
180expect 0 mkdir ${n0} 0755
181expect 0 bind ${n0}/${n1}
182time=`${fstest} stat ${n0} ctime`
183sleep 1
184expect 0 unlink ${n0}/${n1}
185mtime=`${fstest} stat ${n0} mtime`
186test_check $time -lt $mtime
187ctime=`${fstest} stat ${n0} ctime`
188test_check $time -lt $ctime
189expect 0 rmdir ${n0}
190
191expect 0 mkdir ${n0} 0755
192expect 0 symlink test ${n0}/${n1}
193time=`${fstest} stat ${n0} ctime`
194sleep 1
195expect 0 unlink ${n0}/${n1}
196mtime=`${fstest} stat ${n0} mtime`
197test_check $time -lt $mtime
198ctime=`${fstest} stat ${n0} ctime`
199test_check $time -lt $ctime
200expect 0 rmdir ${n0}
201
202expect 0 create ${n0} 0644
203expect 0 link ${n0} ${n1}
204time=`${fstest} stat ${n0} ctime`
205sleep 1
206expect 0 unlink ${n1}
207ctime=`${fstest} stat ${n0} ctime`
208test_check $time -lt $ctime
209expect 0 unlink ${n0}
210
211cd ${cdir}
212expect 0 rmdir ${n2}
213