aboutsummaryrefslogtreecommitdiff
path: root/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh')
-rwxr-xr-xtests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh142
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh
new file mode 100755
index 000000000000..577de0957915
--- /dev/null
+++ b/tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh
@@ -0,0 +1,142 @@
+#!/bin/ksh -p
+#
+# 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.
+#
+
+. $STF_SUITE/tests/functional/cli_root/zfs_mount/zfs_mount.kshlib
+
+#
+# DESCRIPTION:
+# The following options can be set on a temporary basis using the -o option
+# without affecting the on-disk property. The original on-disk value will be
+# restored when the file system is unmounted and mounted.
+#
+# PROPERTY MOUNT OPTION
+# atime atime/noatime
+# devices devices/nodevices
+# exec exec/noexec
+# readonly ro/rw
+# setuid setuid/nosetuid
+#
+# STRATEGY:
+# 1. Create filesystem and get origianl property value.
+# 2. Using 'zfs mount -o' to set filesystem property.
+# 3. Verify the property was set temporarily.
+# 4. Verify it will not affect the property that is stored on disk.
+#
+
+function cleanup
+{
+ if ! ismounted $TESTPOOL/$TESTFS; then
+ log_must $ZFS mount $TESTPOOL/$TESTFS
+ fi
+}
+
+log_assert "Verify '-o' will set filesystem property temporarily, " \
+ "without affecting the property that is stored on disk."
+log_onexit cleanup
+
+set -A properties "atime" "devices" "exec" "readonly" "setuid"
+
+#
+# Get the specified filesystem property reverse mount option.
+#
+# $1 filesystem
+# $2 property
+#
+function get_reverse_option
+{
+ typeset fs=$1
+ typeset prop=$2
+
+ # Define property value: "reverse if value=on" "reverse if value=off"
+ set -A values "noatime" "atime" \
+ "nodevices" "devices" \
+ "noexec" "exec" \
+ "rw" "ro" \
+ "nosetuid" "setuid"
+
+ typeset -i i=0
+ while (( i < ${#properties[@]} )); do
+ if [[ $prop == ${properties[$i]} ]]; then
+ break
+ fi
+
+ (( i += 1 ))
+ done
+ if (( i >= ${#properties[@]} )); then
+ log_fail "Incorrect option: $prop"
+ fi
+
+ typeset val
+ typeset -i ind=0
+ val=$(get_prop $prop $fs) || log_fail "get_prop $prop $fs"
+ if [[ $val == "on" ]]; then
+ (( ind = i * 2 ))
+ else
+ (( ind = i * 2 + 1 ))
+ fi
+
+ $ECHO ${values[$ind]}
+}
+
+fs=$TESTPOOL/$TESTFS
+cleanup
+
+for property in ${properties[@]}; do
+ orig_val=$(get_prop $property $fs)
+ (($? != 0)) && log_fail "get_prop $property $fs"
+
+ # Set filesystem property temporarily
+ reverse_opt=$(get_reverse_option $fs $property)
+ log_must $ZFS mount -o remount,$reverse_opt $fs
+
+ cur_val=$(get_prop $property $fs)
+ (($? != 0)) && log_fail "get_prop $property $fs"
+
+ # In LZ, a user with all zone privileges can never with "devices"
+ if ! is_global_zone && [[ $property == devices ]] ; then
+ if [[ $cur_val != off || $orig_val != off ]]; then
+ log_fail "'devices' property shouldn't " \
+ "be enabled in LZ"
+ fi
+ elif [[ $orig_val == $cur_val ]]; then
+ log_fail "zfs mount -o remount,$reverse_opt " \
+ "doesn't change property."
+ fi
+
+ # unmount & mount will revert property to the original value
+ log_must $ZFS unmount $fs
+ log_must $ZFS mount $fs
+
+ cur_val=$(get_prop $property $fs)
+ (($? != 0)) && log_fail "get_prop $property $fs"
+ if [[ $orig_val != $cur_val ]]; then
+ log_fail "zfs mount -o remount,$reverse_opt " \
+ "change the property that is stored on disks"
+ fi
+done
+
+log_pass "Verify '-o' set filesystem property temporarily passed."