1#!/bin/sh 2# $FreeBSD: src/tools/regression/fstest/tests/rename/00.t,v 1.1 2007/01/17 01:42:10 pjd Exp $ 3 4desc="rename changes file name" 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 17inode=`${FSTEST} lstat ${n0} inode` 18expect 0 rename ${n0} ${n1} 19expect ENOENT lstat ${n0} type,mode,nlink 20expect regular,${inode},0644,1 lstat ${n1} type,inode,mode,nlink 21expect 0 link ${n1} ${n0} 22expect regular,${inode},0644,2 lstat ${n0} type,inode,mode,nlink 23expect regular,${inode},0644,2 lstat ${n1} type,inode,mode,nlink 24expect 0 rename ${n1} ${n2} 25expect regular,${inode},0644,2 lstat ${n0} type,inode,mode,nlink 26expect ENOENT lstat ${n1} type,mode,nlink 27expect regular,${inode},0644,2 lstat ${n2} type,inode,mode,nlink 28expect 0 unlink ${n0} 29expect 0 unlink ${n2} 30 31expect 0 mkdir ${n0} 0755 32expect dir,0755 lstat ${n0} type,mode 33inode=`${FSTEST} lstat ${n0} inode` 34expect 0 rename ${n0} ${n1} 35expect ENOENT lstat ${n0} type,mode 36expect dir,${inode},0755 lstat ${n1} type,inode,mode 37expect 0 rmdir ${n1} 38 39expect 0 mkfifo ${n0} 0644 40expect fifo,0644,1 lstat ${n0} type,mode,nlink 41inode=`${FSTEST} lstat ${n0} inode` 42expect 0 rename ${n0} ${n1} 43expect ENOENT lstat ${n0} type,mode,nlink 44expect fifo,${inode},0644,1 lstat ${n1} type,inode,mode,nlink 45expect 0 link ${n1} ${n0} 46expect fifo,${inode},0644,2 lstat ${n0} type,inode,mode,nlink 47expect fifo,${inode},0644,2 lstat ${n1} type,inode,mode,nlink 48expect 0 rename ${n1} ${n2} 49expect fifo,${inode},0644,2 lstat ${n0} type,inode,mode,nlink 50expect ENOENT lstat ${n1} type,mode,nlink 51expect fifo,${inode},0644,2 lstat ${n2} type,inode,mode,nlink 52expect 0 unlink ${n0} 53expect 0 unlink ${n2} 54 55expect 0 create ${n0} 0644 56rinode=`${FSTEST} lstat ${n0} inode` 57expect regular,0644 lstat ${n0} type,mode 58expect 0 symlink ${n0} ${n1} 59sinode=`${FSTEST} lstat ${n1} inode` 60expect regular,${rinode},0644 stat ${n1} type,inode,mode 61expect symlink,${sinode} lstat ${n1} type,inode 62expect 0 rename ${n1} ${n2} 63expect regular,${rinode},0644 stat ${n0} type,inode,mode 64expect ENOENT lstat ${n1} type,mode 65expect symlink,${sinode} lstat ${n2} type,inode 66expect 0 unlink ${n0} 67expect 0 unlink ${n2} 68 69# successful rename(2) updates ctime. 70expect 0 create ${n0} 0644 71ctime1=`${FSTEST} stat ${n0} ctime` 72sleep 1 73expect 0 rename ${n0} ${n1} 74ctime2=`${FSTEST} stat ${n1} ctime` 75test_check $ctime1 -lt $ctime2 76expect 0 unlink ${n1} 77 78expect 0 mkdir ${n0} 0755 79ctime1=`${FSTEST} stat ${n0} ctime` 80sleep 1 81expect 0 rename ${n0} ${n1} 82ctime2=`${FSTEST} stat ${n1} ctime` 83test_check $ctime1 -lt $ctime2 84expect 0 rmdir ${n1} 85 86expect 0 mkfifo ${n0} 0644 87ctime1=`${FSTEST} stat ${n0} ctime` 88sleep 1 89expect 0 rename ${n0} ${n1} 90ctime2=`${FSTEST} stat ${n1} ctime` 91test_check $ctime1 -lt $ctime2 92expect 0 unlink ${n1} 93 94expect 0 symlink ${n2} ${n0} 95ctime1=`${FSTEST} lstat ${n0} ctime` 96sleep 1 97expect 0 rename ${n0} ${n1} 98ctime2=`${FSTEST} lstat ${n1} ctime` 99test_check $ctime1 -lt $ctime2 100expect 0 unlink ${n1} 101 102# unsuccessful link(2) does not update ctime. 103expect 0 create ${n0} 0644 104ctime1=`${FSTEST} stat ${n0} ctime` 105sleep 1 106expect EACCES -u 65534 rename ${n0} ${n1} 107ctime2=`${FSTEST} stat ${n0} ctime` 108test_check $ctime1 -eq $ctime2 109expect 0 unlink ${n0} 110 111expect 0 mkdir ${n0} 0755 112ctime1=`${FSTEST} stat ${n0} ctime` 113sleep 1 114expect EACCES -u 65534 rename ${n0} ${n1} 115ctime2=`${FSTEST} stat ${n0} ctime` 116test_check $ctime1 -eq $ctime2 117expect 0 rmdir ${n0} 118 119expect 0 mkfifo ${n0} 0644 120ctime1=`${FSTEST} stat ${n0} ctime` 121sleep 1 122expect EACCES -u 65534 rename ${n0} ${n1} 123ctime2=`${FSTEST} stat ${n0} ctime` 124test_check $ctime1 -eq $ctime2 125expect 0 unlink ${n0} 126 127expect 0 symlink ${n2} ${n0} 128ctime1=`${FSTEST} lstat ${n0} ctime` 129sleep 1 130expect EACCES -u 65534 rename ${n0} ${n1} 131ctime2=`${FSTEST} lstat ${n0} ctime` 132test_check $ctime1 -eq $ctime2 133expect 0 unlink ${n0} 134 135cd ${cdir} 136expect 0 rmdir ${n3} 137