1#!/bin/sh
2# $FreeBSD: src/tools/regression/fstest/tests/link/00.t,v 1.1 2007/01/17 01:42:09 pjd Exp $
3
4desc="link creates hardlinks"
5
6n0=`namegen`
7n1=`namegen`
8n2=`namegen`
9n3=`namegen`
10
11expect 0 mkdir ${n3} 0755
12cdir=`pwd`
13cd ${n3}
14
15expect 0 create ${n0} 0644
16expect regular,0644,1 lstat ${n0} type,mode,nlink
17
18expect 0 link ${n0} ${n1}
19expect regular,0644,2 lstat ${n0} type,mode,nlink
20expect regular,0644,2 lstat ${n1} type,mode,nlink
21
22expect 0 link ${n1} ${n2}
23expect regular,0644,3 lstat ${n0} type,mode,nlink
24expect regular,0644,3 lstat ${n1} type,mode,nlink
25expect regular,0644,3 lstat ${n2} type,mode,nlink
26
27expect 0 chmod ${n1} 0201
28expect 0 chown ${n1} 65534 65533
29
30expect regular,0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid
31expect regular,0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
32expect regular,0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
33
34expect 0 unlink ${n0}
35expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
36expect regular,0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
37expect regular,0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
38
39expect 0 unlink ${n2}
40expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
41expect regular,0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
42expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
43
44expect 0 unlink ${n1}
45expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
46expect ENOENT lstat ${n1} type,mode,nlink,uid,gid
47expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
48
49expect 0 mkfifo ${n0} 0644
50expect fifo,0644,1 lstat ${n0} type,mode,nlink
51
52expect 0 link ${n0} ${n1}
53expect fifo,0644,2 lstat ${n0} type,mode,nlink
54expect fifo,0644,2 lstat ${n1} type,mode,nlink
55
56expect 0 link ${n1} ${n2}
57expect fifo,0644,3 lstat ${n0} type,mode,nlink
58expect fifo,0644,3 lstat ${n1} type,mode,nlink
59expect fifo,0644,3 lstat ${n2} type,mode,nlink
60
61expect 0 chmod ${n1} 0201
62expect 0 chown ${n1} 65534 65533
63
64expect fifo,0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid
65expect fifo,0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
66expect fifo,0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
67
68expect 0 unlink ${n0}
69expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
70expect fifo,0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
71expect fifo,0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
72
73expect 0 unlink ${n2}
74expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
75expect fifo,0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
76expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
77
78expect 0 unlink ${n1}
79expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
80expect ENOENT lstat ${n1} type,mode,nlink,uid,gid
81expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
82
83# successful link(2) updates ctime.
84expect 0 create ${n0} 0644
85ctime1=`${FSTEST} stat ${n0} ctime`
86dctime1=`${FSTEST} stat . ctime`
87dmtime1=`${FSTEST} stat . mtime`
88sleep 1
89expect 0 link ${n0} ${n1}
90ctime2=`${FSTEST} stat ${n0} ctime`
91test_check $ctime1 -lt $ctime2
92dctime2=`${FSTEST} stat . ctime`
93test_check $dctime1 -lt $dctime2
94dmtime2=`${FSTEST} stat . mtime`
95test_check $dctime1 -lt $dmtime2
96expect 0 unlink ${n0}
97expect 0 unlink ${n1}
98
99expect 0 mkfifo ${n0} 0644
100ctime1=`${FSTEST} stat ${n0} ctime`
101dctime1=`${FSTEST} stat . ctime`
102dmtime1=`${FSTEST} stat . mtime`
103sleep 1
104expect 0 link ${n0} ${n1}
105ctime2=`${FSTEST} stat ${n0} ctime`
106test_check $ctime1 -lt $ctime2
107dctime2=`${FSTEST} stat . ctime`
108test_check $dctime1 -lt $dctime2
109dmtime2=`${FSTEST} stat . mtime`
110test_check $dctime1 -lt $dmtime2
111expect 0 unlink ${n0}
112expect 0 unlink ${n1}
113
114# unsuccessful link(2) does not update ctime.
115expect 0 create ${n0} 0644
116expect 0 chown ${n0} 65534 -1
117ctime1=`${FSTEST} stat ${n0} ctime`
118dctime1=`${FSTEST} stat . ctime`
119dmtime1=`${FSTEST} stat . mtime`
120sleep 1
121expect EACCES -u 65534 link ${n0} ${n1}
122ctime2=`${FSTEST} stat ${n0} ctime`
123test_check $ctime1 -eq $ctime2
124dctime2=`${FSTEST} stat . ctime`
125test_check $dctime1 -eq $dctime2
126dmtime2=`${FSTEST} stat . mtime`
127test_check $dctime1 -eq $dmtime2
128expect 0 unlink ${n0}
129
130expect 0 mkfifo ${n0} 0644
131expect 0 chown ${n0} 65534 -1
132ctime1=`${FSTEST} stat ${n0} ctime`
133dctime1=`${FSTEST} stat . ctime`
134dmtime1=`${FSTEST} stat . mtime`
135sleep 1
136expect EACCES -u 65534 link ${n0} ${n1}
137ctime2=`${FSTEST} stat ${n0} ctime`
138test_check $ctime1 -eq $ctime2
139dctime2=`${FSTEST} stat . ctime`
140test_check $dctime1 -eq $dctime2
141dmtime2=`${FSTEST} stat . mtime`
142test_check $dctime1 -eq $dmtime2
143expect 0 unlink ${n0}
144
145cd ${cdir}
146expect 0 rmdir ${n3}
147