1271294Sngie#!/bin/sh
2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/rename/00.t 211352 2010-08-15 21:24:17Z pjd $
3271294Sngie
4271294Sngiedesc="rename changes file name"
5271294Sngie
6271294Sngiedir=`dirname $0`
7271294Sngie. ${dir}/../misc.sh
8271294Sngie
9271294Sngieecho "1..150"
10271294Sngie
11271294Sngien0=`namegen`
12271294Sngien1=`namegen`
13271294Sngien2=`namegen`
14271294Sngien3=`namegen`
15271294Sngie
16271294Sngieexpect 0 mkdir ${n3} 0755
17271294Sngiecdir=`pwd`
18271294Sngiecd ${n3}
19271294Sngie
20271294Sngiefor type in regular fifo block char socket; do
21271294Sngie	create_file ${type} ${n0} 0644
22271294Sngie	expect ${type},0644,1 lstat ${n0} type,mode,nlink
23271294Sngie	inode=`${fstest} lstat ${n0} inode`
24271294Sngie	expect 0 rename ${n0} ${n1}
25271294Sngie	expect ENOENT lstat ${n0} type,mode,nlink
26271294Sngie	expect ${type},${inode},0644,1 lstat ${n1} type,inode,mode,nlink
27271294Sngie	expect 0 link ${n1} ${n0}
28271294Sngie	expect ${type},${inode},0644,2 lstat ${n0} type,inode,mode,nlink
29271294Sngie	expect ${type},${inode},0644,2 lstat ${n1} type,inode,mode,nlink
30271294Sngie	expect 0 rename ${n1} ${n2}
31271294Sngie	expect ${type},${inode},0644,2 lstat ${n0} type,inode,mode,nlink
32271294Sngie	expect ENOENT lstat ${n1} type,mode,nlink
33271294Sngie	expect ${type},${inode},0644,2 lstat ${n2} type,inode,mode,nlink
34271294Sngie	expect 0 unlink ${n0}
35271294Sngie	expect 0 unlink ${n2}
36271294Sngiedone
37271294Sngie
38271294Sngieexpect 0 mkdir ${n0} 0755
39271294Sngieexpect dir,0755 lstat ${n0} type,mode
40271294Sngieinode=`${fstest} lstat ${n0} inode`
41271294Sngieexpect 0 rename ${n0} ${n1}
42271294Sngieexpect ENOENT lstat ${n0} type,mode
43271294Sngieexpect dir,${inode},0755 lstat ${n1} type,inode,mode
44271294Sngieexpect 0 rmdir ${n1}
45271294Sngie
46271294Sngieexpect 0 create ${n0} 0644
47271294Sngierinode=`${fstest} lstat ${n0} inode`
48271294Sngieexpect regular,0644 lstat ${n0} type,mode
49271294Sngieexpect 0 symlink ${n0} ${n1}
50271294Sngiesinode=`${fstest} lstat ${n1} inode`
51271294Sngieexpect regular,${rinode},0644 stat ${n1} type,inode,mode
52271294Sngieexpect symlink,${sinode} lstat ${n1} type,inode
53271294Sngieexpect 0 rename ${n1} ${n2}
54271294Sngieexpect regular,${rinode},0644 stat ${n0} type,inode,mode
55271294Sngieexpect ENOENT lstat ${n1} type,mode
56271294Sngieexpect symlink,${sinode} lstat ${n2} type,inode
57271294Sngieexpect 0 unlink ${n0}
58271294Sngieexpect 0 unlink ${n2}
59271294Sngie
60271294Sngie# successful rename(2) updates ctime.
61271294Sngiefor type in regular dir fifo block char socket symlink; do
62271294Sngie	create_file ${type} ${n0}
63271294Sngie	ctime1=`${fstest} lstat ${n0} ctime`
64271294Sngie	sleep 1
65271294Sngie	expect 0 rename ${n0} ${n1}
66271294Sngie	ctime2=`${fstest} lstat ${n1} ctime`
67271294Sngie	test_check $ctime1 -lt $ctime2
68271294Sngie	if [ "${type}" = "dir" ]; then
69271294Sngie		expect 0 rmdir ${n1}
70271294Sngie	else
71271294Sngie		expect 0 unlink ${n1}
72271294Sngie	fi
73271294Sngiedone
74271294Sngie
75271294Sngie# unsuccessful link(2) does not update ctime.
76271294Sngiefor type in regular dir fifo block char socket symlink; do
77271294Sngie	create_file ${type} ${n0}
78271294Sngie	ctime1=`${fstest} lstat ${n0} ctime`
79271294Sngie	sleep 1
80271294Sngie	expect EACCES -u 65534 rename ${n0} ${n1}
81271294Sngie	ctime2=`${fstest} lstat ${n0} ctime`
82271294Sngie	test_check $ctime1 -eq $ctime2
83271294Sngie	if [ "${type}" = "dir" ]; then
84271294Sngie		expect 0 rmdir ${n0}
85271294Sngie	else
86271294Sngie		expect 0 unlink ${n0}
87271294Sngie	fi
88271294Sngiedone
89271294Sngie
90271294Sngiecd ${cdir}
91271294Sngieexpect 0 rmdir ${n3}
92