From owner-svn-src-all@FreeBSD.ORG Fri Aug 6 20:51:39 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 628271065672; Fri, 6 Aug 2010 20:51:39 +0000 (UTC) (envelope-from pjd@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 500818FC0C; Fri, 6 Aug 2010 20:51:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o76KpdU5028316; Fri, 6 Aug 2010 20:51:39 GMT (envelope-from pjd@svn.freebsd.org) Received: (from pjd@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o76KpdI4028304; Fri, 6 Aug 2010 20:51:39 GMT (envelope-from pjd@svn.freebsd.org) Message-Id: <201008062051.o76KpdI4028304@svn.freebsd.org> From: Pawel Jakub Dawidek Date: Fri, 6 Aug 2010 20:51:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210967 - head/tools/regression/fstest/tests/mknod X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Aug 2010 20:51:39 -0000 Author: pjd Date: Fri Aug 6 20:51:39 2010 New Revision: 210967 URL: http://svn.freebsd.org/changeset/base/210967 Log: Add tests for mknod(2). Submitted by: Jan Senolt Submitted by: Milan Cermak Polished by: pjd Added: head/tools/regression/fstest/tests/mknod/ head/tools/regression/fstest/tests/mknod/00.t (contents, props changed) head/tools/regression/fstest/tests/mknod/01.t (contents, props changed) head/tools/regression/fstest/tests/mknod/02.t (contents, props changed) head/tools/regression/fstest/tests/mknod/03.t (contents, props changed) head/tools/regression/fstest/tests/mknod/04.t (contents, props changed) head/tools/regression/fstest/tests/mknod/05.t (contents, props changed) head/tools/regression/fstest/tests/mknod/06.t (contents, props changed) head/tools/regression/fstest/tests/mknod/07.t (contents, props changed) head/tools/regression/fstest/tests/mknod/08.t (contents, props changed) head/tools/regression/fstest/tests/mknod/09.t (contents, props changed) head/tools/regression/fstest/tests/mknod/10.t (contents, props changed) head/tools/regression/fstest/tests/mknod/11.t (contents, props changed) Added: head/tools/regression/fstest/tests/mknod/00.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/00.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,73 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod creates fifo files" + +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 FIFO shall be initialized from +# mode. The file permission bits of the mode argument shall be modified by the +# process' file creation mask. +expect 0 mknod ${n0} f 0755 0 0 +expect fifo,0755 lstat ${n0} type,mode +expect 0 unlink ${n0} +expect 0 mknod ${n0} f 0151 0 0 +expect fifo,0151 lstat ${n0} type,mode +expect 0 unlink ${n0} +expect 0 -U 077 mknod ${n0} f 0151 0 0 +expect fifo,0100 lstat ${n0} type,mode +expect 0 unlink ${n0} +expect 0 -U 070 mknod ${n0} f 0345 0 0 +expect fifo,0305 lstat ${n0} type,mode +expect 0 unlink ${n0} +expect 0 -U 0501 mknod ${n0} f 0345 0 0 +expect fifo,0244 lstat ${n0} type,mode +expect 0 unlink ${n0} + +# POSIX: The FIFO's user ID shall be set to the process' effective user ID. +# The FIFO'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 mknod ${n0} f 0755 0 0 +expect 65535,65535 lstat ${n0} uid,gid +expect 0 unlink ${n0} +expect 0 -u 65535 -g 65534 mknod ${n0} f 0755 0 0 +expect "65535,6553[45]" lstat ${n0} uid,gid +expect 0 unlink ${n0} +expect 0 chmod . 0777 +expect 0 -u 65534 -g 65533 mknod ${n0} f 0755 0 0 +expect "65534,6553[35]" lstat ${n0} uid,gid +expect 0 unlink ${n0} + +# POSIX: Upon successful completion, mkfifo() shall mark for update the +# st_atime, st_ctime, and st_mtime fields of the file. 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 mknod ${n0} f 0755 0 0 +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 unlink ${n0} + +cd ${cdir} +expect 0 rmdir ${n1} Added: head/tools/regression/fstest/tests/mknod/01.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/01.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,18 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod returns ENOTDIR if a component of the path prefix is not a directory" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..5" + +n0=`namegen` +n1=`namegen` + +expect 0 mkdir ${n0} 0755 +expect 0 create ${n0}/${n1} 0644 +expect ENOTDIR mknod ${n0}/${n1}/test f 0644 0 0 +expect 0 unlink ${n0}/${n1} +expect 0 rmdir ${n0} Added: head/tools/regression/fstest/tests/mknod/02.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/02.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,13 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod returns ENAMETOOLONG if a component of a pathname exceeded 255 characters" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..3" + +expect 0 mknod ${name255} f 0644 0 0 +expect 0 unlink ${name255} +expect ENAMETOOLONG mknod ${name256} f 0644 0 0 Added: head/tools/regression/fstest/tests/mknod/03.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/03.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,21 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod returns ENAMETOOLONG if an entire path name exceeded 1023 characters" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..11" + +expect 0 mkdir ${name255} 0755 # 1 +expect 0 mkdir ${name255}/${name255} 0755 # 2 +expect 0 mkdir ${name255}/${name255}/${name255} 0755 # 3 +expect 0 mkdir ${path1021} 0755 # 4 +expect 0 mknod ${path1023} f 0644 0 0 # 5 +expect 0 unlink ${path1023} # 6 +expect ENAMETOOLONG mknod ${path1024} f 0644 0 0 # 7 +expect 0 rmdir ${path1021} # 8 +expect 0 rmdir ${name255}/${name255}/${name255} # 9 +expect 0 rmdir ${name255}/${name255} # 10 +expect 0 rmdir ${name255} # 11 Added: head/tools/regression/fstest/tests/mknod/04.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/04.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,16 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mkfifo 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 mknod ${n0}/${n1}/test f 0644 0 0 +expect 0 rmdir ${n0} Added: head/tools/regression/fstest/tests/mknod/05.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/05.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,29 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod 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 mknod ${n1}/${n2} f 0644 0 0 +expect 0 -u 65534 -g 65534 unlink ${n1}/${n2} +expect 0 chmod ${n1} 0644 +expect EACCES -u 65534 -g 65534 mknod ${n1}/${n2} f 0644 0 0 +expect 0 chmod ${n1} 0755 +expect 0 -u 65534 -g 65534 mknod ${n1}/${n2} f 0644 0 0 +expect 0 -u 65534 -g 65534 unlink ${n1}/${n2} +expect 0 rmdir ${n1} +cd ${cdir} +expect 0 rmdir ${n0} Added: head/tools/regression/fstest/tests/mknod/06.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/06.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,29 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod returns EACCES when write permission is denied on the parent directory of the file 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 mknod ${n1}/${n2} f 0644 0 0 +expect 0 -u 65534 -g 65534 unlink ${n1}/${n2} +expect 0 chmod ${n1} 0555 +expect EACCES -u 65534 -g 65534 mknod ${n1}/${n2} f 0644 0 0 +expect 0 chmod ${n1} 0755 +expect 0 -u 65534 -g 65534 mknod ${n1}/${n2} f 0644 0 0 +expect 0 -u 65534 -g 65534 unlink ${n1}/${n2} +expect 0 rmdir ${n1} +cd ${cdir} +expect 0 rmdir ${n0} Added: head/tools/regression/fstest/tests/mknod/07.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/07.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,19 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod 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 mknod ${n0}/test f 0644 0 0 +expect ELOOP mknod ${n1}/test f 0644 0 0 +expect 0 unlink ${n0} +expect 0 unlink ${n1} Added: head/tools/regression/fstest/tests/mknod/08.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/08.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,35 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod returns EEXIST if the named file exists" + +dir=`dirname $0` +. ${dir}/../misc.sh + +echo "1..18" + +n0=`namegen` + +expect 0 mkdir ${n0} 0755 +expect EEXIST mknod ${n0} f 0644 0 0 +expect 0 rmdir ${n0} + +expect 0 create ${n0} 0644 +expect EEXIST mknod ${n0} f 0644 0 0 +expect 0 unlink ${n0} + +expect 0 symlink test ${n0} +expect EEXIST mknod ${n0} f 0644 0 0 +expect 0 unlink ${n0} + +expect 0 mkfifo ${n0} 0644 +expect EEXIST mknod ${n0} f 0644 0 0 +expect 0 unlink ${n0} + +expect 0 bind ${n0} +expect EEXIST mknod ${n0} f 0644 0 0 +expect 0 unlink ${n0} + +expect 0 mknod ${n0} f 0644 0 0 +expect EEXIST mknod ${n0} f 0644 0 0 +expect 0 unlink ${n0} Added: head/tools/regression/fstest/tests/mknod/09.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/09.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,64 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod returns EPERM if the parent directory of the file to be created has its immutable flag set" + +dir=`dirname $0` +. ${dir}/../misc.sh + +require chflags + +case "${os}:${fs}" in +FreeBSD:UFS) + echo "1..30" + ;; +*) + echo "1..17" + ;; +esac + +n0=`namegen` +n1=`namegen` + +expect 0 mkdir ${n0} 0755 + +expect 0 mknod ${n0}/${n1} f 0644 0 0 +expect 0 unlink ${n0}/${n1} + +expect 0 chflags ${n0} SF_IMMUTABLE +expect EPERM mknod ${n0}/${n1} f 0644 0 0 +expect 0 chflags ${n0} none +expect 0 mknod ${n0}/${n1} f 0644 0 0 +expect 0 unlink ${n0}/${n1} + +expect 0 chflags ${n0} SF_APPEND +expect 0 mknod ${n0}/${n1} f 0644 0 0 +expect 0 chflags ${n0} none +expect 0 unlink ${n0}/${n1} + +expect 0 chflags ${n0} SF_NOUNLINK +expect 0 mknod ${n0}/${n1} f 0644 0 0 +expect 0 unlink ${n0}/${n1} +expect 0 chflags ${n0} none + +case "${os}:${fs}" in +FreeBSD:UFS) + expect 0 chflags ${n0} UF_IMMUTABLE + expect EPERM mknod ${n0}/${n1} f 0644 0 0 + expect 0 chflags ${n0} none + expect 0 mknod ${n0}/${n1} f 0644 0 0 + expect 0 unlink ${n0}/${n1} + + expect 0 chflags ${n0} UF_APPEND + expect 0 mknod ${n0}/${n1} f 0644 0 0 + expect 0 chflags ${n0} none + expect 0 unlink ${n0}/${n1} + + expect 0 chflags ${n0} UF_NOUNLINK + expect 0 mknod ${n0}/${n1} f 0644 0 0 + expect 0 unlink ${n0}/${n1} + expect 0 chflags ${n0} none + ;; +esac + +expect 0 rmdir ${n0} Added: head/tools/regression/fstest/tests/mknod/10.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/10.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,12 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod 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 mknod NULL f 0644 0 0 +expect EFAULT mknod DEADCODE f 0644 0 0 Added: head/tools/regression/fstest/tests/mknod/11.t ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/fstest/tests/mknod/11.t Fri Aug 6 20:51:39 2010 (r210967) @@ -0,0 +1,79 @@ +#!/bin/sh +# $FreeBSD$ + +desc="mknod creates device files" + +dir=`dirname $0` +. ${dir}/../misc.sh + +case "${os}" in +SunOS) + echo "1..40" + ;; +*) + echo "1..28" + ;; +esac + +n0=`namegen` +n1=`namegen` + +expect 0 mkdir ${n1} 0755 +cdir=`pwd` +cd ${n1} + +for type in c b; do + case "${type}" in + c) + stattype="char" + ;; + b) + stattype="block" + ;; + esac + + # Create char special with old-style numbers + expect 0 mknod ${n0} ${type} 0755 1 2 + expect ${stattype},0755 lstat ${n0} type,mode + expect 1,2 lstat ${n0} major,minor + expect EEXIST mknod ${n0} ${type} 0777 3 4 + expect 0 unlink ${n0} + + case "${os}" in + SunOS) + # Create char special with new-style numbers + expect 0 mknod ${n0} ${type} 0755 4095 4095 + expect ${stattype},0755 lstat ${n0} type,mode + expect 4095,4095 lstat ${n0} major,minor + expect EEXIST mknod ${n0} ${type} 0777 4000 4000 + expect 0 unlink ${n0} + + # mknod returns EINVAL if device's numbers are too big + # for 32-bit solaris !! + expect EINVAL mknod ${n0} ${type} 0755 4096 262144 + ;; + esac + + # POSIX: Upon successful completion, mknod(2) shall mark for update the + # st_atime, st_ctime, and st_mtime fields of the file. 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 mknod ${n0} ${type} 0755 1 2 + 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 unlink ${n0} +done + +cd ${cdir} +expect 0 rmdir ${n1}