summaryrefslogtreecommitdiffstats
path: root/contrib/pjdfstest/tests/mkdir
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pjdfstest/tests/mkdir')
-rw-r--r--contrib/pjdfstest/tests/mkdir/00.t73
-rw-r--r--contrib/pjdfstest/tests/mkdir/01.t20
-rw-r--r--contrib/pjdfstest/tests/mkdir/02.t16
-rw-r--r--contrib/pjdfstest/tests/mkdir/03.t20
-rw-r--r--contrib/pjdfstest/tests/mkdir/04.t16
-rw-r--r--contrib/pjdfstest/tests/mkdir/05.t29
-rw-r--r--contrib/pjdfstest/tests/mkdir/06.t29
-rw-r--r--contrib/pjdfstest/tests/mkdir/07.t19
-rw-r--r--contrib/pjdfstest/tests/mkdir/08.t66
-rw-r--r--contrib/pjdfstest/tests/mkdir/09.t29
-rw-r--r--contrib/pjdfstest/tests/mkdir/10.t21
-rw-r--r--contrib/pjdfstest/tests/mkdir/11.t31
-rw-r--r--contrib/pjdfstest/tests/mkdir/12.t12
13 files changed, 381 insertions, 0 deletions
diff --git a/contrib/pjdfstest/tests/mkdir/00.t b/contrib/pjdfstest/tests/mkdir/00.t
new file mode 100644
index 0000000..fa1cbc1
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/00.t
@@ -0,0 +1,73 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/00.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir creates directories"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..36"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n1} 0755
+cdir=`pwd`
+cd ${n1}
+
+# POSIX: The file permission bits of the new directory shall be initialized from
+# mode. These file permission bits of the mode argument shall be modified by the
+# process' file creation mask.
+expect 0 mkdir ${n0} 0755
+expect dir,0755 lstat ${n0} type,mode
+expect 0 rmdir ${n0}
+expect 0 mkdir ${n0} 0151
+expect dir,0151 lstat ${n0} type,mode
+expect 0 rmdir ${n0}
+expect 0 -U 077 mkdir ${n0} 0151
+expect dir,0100 lstat ${n0} type,mode
+expect 0 rmdir ${n0}
+expect 0 -U 070 mkdir ${n0} 0345
+expect dir,0305 lstat ${n0} type,mode
+expect 0 rmdir ${n0}
+expect 0 -U 0501 mkdir ${n0} 0345
+expect dir,0244 lstat ${n0} type,mode
+expect 0 rmdir ${n0}
+
+# POSIX: The directory's user ID shall be set to the process' effective user ID.
+# The directory's group ID shall be set to the group ID of the parent directory
+# or to the effective group ID of the process.
+expect 0 chown . 65535 65535
+expect 0 -u 65535 -g 65535 mkdir ${n0} 0755
+expect 65535,65535 lstat ${n0} uid,gid
+expect 0 rmdir ${n0}
+expect 0 -u 65535 -g 65534 mkdir ${n0} 0755
+expect "65535,6553[45]" lstat ${n0} uid,gid
+expect 0 rmdir ${n0}
+expect 0 chmod . 0777
+expect 0 -u 65534 -g 65533 mkdir ${n0} 0755
+expect "65534,6553[35]" lstat ${n0} uid,gid
+expect 0 rmdir ${n0}
+
+# POSIX: Upon successful completion, mkdir() shall mark for update the st_atime,
+# st_ctime, and st_mtime fields of the directory. Also, the st_ctime and
+# st_mtime fields of the directory that contains the new entry shall be marked
+# for update.
+expect 0 chown . 0 0
+time=`${fstest} stat . ctime`
+sleep 1
+expect 0 mkdir ${n0} 0755
+atime=`${fstest} stat ${n0} atime`
+test_check $time -lt $atime
+mtime=`${fstest} stat ${n0} mtime`
+test_check $time -lt $mtime
+ctime=`${fstest} stat ${n0} ctime`
+test_check $time -lt $ctime
+mtime=`${fstest} stat . mtime`
+test_check $time -lt $mtime
+ctime=`${fstest} stat . ctime`
+test_check $time -lt $ctime
+expect 0 rmdir ${n0}
+
+cd ${cdir}
+expect 0 rmdir ${n1}
diff --git a/contrib/pjdfstest/tests/mkdir/01.t b/contrib/pjdfstest/tests/mkdir/01.t
new file mode 100644
index 0000000..c33ce1f
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/01.t
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/01.t 211474 2010-08-18 22:06:43Z pjd $
+
+desc="mkdir returns ENOTDIR if a component of the path prefix is not a directory"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..17"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+for type in regular fifo block char socket; do
+ create_file ${type} ${n0}/${n1}
+ expect ENOTDIR mkdir ${n0}/${n1}/test 0755
+ expect 0 unlink ${n0}/${n1}
+done
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/02.t b/contrib/pjdfstest/tests/mkdir/02.t
new file mode 100644
index 0000000..e877f20
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/02.t
@@ -0,0 +1,16 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/02.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns ENAMETOOLONG if a component of a pathname exceeded {NAME_MAX} characters"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..3"
+
+nx=`namegen_max`
+nxx="${nx}x"
+
+expect 0 mkdir ${nx} 0755
+expect 0 rmdir ${nx}
+expect ENAMETOOLONG mkdir ${nxx} 0755
diff --git a/contrib/pjdfstest/tests/mkdir/03.t b/contrib/pjdfstest/tests/mkdir/03.t
new file mode 100644
index 0000000..57ddd20
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/03.t
@@ -0,0 +1,20 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/03.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns ENAMETOOLONG if an entire path name exceeded {PATH_MAX} characters"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..3"
+
+nx=`dirgen_max`
+nxx="${nx}x"
+
+mkdir -p "${nx%/*}"
+
+expect 0 mkdir ${nx} 0755
+expect 0 rmdir ${nx}
+expect ENAMETOOLONG mkdir ${nxx} 0755
+
+rm -rf "${nx%%/*}"
diff --git a/contrib/pjdfstest/tests/mkdir/04.t b/contrib/pjdfstest/tests/mkdir/04.t
new file mode 100644
index 0000000..0917ef1
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/04.t
@@ -0,0 +1,16 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/04.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns ENOENT if a component of the path prefix does not exist"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..3"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+expect ENOENT mkdir ${n0}/${n1}/test 0755
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/05.t b/contrib/pjdfstest/tests/mkdir/05.t
new file mode 100644
index 0000000..de351ca
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/05.t
@@ -0,0 +1,29 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/05.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns EACCES when search permission is denied for a component of the path prefix"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..12"
+
+n0=`namegen`
+n1=`namegen`
+n2=`namegen`
+
+expect 0 mkdir ${n0} 0755
+cdir=`pwd`
+cd ${n0}
+expect 0 mkdir ${n1} 0755
+expect 0 chown ${n1} 65534 65534
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 chmod ${n1} 0644
+expect EACCES -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 chmod ${n1} 0755
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 rmdir ${n1}
+cd ${cdir}
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/06.t b/contrib/pjdfstest/tests/mkdir/06.t
new file mode 100644
index 0000000..2d2b8c2
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/06.t
@@ -0,0 +1,29 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/06.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns EACCES when write permission is denied on the parent directory of the directory to be created"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..12"
+
+n0=`namegen`
+n1=`namegen`
+n2=`namegen`
+
+expect 0 mkdir ${n0} 0755
+cdir=`pwd`
+cd ${n0}
+expect 0 mkdir ${n1} 0755
+expect 0 chown ${n1} 65534 65534
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 chmod ${n1} 0555
+expect EACCES -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 chmod ${n1} 0755
+expect 0 -u 65534 -g 65534 mkdir ${n1}/${n2} 0755
+expect 0 -u 65534 -g 65534 rmdir ${n1}/${n2}
+expect 0 rmdir ${n1}
+cd ${cdir}
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/07.t b/contrib/pjdfstest/tests/mkdir/07.t
new file mode 100644
index 0000000..72ac2b6
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/07.t
@@ -0,0 +1,19 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/07.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns ELOOP if too many symbolic links were encountered in translating the pathname"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..6"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 symlink ${n0} ${n1}
+expect 0 symlink ${n1} ${n0}
+expect ELOOP mkdir ${n0}/test 0755
+expect ELOOP mkdir ${n1}/test 0755
+expect 0 unlink ${n0}
+expect 0 unlink ${n1}
diff --git a/contrib/pjdfstest/tests/mkdir/08.t b/contrib/pjdfstest/tests/mkdir/08.t
new file mode 100644
index 0000000..366f223
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/08.t
@@ -0,0 +1,66 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/08.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns EPERM if the parent directory of the directory to be created has its immutable flag set"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+require chflags
+
+case "${os}:${fs}" in
+FreeBSD:ZFS)
+ echo "1..17"
+ ;;
+FreeBSD:UFS)
+ echo "1..30"
+ ;;
+*)
+ quick_exit
+esac
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 rmdir ${n0}/${n1}
+
+expect 0 chflags ${n0} SF_IMMUTABLE
+expect EPERM mkdir ${n0}/${n1} 0755
+expect 0 chflags ${n0} none
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 rmdir ${n0}/${n1}
+
+expect 0 chflags ${n0} SF_NOUNLINK
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 rmdir ${n0}/${n1}
+expect 0 chflags ${n0} none
+
+expect 0 chflags ${n0} SF_APPEND
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 chflags ${n0} none
+expect 0 rmdir ${n0}/${n1}
+
+case "${os}:${fs}" in
+FreeBSD:UFS)
+ expect 0 chflags ${n0} UF_IMMUTABLE
+ expect EPERM mkdir ${n0}/${n1} 0755
+ expect 0 chflags ${n0} none
+ expect 0 mkdir ${n0}/${n1} 0755
+ expect 0 rmdir ${n0}/${n1}
+
+ expect 0 chflags ${n0} UF_NOUNLINK
+ expect 0 mkdir ${n0}/${n1} 0755
+ expect 0 rmdir ${n0}/${n1}
+ expect 0 chflags ${n0} none
+
+ expect 0 chflags ${n0} UF_APPEND
+ expect 0 mkdir ${n0}/${n1} 0755
+ expect 0 chflags ${n0} none
+ expect 0 rmdir ${n0}/${n1}
+ ;;
+esac
+
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/09.t b/contrib/pjdfstest/tests/mkdir/09.t
new file mode 100644
index 0000000..2035b31
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/09.t
@@ -0,0 +1,29 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/09.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns EROFS if the named file resides on a read-only file system"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+[ "${os}:${fs}" = "FreeBSD:UFS" ] || quick_exit
+
+echo "1..7"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+n=`mdconfig -a -n -t malloc -s 1m` || exit
+newfs /dev/md${n} >/dev/null || exit
+mount /dev/md${n} ${n0} || exit
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 rmdir ${n0}/${n1}
+mount -ur /dev/md${n}
+expect EROFS mkdir ${n0}/${n1} 0755
+mount -uw /dev/md${n}
+expect 0 mkdir ${n0}/${n1} 0755
+expect 0 rmdir ${n0}/${n1}
+umount /dev/md${n}
+mdconfig -d -u ${n} || exit
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/10.t b/contrib/pjdfstest/tests/mkdir/10.t
new file mode 100644
index 0000000..732dcb8
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/10.t
@@ -0,0 +1,21 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/10.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns EEXIST if the named file exists"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..21"
+
+n0=`namegen`
+
+for type in regular dir fifo block char socket symlink; do
+ create_file ${type} ${n0}
+ expect EEXIST mkdir ${n0} 0755
+ if [ "${type}" = "dir" ]; then
+ expect 0 rmdir ${n0}
+ else
+ expect 0 unlink ${n0}
+ fi
+done
diff --git a/contrib/pjdfstest/tests/mkdir/11.t b/contrib/pjdfstest/tests/mkdir/11.t
new file mode 100644
index 0000000..a0c9055
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/11.t
@@ -0,0 +1,31 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/11.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns ENOSPC if there are no free inodes on the file system on which the directory is being created"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+[ "${os}:${fs}" = "FreeBSD:UFS" ] || quick_exit
+
+echo "1..3"
+
+n0=`namegen`
+n1=`namegen`
+
+expect 0 mkdir ${n0} 0755
+n=`mdconfig -a -n -t malloc -s 512k` || exit
+newfs /dev/md${n} >/dev/null || exit
+mount /dev/md${n} ${n0} || exit
+i=0
+while :; do
+ mkdir ${n0}/${i} >/dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ break
+ fi
+ i=`expr $i + 1`
+done
+expect ENOSPC mkdir ${n0}/${n1} 0755
+umount /dev/md${n}
+mdconfig -d -u ${n} || exit
+expect 0 rmdir ${n0}
diff --git a/contrib/pjdfstest/tests/mkdir/12.t b/contrib/pjdfstest/tests/mkdir/12.t
new file mode 100644
index 0000000..7c27f74
--- /dev/null
+++ b/contrib/pjdfstest/tests/mkdir/12.t
@@ -0,0 +1,12 @@
+#!/bin/sh
+# $FreeBSD: head/tools/regression/pjdfstest/tests/mkdir/12.t 211352 2010-08-15 21:24:17Z pjd $
+
+desc="mkdir returns EFAULT if the path argument points outside the process's allocated address space"
+
+dir=`dirname $0`
+. ${dir}/../misc.sh
+
+echo "1..2"
+
+expect EFAULT mkdir NULL 0755
+expect EFAULT mkdir DEADCODE 0755
OpenPOWER on IntegriCloud