aboutsummaryrefslogtreecommitdiff
path: root/tests/zfs-tests/tests/functional/devices/devices_common.kshlib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/zfs-tests/tests/functional/devices/devices_common.kshlib')
-rw-r--r--tests/zfs-tests/tests/functional/devices/devices_common.kshlib119
1 files changed, 119 insertions, 0 deletions
diff --git a/tests/zfs-tests/tests/functional/devices/devices_common.kshlib b/tests/zfs-tests/tests/functional/devices/devices_common.kshlib
new file mode 100644
index 000000000000..fa7fdbecf5fd
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/devices/devices_common.kshlib
@@ -0,0 +1,119 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+#
+# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
+#
+
+. $STF_SUITE/tests/functional/devices/devices.cfg
+. $STF_SUITE/include/libtest.shlib
+
+#
+# Create block file or character file according to parameter.
+#
+# $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
+ typeset devstr=$3
+
+ case $filetype in
+ b)
+ 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}"
+ ;;
+ *)
+ #
+ # 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
+ ;;
+ c)
+ #
+ # 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}"
+ ;;
+ FreeBSD)
+ #
+ # Create device file '/dev/null'
+ #
+ major=13
+ minor=2
+ log_must mknod $filename b $major $minor
+ ;;
+ *)
+ major=$(getmajor mm)
+ minor=2
+ log_must mknod $filename b $major $minor
+ ;;
+ esac
+ ;;
+ *)
+ log_fail "'$filetype' is wrong."
+ ;;
+ esac
+
+ return 0
+}
+
+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.out1
+ log_must rm -f $TESTDIR/$TESTFILE1.out2
+}