summaryrefslogtreecommitdiffstats
path: root/tests/zfs-tests
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2019-12-27 12:11:27 -0800
committerGitHub <[email protected]>2019-12-27 12:11:27 -0800
commit590ff61a5520214c9ad7101c55d87adaa580e15e (patch)
tree0f2c879f66315da8ce032ddf9666bb9a7efa7350 /tests/zfs-tests
parentd5c97f3de7ac3d5568bc641cc87a2edf37f8b9b5 (diff)
ZTS: devices_001_pos and devices_002_neg
Update the devices_001_pos and devices_002_neg test cases such that the special block device file created is backed by a ZFS volume. Specifying a specific device allows the major and minor numbers to be easily determined. Furthermore, this avoids the potentially dangerous behavior of opening the first block device we happen to find under /dev/. Reviewed-by: Ryan Moeller <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Closes #9773
Diffstat (limited to 'tests/zfs-tests')
-rwxr-xr-xtests/zfs-tests/tests/functional/devices/devices_001_pos.ksh18
-rwxr-xr-xtests/zfs-tests/tests/functional/devices/devices_002_neg.ksh16
-rw-r--r--tests/zfs-tests/tests/functional/devices/devices_common.kshlib214
-rwxr-xr-xtests/zfs-tests/tests/functional/devices/setup.ksh2
4 files changed, 69 insertions, 181 deletions
diff --git a/tests/zfs-tests/tests/functional/devices/devices_001_pos.ksh b/tests/zfs-tests/tests/functional/devices/devices_001_pos.ksh
index ac031ed6a..2f2802bc6 100755
--- a/tests/zfs-tests/tests/functional/devices/devices_001_pos.ksh
+++ b/tests/zfs-tests/tests/functional/devices/devices_001_pos.ksh
@@ -42,7 +42,7 @@
# 1. Create pool and file system.
# 2. Set devices=on on this file system.
# 3. Separately create block device file and character file.
-# 4. Separately read from those two device files.
+# 4. Separately read and write from those two device files.
# 5. Check the return value, and make sure it succeeds.
#
@@ -55,12 +55,18 @@ log_onexit cleanup
log_must zfs set devices=on $TESTPOOL/$TESTFS
#
-# Separately create block device file and character device file, then try to
-# open them and make sure it succeed.
+# Create block device file backed by a ZFS volume.
+# Verify it can be opened, written, and read.
#
-create_dev_file b $TESTDIR/$TESTFILE1
-log_must dd if=$TESTDIR/$TESTFILE1 of=$TESTDIR/$TESTFILE1.out count=1
+create_dev_file b $TESTDIR/$TESTFILE1 $ZVOL_DEVDIR/$TESTPOOL/$TESTVOL
+log_must dd if=/dev/urandom of=$TESTDIR/$TESTFILE1.out1 count=1 bs=128k
+log_must dd if=$TESTDIR/$TESTFILE1.out1 of=$TESTDIR/$TESTFILE1 count=1 bs=128k
+log_must dd if=$TESTDIR/$TESTFILE1 of=$TESTDIR/$TESTFILE1.out2 count=1 bs=128k
+log_must cmp $TESTDIR/$TESTFILE1.out1 $TESTDIR/$TESTFILE1.out2
+
+# Create character device file backed by /dev/null
+# Verify it can be opened and written.
create_dev_file c $TESTDIR/$TESTFILE2
-log_must dd if=$TESTDIR/$TESTFILE2 of=$TESTDIR/$TESTFILE2.out count=1
+log_must dd if=/dev/urandom of=$TESTDIR/$TESTFILE2 count=1 bs=128k
log_pass "Setting devices=on on file system and testing it pass."
diff --git a/tests/zfs-tests/tests/functional/devices/devices_002_neg.ksh b/tests/zfs-tests/tests/functional/devices/devices_002_neg.ksh
index ce25502b8..a768c4aa6 100755
--- a/tests/zfs-tests/tests/functional/devices/devices_002_neg.ksh
+++ b/tests/zfs-tests/tests/functional/devices/devices_002_neg.ksh
@@ -42,7 +42,7 @@
# 1. Create pool and file system.
# 2. Set devices=off on this file system.
# 3. Separately create block device file and character file.
-# 4. Separately read from those two device files.
+# 4. Separately read and write from those two device files.
# 5. Check the return value, and make sure it failed.
#
@@ -55,12 +55,16 @@ log_onexit cleanup
log_must zfs set devices=off $TESTPOOL/$TESTFS
#
-# Separately create block device file and character device file, then try to
-# open them and make sure it failed.
+# Create block device file backed by a ZFS volume.
+# Verify it cannot be opened, written, and read.
#
-create_dev_file b $TESTDIR/$TESTFILE1
-log_mustnot dd if=$TESTDIR/$TESTFILE1 of=$TESTDIR/$TESTFILE1.out count=1
+create_dev_file b $TESTDIR/$TESTFILE1 $ZVOL_DEVDIR/$TESTPOOL/$TESTVOL
+log_mustnot dd if=/dev/urandom of=$TESTDIR/$TESTFILE1 count=1 bs=128k
+log_mustnot dd if=$TESTDIR/$TESTFILE1 of=/dev/null count=1 bs=128k
+
+# Create character device file backed by /dev/null
+# Verify it cannot be opened and written.
create_dev_file c $TESTDIR/$TESTFILE2
-log_mustnot dd if=$TESTDIR/$TESTFILE2 of=$TESTDIR/$TESTFILE2.out count=1
+log_mustnot dd if=/dev/urandom of=$TESTDIR/$TESTFILE2 count=1 bs=128k
log_pass "Setting devices=off on file system and testing it pass."
diff --git a/tests/zfs-tests/tests/functional/devices/devices_common.kshlib b/tests/zfs-tests/tests/functional/devices/devices_common.kshlib
index 2fa1dcff8..fa7fdbecf 100644
--- a/tests/zfs-tests/tests/functional/devices/devices_common.kshlib
+++ b/tests/zfs-tests/tests/functional/devices/devices_common.kshlib
@@ -36,192 +36,70 @@
#
# $1 device file type
# $2 file name
+# $3 device path (used for 'b' device type)
#
function create_dev_file
{
typeset filetype=$1
typeset filename=$2
-
- case $(uname) in
- FreeBSD)
- create_dev_file_freebsd "$filetype" "$filename"
- ;;
- Linux)
- create_dev_file_linux "$filetype" "$filename"
- ;;
- *)
- create_dev_file_illumos "$filetype" "$filename"
- ;;
- esac
-
- return 0
-}
-
-function create_dev_file_freebsd
-{
- typeset filetype=$1
- typeset filename=$2
+ typeset devstr=$3
case $filetype in
b)
- devtype=$(df -T / | grep -v "Type" | awk '{print $2}')
- case $devtype in
- zfs)
- rootpool=$(df / | grep -v "Filesystem" | \
- awk '{print $2}')
- rootpool=${rootpool#\(}
- rootpool=${rootpool%%/*}
-
- devstr=$(get_disklist $rootpool)
- devstr=$(echo "$devstr" | \
- awk '{print $1}')
- [[ -z $devstr ]] && \
- log_fail "Can not get block device file."
- devstr=/dev/${devstr}
- ;;
- ufs)
- #
- # Get the existing block device file in current system.
- # And bring out the first one.
- #
- devstr=$(df -t ufs | \
- grep "^/dev/" | \
- head -n 1 | \
- awk '{print $1}')
- devstr=$(echo "$devstr" | \
- awk '{print $1}')
- [[ -z $devstr ]] && \
- log_fail "Can not get block device file."
+ case $(uname) in
+ Linux)
+ #
+ # stat(1) --format=FORMAT tokens
+ # %t - major device type in hex
+ # %T - minor device type in hex
+ #
+ major=$(stat --dereference --format="%t" "$devstr")
+ minor=$(stat --dereference --format="%T" "$devstr")
+ log_must mknod $filename b "0x${major}" "0x${minor}"
;;
*)
- log_unsupported "Unsupported fstype " \
- "for / ($devtype)," \
- "only ufs|zfs is supported."
+ #
+ # Get the device file information. i.e:
+ # $devstr: block special (28/768)
+ #
+ devstr=$(file $devstr)
+ major=${devstr##*\(}
+ major=${major%%/*}
+ minor=${devstr##*/}
+ minor=${minor%\)}
+ log_must mknod $filename b $major $minor
;;
esac
-
- #
- # Get the device file information. i.e:
- # /dev/c0t0d0s0: block special (28/768)
- #
- devstr=$(file $devstr)
-
- #
- # Bring out major and minor number.
- #
- major=${devstr##*\(}
- major=${major%%/*}
- minor=${devstr##*/}
- minor=${minor%\)}
-
- log_must mknod $filename b $major $minor
;;
c)
#
- # Create device file '/dev/null'
- #
- log_must mknod $filename c 13 2
- ;;
- *)
- log_fail "'$filetype' is wrong."
- ;;
- esac
-
- return 0
-}
-
-function create_dev_file_illumos
-{
- typeset filetype=$1
- typeset filename=$2
-
- case $filetype in
- b)
- devtype=$(df -n / | awk '{print $3}')
- case $devtype in
- zfs)
- rootpool=$(df / | \
- awk '{print $2}')
- rootpool=${rootpool#\(}
- rootpool=${rootpool%%/*}
-
- devstr=$(get_disklist $rootpool)
- devstr=$(echo "$devstr" | \
- awk '{print $1}')
- [[ -z $devstr ]] && \
- log_fail "Can not get block device file."
- devstr=$DEV_DSKDIR/${devstr}
+ # Create device file '/dev/null', $devstr is unused.
+ #
+ case $(uname) in
+ Linux)
+ #
+ # stat(1) --format=FORMAT tokens
+ # %t - major device type in hex
+ # %T - minor device type in hex
+ #
+ major=$(stat --format="%t" /dev/null)
+ minor=$(stat --format="%T" /dev/null)
+ log_must mknod $filename c "0x${major}" "0x${minor}"
;;
- ufs)
- #
- # Get the existing block device file in current system.
- # And bring out the first one.
- #
- devstr=$(df-lhF ufs | \
- grep "^${DEV_DSKDIR}" | \
- awk '{print $1}')
- devstr=$(echo "$devstr" | \
- awk '{print $1}')
- [[ -z $devstr ]] && \
- log_fail "Can not get block device file."
+ FreeBSD)
+ #
+ # Create device file '/dev/null'
+ #
+ major=13
+ minor=2
+ log_must mknod $filename b $major $minor
;;
*)
- log_unsupported "Unsupported fstype " \
- "for / ($devtype)," \
- "only ufs|zfs is supported."
+ major=$(getmajor mm)
+ minor=2
+ log_must mknod $filename b $major $minor
;;
esac
-
- #
- # Get the device file information. i.e:
- # $DEV_DSKDIR/c0t0d0s0: block special (28/768)
- #
- devstr=$(file $devstr)
-
- #
- # Bring out major and minor number.
- #
- major=${devstr##*\(}
- major=${major%%/*}
- minor=${devstr##*/}
- minor=${minor%\)}
-
- log_must mknod $filename b $major $minor
- ;;
- c)
- #
- # Create device file '/dev/null'
- #
- log_must mknod $filename c $(getmajor mm) 2
- ;;
- *)
- log_fail "'$filetype' is wrong."
- ;;
- esac
-
- return 0
-}
-
-function create_dev_file_linux
-{
- typeset filetype=$1
- typeset filename=$2
-
- case $filetype in
- b)
- major=$(awk '/[hsv]d/ { print $1; exit }' \
- /proc/partitions)
- minor=$(awk '/[hsv]d/ { print $2; exit }' \
- /proc/partitions)
- log_must mknod $filename b $major $minor
- ;;
- c)
- #
- # Create device file '/dev/null'
- #
- major=$(stat -c %t /dev/null)
- minor=$(stat -c %T /dev/null)
- log_must mknod $filename c $major $minor
;;
*)
log_fail "'$filetype' is wrong."
@@ -236,6 +114,6 @@ function cleanup
log_must zfs set devices=on $TESTPOOL/$TESTFS
log_must rm -f $TESTDIR/$TESTFILE1
log_must rm -f $TESTDIR/$TESTFILE2
- log_must rm -f $TESTDIR/$TESTFILE1.out
- log_must rm -f $TESTDIR/$TESTFILE2.out
+ log_must rm -f $TESTDIR/$TESTFILE1.out1
+ log_must rm -f $TESTDIR/$TESTFILE1.out2
}
diff --git a/tests/zfs-tests/tests/functional/devices/setup.ksh b/tests/zfs-tests/tests/functional/devices/setup.ksh
index fc5cec306..ee6cf83ac 100755
--- a/tests/zfs-tests/tests/functional/devices/setup.ksh
+++ b/tests/zfs-tests/tests/functional/devices/setup.ksh
@@ -32,4 +32,4 @@
. $STF_SUITE/include/libtest.shlib
DISK=${DISKS%% *}
-default_setup $DISK
+default_volume_setup $DISK