aboutsummaryrefslogtreecommitdiff
path: root/tests/link/00.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/link/00.t')
-rw-r--r--tests/link/00.t93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/link/00.t b/tests/link/00.t
new file mode 100644
index 000000000000..1bcb32ad17ac
--- /dev/null
+++ b/tests/link/00.t
@@ -0,0 +1,93 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/link/00.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="link creates hardlinks"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..202"
+
+n0=`namegen`
+n1=`namegen`
+n2=`namegen`
+n3=`namegen`
+
+expect 0 mkdir ${n3} 0755
+cdir=`pwd`
+cd ${n3}
+
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0}
+ expect ${type},1 lstat ${n0} type,nlink
+
+ expect 0 link ${n0} ${n1}
+ expect ${type},2 lstat ${n0} type,nlink
+ expect ${type},2 lstat ${n1} type,nlink
+
+ expect 0 link ${n1} ${n2}
+ expect ${type},3 lstat ${n0} type,nlink
+ expect ${type},3 lstat ${n1} type,nlink
+ expect ${type},3 lstat ${n2} type,nlink
+
+ expect 0 chmod ${n1} 0201
+ expect 0 chown ${n1} 65534 65533
+
+ expect ${type},0201,3,65534,65533 lstat ${n0} type,mode,nlink,uid,gid
+ expect ${type},0201,3,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
+ expect ${type},0201,3,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
+
+ expect 0 unlink ${n0}
+ expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
+ expect ${type},0201,2,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
+ expect ${type},0201,2,65534,65533 lstat ${n2} type,mode,nlink,uid,gid
+
+ expect 0 unlink ${n2}
+ expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
+ expect ${type},0201,1,65534,65533 lstat ${n1} type,mode,nlink,uid,gid
+ expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
+
+ expect 0 unlink ${n1}
+ expect ENOENT lstat ${n0} type,mode,nlink,uid,gid
+ expect ENOENT lstat ${n1} type,mode,nlink,uid,gid
+ expect ENOENT lstat ${n2} type,mode,nlink,uid,gid
+done
+
+# successful link(2) updates ctime.
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0}
+ ctime1=`${fstest} stat ${n0} ctime`
+ dctime1=`${fstest} stat . ctime`
+ dmtime1=`${fstest} stat . mtime`
+ sleep 1
+ expect 0 link ${n0} ${n1}
+ ctime2=`${fstest} stat ${n0} ctime`
+ test_check $ctime1 -lt $ctime2
+ dctime2=`${fstest} stat . ctime`
+ test_check $dctime1 -lt $dctime2
+ dmtime2=`${fstest} stat . mtime`
+ test_check $dctime1 -lt $dmtime2
+ expect 0 unlink ${n0}
+ expect 0 unlink ${n1}
+done
+
+# unsuccessful link(2) does not update ctime.
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0}
+ expect 0 -- chown ${n0} 65534 -1
+ ctime1=`${fstest} stat ${n0} ctime`
+ dctime1=`${fstest} stat . ctime`
+ dmtime1=`${fstest} stat . mtime`
+ sleep 1
+ expect EACCES -u 65534 link ${n0} ${n1}
+ ctime2=`${fstest} stat ${n0} ctime`
+ test_check $ctime1 -eq $ctime2
+ dctime2=`${fstest} stat . ctime`
+ test_check $dctime1 -eq $dctime2
+ dmtime2=`${fstest} stat . mtime`
+ test_check $dctime1 -eq $dmtime2
+ expect 0 unlink ${n0}
+done
+
+cd ${cdir}
+expect 0 rmdir ${n3}