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