]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - tools/regression/pjdfstest/tests/rename/00.t
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / tools / regression / pjdfstest / tests / rename / 00.t
1 #!/bin/sh
2 # $FreeBSD$
3
4 desc="rename changes file name"
5
6 dir=`dirname $0`
7 . ${dir}/../misc.sh
8
9 echo "1..150"
10
11 n0=`namegen`
12 n1=`namegen`
13 n2=`namegen`
14 n3=`namegen`
15
16 expect 0 mkdir ${n3} 0755
17 cdir=`pwd`
18 cd ${n3}
19
20 for type in regular fifo block char socket; do
21         create_file ${type} ${n0} 0644
22         expect ${type},0644,1 lstat ${n0} type,mode,nlink
23         inode=`${fstest} lstat ${n0} inode`
24         expect 0 rename ${n0} ${n1}
25         expect ENOENT lstat ${n0} type,mode,nlink
26         expect ${type},${inode},0644,1 lstat ${n1} type,inode,mode,nlink
27         expect 0 link ${n1} ${n0}
28         expect ${type},${inode},0644,2 lstat ${n0} type,inode,mode,nlink
29         expect ${type},${inode},0644,2 lstat ${n1} type,inode,mode,nlink
30         expect 0 rename ${n1} ${n2}
31         expect ${type},${inode},0644,2 lstat ${n0} type,inode,mode,nlink
32         expect ENOENT lstat ${n1} type,mode,nlink
33         expect ${type},${inode},0644,2 lstat ${n2} type,inode,mode,nlink
34         expect 0 unlink ${n0}
35         expect 0 unlink ${n2}
36 done
37
38 expect 0 mkdir ${n0} 0755
39 expect dir,0755 lstat ${n0} type,mode
40 inode=`${fstest} lstat ${n0} inode`
41 expect 0 rename ${n0} ${n1}
42 expect ENOENT lstat ${n0} type,mode
43 expect dir,${inode},0755 lstat ${n1} type,inode,mode
44 expect 0 rmdir ${n1}
45
46 expect 0 create ${n0} 0644
47 rinode=`${fstest} lstat ${n0} inode`
48 expect regular,0644 lstat ${n0} type,mode
49 expect 0 symlink ${n0} ${n1}
50 sinode=`${fstest} lstat ${n1} inode`
51 expect regular,${rinode},0644 stat ${n1} type,inode,mode
52 expect symlink,${sinode} lstat ${n1} type,inode
53 expect 0 rename ${n1} ${n2}
54 expect regular,${rinode},0644 stat ${n0} type,inode,mode
55 expect ENOENT lstat ${n1} type,mode
56 expect symlink,${sinode} lstat ${n2} type,inode
57 expect 0 unlink ${n0}
58 expect 0 unlink ${n2}
59
60 # successful rename(2) updates ctime.
61 for type in regular dir fifo block char socket symlink; do
62         create_file ${type} ${n0}
63         ctime1=`${fstest} lstat ${n0} ctime`
64         sleep 1
65         expect 0 rename ${n0} ${n1}
66         ctime2=`${fstest} lstat ${n1} ctime`
67         test_check $ctime1 -lt $ctime2
68         if [ "${type}" = "dir" ]; then
69                 expect 0 rmdir ${n1}
70         else
71                 expect 0 unlink ${n1}
72         fi
73 done
74
75 # unsuccessful link(2) does not update ctime.
76 for type in regular dir fifo block char socket symlink; do
77         create_file ${type} ${n0}
78         ctime1=`${fstest} lstat ${n0} ctime`
79         sleep 1
80         expect EACCES -u 65534 rename ${n0} ${n1}
81         ctime2=`${fstest} lstat ${n0} ctime`
82         test_check $ctime1 -eq $ctime2
83         if [ "${type}" = "dir" ]; then
84                 expect 0 rmdir ${n0}
85         else
86                 expect 0 unlink ${n0}
87         fi
88 done
89
90 cd ${cdir}
91 expect 0 rmdir ${n3}