1271294Sngie#!/bin/sh 2271294Sngie# $FreeBSD: head/tools/regression/pjdfstest/tests/link/00.t 211352 2010-08-15 21:24:17Z pjd $ 3271294Sngie 4271294Sngiedesc="link creates hardlinks" 5271294Sngie 6271294Sngiedir=`dirname $0` 7271294Sngie. ${dir}/../misc.sh 8271294Sngie 9271294Sngieecho "1..202" 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} 22271294Sngie expect ${type},1 lstat ${n0} type,nlink 23271294Sngie 24271294Sngie expect 0 link ${n0} ${n1} 25271294Sngie expect ${type},2 lstat ${n0} type,nlink 26271294Sngie expect ${type},2 lstat ${n1} type,nlink 27271294Sngie 28271294Sngie expect 0 link ${n1} ${n2} 29271294Sngie expect ${type},3 lstat ${n0} type,nlink 30271294Sngie expect ${type},3 lstat ${n1} type,nlink 31271294Sngie expect ${type},3 lstat ${n2} type,nlink 32271294Sngie 33271294Sngie expect 0 chmod ${n1} 0201 34271294Sngie expect 0 chown ${n1} 65534 65533 35271294Sngie 36271294Sngie expect ${type},0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid 37271294Sngie expect ${type},0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid 38271294Sngie expect ${type},0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid 39271294Sngie 40271294Sngie expect 0 unlink ${n0} 41271294Sngie expect ENOENT lstat ${n0} type,mode,nlink,uid,gid 42271294Sngie expect ${type},0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid 43271294Sngie expect ${type},0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid 44271294Sngie 45271294Sngie expect 0 unlink ${n2} 46271294Sngie expect ENOENT lstat ${n0} type,mode,nlink,uid,gid 47271294Sngie expect ${type},0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid 48271294Sngie expect ENOENT lstat ${n2} type,mode,nlink,uid,gid 49271294Sngie 50271294Sngie expect 0 unlink ${n1} 51271294Sngie expect ENOENT lstat ${n0} type,mode,nlink,uid,gid 52271294Sngie expect ENOENT lstat ${n1} type,mode,nlink,uid,gid 53271294Sngie expect ENOENT lstat ${n2} type,mode,nlink,uid,gid 54271294Sngiedone 55271294Sngie 56271294Sngie# successful link(2) updates ctime. 57271294Sngiefor type in regular fifo block char socket; do 58271294Sngie create_file ${type} ${n0} 59271294Sngie ctime1=`${fstest} stat ${n0} ctime` 60271294Sngie dctime1=`${fstest} stat . ctime` 61271294Sngie dmtime1=`${fstest} stat . mtime` 62271294Sngie sleep 1 63271294Sngie expect 0 link ${n0} ${n1} 64271294Sngie ctime2=`${fstest} stat ${n0} ctime` 65271294Sngie test_check $ctime1 -lt $ctime2 66271294Sngie dctime2=`${fstest} stat . ctime` 67271294Sngie test_check $dctime1 -lt $dctime2 68271294Sngie dmtime2=`${fstest} stat . mtime` 69271294Sngie test_check $dctime1 -lt $dmtime2 70271294Sngie expect 0 unlink ${n0} 71271294Sngie expect 0 unlink ${n1} 72271294Sngiedone 73271294Sngie 74271294Sngie# unsuccessful link(2) does not update ctime. 75271294Sngiefor type in regular fifo block char socket; do 76271294Sngie create_file ${type} ${n0} 77271294Sngie expect 0 -- chown ${n0} 65534 -1 78271294Sngie ctime1=`${fstest} stat ${n0} ctime` 79271294Sngie dctime1=`${fstest} stat . ctime` 80271294Sngie dmtime1=`${fstest} stat . mtime` 81271294Sngie sleep 1 82271294Sngie expect EACCES -u 65534 link ${n0} ${n1} 83271294Sngie ctime2=`${fstest} stat ${n0} ctime` 84271294Sngie test_check $ctime1 -eq $ctime2 85271294Sngie dctime2=`${fstest} stat . ctime` 86271294Sngie test_check $dctime1 -eq $dctime2 87271294Sngie dmtime2=`${fstest} stat . mtime` 88271294Sngie test_check $dctime1 -eq $dmtime2 89271294Sngie expect 0 unlink ${n0} 90271294Sngiedone 91271294Sngie 92271294Sngiecd ${cdir} 93271294Sngieexpect 0 rmdir ${n3} 94