diff options
Diffstat (limited to 'tests/link')
| -rw-r--r-- | tests/link/00.t | 93 | ||||
| -rw-r--r-- | tests/link/01.t | 24 | ||||
| -rw-r--r-- | tests/link/02.t | 25 | ||||
| -rw-r--r-- | tests/link/03.t | 31 | ||||
| -rw-r--r-- | tests/link/04.t | 20 | ||||
| -rw-r--r-- | tests/link/05.t | 36 | ||||
| -rw-r--r-- | tests/link/06.t | 43 | ||||
| -rw-r--r-- | tests/link/07.t | 41 | ||||
| -rw-r--r-- | tests/link/08.t | 24 | ||||
| -rw-r--r-- | tests/link/09.t | 18 | ||||
| -rw-r--r-- | tests/link/10.t | 26 | ||||
| -rw-r--r-- | tests/link/11.t | 41 | ||||
| -rw-r--r-- | tests/link/12.t | 95 | ||||
| -rw-r--r-- | tests/link/13.t | 86 | ||||
| -rw-r--r-- | tests/link/14.t | 29 | ||||
| -rw-r--r-- | tests/link/15.t | 33 | ||||
| -rw-r--r-- | tests/link/16.t | 34 | ||||
| -rw-r--r-- | tests/link/17.t | 20 |
18 files changed, 719 insertions, 0 deletions
diff --git a/tests/link/00.t b/tests/link/00.t new file mode 100644 index 0000000000000..1bcb32ad17ac9 --- /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} diff --git a/tests/link/01.t b/tests/link/01.t new file mode 100644 index 0000000000000..fe05aeba7119d --- /dev/null +++ b/tests/link/01.t @@ -0,0 +1,24 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/01.t 211474 2010-08-18 22:06:43Z pjd $ + +desc="link returns ENOTDIR if a component of either path prefix is not a directory" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..32" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 +for type in regular fifo block char socket; do + create_file ${type} ${n0}/${n1} + expect ENOTDIR link ${n0}/${n1}/test ${n0}/${n2} + create_file ${type} ${n0}/${n2} + expect ENOTDIR link ${n0}/${n2} ${n0}/${n1}/test + expect 0 unlink ${n0}/${n1} + expect 0 unlink ${n0}/${n2} +done +expect 0 rmdir ${n0} diff --git a/tests/link/02.t b/tests/link/02.t new file mode 100644 index 0000000000000..ca3e092edf991 --- /dev/null +++ b/tests/link/02.t @@ -0,0 +1,25 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/02.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns ENAMETOOLONG if a component of either pathname exceeded {NAME_MAX} characters" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..10" + +n0=`namegen` +nx=`namegen_max` +nxx="${nx}x" + +expect 0 create ${nx} 0644 +expect 0 link ${nx} ${n0} +expect 0 unlink ${nx} +expect 0 link ${n0} ${nx} +expect 0 unlink ${n0} +expect 0 unlink ${nx} + +expect 0 create ${n0} 0644 +expect ENAMETOOLONG link ${n0} ${nxx} +expect 0 unlink ${n0} +expect ENAMETOOLONG link ${nxx} ${n0} diff --git a/tests/link/03.t b/tests/link/03.t new file mode 100644 index 0000000000000..22f8e55e0cb37 --- /dev/null +++ b/tests/link/03.t @@ -0,0 +1,31 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/03.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns ENAMETOOLONG if an entire length of either path name exceeded {PATH_MAX} characters" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..13" + +n0=`namegen` +nx=`dirgen_max` +nxx="${nx}x" + +mkdir -p "${nx%/*}" + +expect 0 create ${nx} 0644 +expect 0 link ${nx} ${n0} +expect 2 stat ${n0} nlink +expect 2 stat ${nx} nlink +expect 0 unlink ${nx} +expect 0 link ${n0} ${nx} +expect 2 stat ${n0} nlink +expect 2 stat ${nx} nlink +expect 0 unlink ${nx} +expect ENAMETOOLONG link ${n0} ${nxx} +expect 1 stat ${n0} nlink +expect 0 unlink ${n0} +expect ENAMETOOLONG link ${nxx} ${n0} + +rm -rf "${nx%%/*}" diff --git a/tests/link/04.t b/tests/link/04.t new file mode 100644 index 0000000000000..bb095396005ee --- /dev/null +++ b/tests/link/04.t @@ -0,0 +1,20 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/04.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns ENOENT if a component of either path prefix does not exist" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..6" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 +expect ENOENT link ${n0}/${n1}/test ${n2} +expect 0 create ${n2} 0644 +expect ENOENT link ${n2} ${n0}/${n1}/test +expect 0 unlink ${n2} +expect 0 rmdir ${n0} diff --git a/tests/link/05.t b/tests/link/05.t new file mode 100644 index 0000000000000..7db93fd96c674 --- /dev/null +++ b/tests/link/05.t @@ -0,0 +1,36 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/05.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EMLINK if the link count of the file named by name1 would exceed 32767" + +dir=`dirname $0` +. ${dir}/../misc.sh + +[ "${os}:${fs}" = "FreeBSD:UFS" ] || quick_exit + +echo "1..5" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 +n=`mdconfig -a -n -t malloc -s 1m` +newfs -i 1 /dev/md${n} >/dev/null +mount /dev/md${n} ${n0} +expect 0 create ${n0}/${n1} 0644 +i=1 +while :; do + link ${n0}/${n1} ${n0}/${i} >/dev/null 2>&1 + if [ $? -ne 0 ]; then + break + fi + i=`expr $i + 1` +done +test_check $i -eq 32767 + +expect EMLINK link ${n0}/${n1} ${n0}/${n2} + +umount /dev/md${n} +mdconfig -d -u ${n} +expect 0 rmdir ${n0} diff --git a/tests/link/06.t b/tests/link/06.t new file mode 100644 index 0000000000000..73ab01e9ae15e --- /dev/null +++ b/tests/link/06.t @@ -0,0 +1,43 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/06.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EACCES when a component of either path prefix denies search permission" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..18" + +n0=`namegen` +n1=`namegen` +n2=`namegen` +n3=`namegen` +n4=`namegen` + +expect 0 mkdir ${n0} 0755 +cdir=`pwd` +cd ${n0} + +expect 0 mkdir ${n1} 0755 +expect 0 chown ${n1} 65534 65534 +expect 0 mkdir ${n2} 0755 +expect 0 chown ${n2} 65534 65534 +expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 + +expect 0 -u 65534 -g 65534 link ${n1}/${n3} ${n2}/${n4} +expect 0 -u 65534 -g 65534 unlink ${n2}/${n4} + +expect 0 chmod ${n1} 0644 +expect EACCES -u 65534 -g 65534 link ${n1}/${n3} ${n1}/${n4} +expect EACCES -u 65534 -g 65534 link ${n1}/${n3} ${n2}/${n4} + +expect 0 chmod ${n1} 0755 +expect 0 chmod ${n2} 0644 +expect EACCES -u 65534 -g 65534 link ${n1}/${n3} ${n2}/${n4} + +expect 0 unlink ${n1}/${n3} +expect 0 rmdir ${n1} +expect 0 rmdir ${n2} + +cd ${cdir} +expect 0 rmdir ${n0} diff --git a/tests/link/07.t b/tests/link/07.t new file mode 100644 index 0000000000000..68495dd7c0b86 --- /dev/null +++ b/tests/link/07.t @@ -0,0 +1,41 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/07.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EACCES when the requested link requires writing in a directory with a mode that denies write permission" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..17" + +n0=`namegen` +n1=`namegen` +n2=`namegen` +n3=`namegen` +n4=`namegen` + +expect 0 mkdir ${n0} 0755 +cdir=`pwd` +cd ${n0} + +expect 0 mkdir ${n1} 0755 +expect 0 chown ${n1} 65534 65534 +expect 0 mkdir ${n2} 0755 +expect 0 chown ${n2} 65534 65534 +expect 0 -u 65534 -g 65534 create ${n1}/${n3} 0644 + +expect 0 -u 65534 -g 65534 link ${n1}/${n3} ${n2}/${n4} +expect 0 -u 65534 -g 65534 unlink ${n2}/${n4} + +expect 0 chmod ${n2} 0555 +expect EACCES -u 65534 -g 65534 link ${n1}/${n3} ${n2}/${n4} +expect 0 chmod ${n1} 0555 +expect EACCES -u 65534 -g 65534 link ${n1}/${n3} ${n1}/${n4} +expect 0 chmod ${n1} 0755 + +expect 0 unlink ${n1}/${n3} +expect 0 rmdir ${n1} +expect 0 rmdir ${n2} + +cd ${cdir} +expect 0 rmdir ${n0} diff --git a/tests/link/08.t b/tests/link/08.t new file mode 100644 index 0000000000000..f4599d50f01b9 --- /dev/null +++ b/tests/link/08.t @@ -0,0 +1,24 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/08.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns ELOOP if too many symbolic links were encountered in translating one of the pathnames" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..10" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 symlink ${n0} ${n1} +expect 0 symlink ${n1} ${n0} +expect ELOOP link ${n0}/test ${n2} +expect ELOOP link ${n1}/test ${n2} +expect 0 create ${n2} 0644 +expect ELOOP link ${n2} ${n0}/test +expect ELOOP link ${n2} ${n1}/test +expect 0 unlink ${n0} +expect 0 unlink ${n1} +expect 0 unlink ${n2} diff --git a/tests/link/09.t b/tests/link/09.t new file mode 100644 index 0000000000000..5f89655d36106 --- /dev/null +++ b/tests/link/09.t @@ -0,0 +1,18 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/09.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns ENOENT if the source file does not exist" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..5" + +n0=`namegen` +n1=`namegen` + +expect 0 create ${n0} 0644 +expect 0 link ${n0} ${n1} +expect 0 unlink ${n0} +expect 0 unlink ${n1} +expect ENOENT link ${n0} ${n1} diff --git a/tests/link/10.t b/tests/link/10.t new file mode 100644 index 0000000000000..03ebbd25ffdbb --- /dev/null +++ b/tests/link/10.t @@ -0,0 +1,26 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/10.t 211474 2010-08-18 22:06:43Z pjd $ + +desc="link returns EEXIST if the destination file does exist" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..23" + +n0=`namegen` +n1=`namegen` + +expect 0 create ${n0} 0644 + +for type in regular dir fifo block char socket symlink; do + create_file ${type} ${n1} + expect EEXIST link ${n0} ${n1} + if [ "${type}" = "dir" ]; then + expect 0 rmdir ${n1} + else + expect 0 unlink ${n1} + fi +done + +expect 0 unlink ${n0} diff --git a/tests/link/11.t b/tests/link/11.t new file mode 100644 index 0000000000000..260342cd1d315 --- /dev/null +++ b/tests/link/11.t @@ -0,0 +1,41 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/11.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EPERM if the source file is a directory" + +dir=`dirname $0` +. ${dir}/../misc.sh + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +case "${os}:${fs}" in +SunOS:UFS) + echo "1..10" + + expect 0 mkdir ${n0} 0755 + expect 0 link ${n0} ${n1} + expect 0 unlink ${n1} + expect 0 rmdir ${n0} + ;; +*) + echo "1..9" + + expect 0 mkdir ${n0} 0755 + expect EPERM link ${n0} ${n1} + expect 0 rmdir ${n0} + ;; +esac + +expect 0 mkdir ${n0} 0755 +expect 0 chown ${n0} 65534 65534 +cdir=`pwd` +cd ${n0} + +expect 0 -u 65534 -g 65534 mkdir ${n1} 0755 +expect EPERM -u 65534 -g 65534 link ${n1} ${n2} +expect 0 -u 65534 -g 65534 rmdir ${n1} + +cd ${cdir} +expect 0 rmdir ${n0} diff --git a/tests/link/12.t b/tests/link/12.t new file mode 100644 index 0000000000000..a5408b6564181 --- /dev/null +++ b/tests/link/12.t @@ -0,0 +1,95 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/12.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EPERM if the source file has its immutable or append-only flag set" + +dir=`dirname $0` +. ${dir}/../misc.sh + +require chflags + +case "${os}:${fs}" in +FreeBSD:ZFS) + echo "1..27" + ;; +FreeBSD:UFS) + echo "1..48" + ;; +*) + quick_exit +esac + +n0=`namegen` +n1=`namegen` + +expect 0 create ${n0} 0644 + +expect 1 stat ${n0} nlink +expect 0 link ${n0} ${n1} +expect 2 stat ${n0} nlink +expect 0 unlink ${n1} +expect 1 stat ${n0} nlink + +expect 0 chflags ${n0} SF_IMMUTABLE +todo FreeBSD:ZFS "Creating a hard link to a file protected by SF_IMMUTABLE should return EPERM." +expect EPERM link ${n0} ${n1} +todo FreeBSD:ZFS "Creating a hard link to a file protected by SF_IMMUTABLE should return EPERM." +expect 1 stat ${n0} nlink +expect 0 chflags ${n0} none +todo FreeBSD:ZFS "Creating a hard link to a file protected by SF_IMMUTABLE should return EPERM." +expect 0 link ${n0} ${n1} +expect 2 stat ${n0} nlink +expect 0 unlink ${n1} +expect 1 stat ${n0} nlink + +expect 0 chflags ${n0} SF_NOUNLINK +expect 0 link ${n0} ${n1} +expect 2 stat ${n0} nlink +expect 0 chflags ${n0} none +expect 0 unlink ${n1} +expect 1 stat ${n0} nlink + +case "${os}:${fs}" in +FreeBSD:ZFS) + expect 0 chflags ${n0} SF_APPEND + expect 0 link ${n0} ${n1} + expect 2 stat ${n0} nlink + expect 0 chflags ${n0} none + expect 0 unlink ${n1} + expect 1 stat ${n0} nlink + ;; +FreeBSD:UFS) + expect 0 chflags ${n0} SF_APPEND + expect EPERM link ${n0} ${n1} + expect 0 chflags ${n0} none + expect 0 link ${n0} ${n1} + expect 2 stat ${n0} nlink + expect 0 unlink ${n1} + expect 1 stat ${n0} nlink + + expect 0 chflags ${n0} UF_IMMUTABLE + expect EPERM link ${n0} ${n1} + expect 0 chflags ${n0} none + expect 0 link ${n0} ${n1} + expect 2 stat ${n0} nlink + expect 0 unlink ${n1} + expect 1 stat ${n0} nlink + + expect 0 chflags ${n0} UF_NOUNLINK + expect 0 link ${n0} ${n1} + expect 2 stat ${n0} nlink + expect 0 chflags ${n0} none + expect 0 unlink ${n1} + expect 1 stat ${n0} nlink + + expect 0 chflags ${n0} UF_APPEND + expect EPERM link ${n0} ${n1} + expect 0 chflags ${n0} none + expect 0 link ${n0} ${n1} + expect 2 stat ${n0} nlink + expect 0 unlink ${n1} + expect 1 stat ${n0} nlink + ;; +esac + +expect 0 unlink ${n0} diff --git a/tests/link/13.t b/tests/link/13.t new file mode 100644 index 0000000000000..2da8621f23cc1 --- /dev/null +++ b/tests/link/13.t @@ -0,0 +1,86 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/13.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EPERM if the parent directory of the destination file has its immutable flag set" + +dir=`dirname $0` +. ${dir}/../misc.sh + +require chflags + +case "${os}:${fs}" in +FreeBSD:ZFS) + echo "1..29" + ;; +FreeBSD:UFS) + echo "1..49" + ;; +*) + quick_exit +esac + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 + +expect 0 create ${n0}/${n1} 0644 +expect 1 stat ${n0}/${n1} nlink +expect 0 link ${n0}/${n1} ${n0}/${n2} +expect 2 stat ${n0}/${n1} nlink +expect 0 unlink ${n0}/${n2} +expect 1 stat ${n0}/${n1} nlink + +expect 0 chflags ${n0} SF_IMMUTABLE +expect EPERM link ${n0}/${n1} ${n0}/${n2} +expect 1 stat ${n0}/${n1} nlink +expect 0 chflags ${n0} none +expect 0 link ${n0}/${n1} ${n0}/${n2} +expect 2 stat ${n0}/${n1} nlink +expect 0 unlink ${n0}/${n2} +expect 1 stat ${n0}/${n1} nlink + +expect 0 chflags ${n0} SF_NOUNLINK +expect 0 link ${n0}/${n1} ${n0}/${n2} +expect 2 stat ${n0}/${n1} nlink +expect 0 chflags ${n0} none +expect 0 unlink ${n0}/${n2} +expect 1 stat ${n0}/${n1} nlink + +expect 0 chflags ${n0} SF_APPEND +expect 0 link ${n0}/${n1} ${n0}/${n2} +expect 2 stat ${n0}/${n1} nlink +expect 0 chflags ${n0} none +expect 0 unlink ${n0}/${n2} +expect 1 stat ${n0}/${n1} nlink + +case "${os}:${fs}" in +FreeBSD:UFS) + expect 0 chflags ${n0} UF_IMMUTABLE + expect EPERM link ${n0}/${n1} ${n0}/${n2} + expect 1 stat ${n0}/${n1} nlink + expect 0 chflags ${n0} none + expect 0 link ${n0}/${n1} ${n0}/${n2} + expect 2 stat ${n0}/${n1} nlink + expect 0 unlink ${n0}/${n2} + expect 1 stat ${n0}/${n1} nlink + + expect 0 chflags ${n0} UF_NOUNLINK + expect 0 link ${n0}/${n1} ${n0}/${n2} + expect 2 stat ${n0}/${n1} nlink + expect 0 chflags ${n0} none + expect 0 unlink ${n0}/${n2} + expect 1 stat ${n0}/${n1} nlink + + expect 0 chflags ${n0} UF_APPEND + expect 0 link ${n0}/${n1} ${n0}/${n2} + expect 2 stat ${n0}/${n1} nlink + expect 0 chflags ${n0} none + expect 0 unlink ${n0}/${n2} + expect 1 stat ${n0}/${n1} nlink + ;; +esac + +expect 0 unlink ${n0}/${n1} +expect 0 rmdir ${n0} diff --git a/tests/link/14.t b/tests/link/14.t new file mode 100644 index 0000000000000..3a05dc0d10bce --- /dev/null +++ b/tests/link/14.t @@ -0,0 +1,29 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/14.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EXDEV if the source and the destination files are on different file systems" + +dir=`dirname $0` +. ${dir}/../misc.sh + +[ "${os}" = "FreeBSD" ] || quick_exit + +echo "1..8" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 +n=`mdconfig -a -n -t malloc -s 1m` +newfs /dev/md${n} >/dev/null +mount /dev/md${n} ${n0} +expect 0 create ${n0}/${n1} 0644 +expect EXDEV link ${n0}/${n1} ${n2} +expect 0 unlink ${n0}/${n1} +expect 0 create ${n1} 0644 +expect EXDEV link ${n1} ${n0}/${n2} +expect 0 unlink ${n1} +umount /dev/md${n} +mdconfig -d -u ${n} +expect 0 rmdir ${n0} diff --git a/tests/link/15.t b/tests/link/15.t new file mode 100644 index 0000000000000..972176bed08fd --- /dev/null +++ b/tests/link/15.t @@ -0,0 +1,33 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/15.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns ENOSPC if the directory in which the entry for the new link is being placed cannot be extended because there is no space left on the file system containing the directory" + +dir=`dirname $0` +. ${dir}/../misc.sh + +[ "${os}:${fs}" = "FreeBSD:UFS" ] || quick_exit + +echo "1..4" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 +n=`mdconfig -a -n -t malloc -s 256k` +newfs /dev/md${n} >/dev/null +mount /dev/md${n} ${n0} +expect 0 create ${n0}/${n1} 0644 +i=0 +while :; do + link ${n0}/${n1} ${n0}/${i} >/dev/null 2>&1 + if [ $? -ne 0 ]; then + break + fi + i=`expr $i + 1` +done +expect ENOSPC link ${n0}/${n1} ${n0}/${n2} +umount /dev/md${n} +mdconfig -d -u ${n} +expect 0 rmdir ${n0} diff --git a/tests/link/16.t b/tests/link/16.t new file mode 100644 index 0000000000000..56485ec1bee9b --- /dev/null +++ b/tests/link/16.t @@ -0,0 +1,34 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/16.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EROFS if the requested link requires writing in a directory on a read-only file system" + +dir=`dirname $0` +. ${dir}/../misc.sh + +[ "${os}" = "FreeBSD" ] || quick_exit + +echo "1..9" + +n0=`namegen` +n1=`namegen` +n2=`namegen` + +expect 0 mkdir ${n0} 0755 +n=`mdconfig -a -n -t malloc -s 1m` +newfs /dev/md${n} >/dev/null +mount /dev/md${n} ${n0} +expect 0 create ${n0}/${n1} 0644 + +expect 0 link ${n0}/${n1} ${n0}/${n2} +expect 0 unlink ${n0}/${n2} +mount -ur /dev/md${n} +expect EROFS link ${n0}/${n1} ${n0}/${n2} +mount -uw /dev/md${n} +expect 0 link ${n0}/${n1} ${n0}/${n2} +expect 0 unlink ${n0}/${n2} + +expect 0 unlink ${n0}/${n1} +umount /dev/md${n} +mdconfig -d -u ${n} +expect 0 rmdir ${n0} diff --git a/tests/link/17.t b/tests/link/17.t new file mode 100644 index 0000000000000..9b7e6fc683660 --- /dev/null +++ b/tests/link/17.t @@ -0,0 +1,20 @@ +#!/bin/sh +# $FreeBSD: head/tools/regression/pjdfstest/tests/link/17.t 211352 2010-08-15 21:24:17Z pjd $ + +desc="link returns EFAULT if one of the pathnames specified is outside the process's allocated address space" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..8" + +n0=`namegen` + +expect 0 create ${n0} 0644 +expect EFAULT link ${n0} NULL +expect EFAULT link ${n0} DEADCODE +expect 0 unlink ${n0} +expect EFAULT link NULL ${n0} +expect EFAULT link DEADCODE ${n0} +expect EFAULT link NULL DEADCODE +expect EFAULT link DEADCODE NULL |
