diff options
Diffstat (limited to 'tests/zfs-tests/tests/functional/devices/devices_common.kshlib')
-rw-r--r-- | tests/zfs-tests/tests/functional/devices/devices_common.kshlib | 119 |
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 +} |