Mercurial > illumos > illumos-gate
view usr/src/test/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_007_pos.ksh @ 13899:0bcf78798346
3311 Want a test framework for arbitrary OS unit tests
3312 Add a testrunner package for OS unit tests
3313 Add a testrunner package to convert ZFS tests from STF
Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com>
Reviewed by: Will Guyette <will.guyette@delphix.com>
Reviewed by: Dan Kimmel <dan.kimmel@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Henrik Mattson <henrik.mattson@delphix.com>
Reviewed by: Sonu Pillai <sonu.pillai@delphix.com>
Reviewed by: Christopher Siden <chris.siden@delphix.com>
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Richard Lowe <richlowe@richlowe.net>
author | John Wren Kennedy <john.kennedy@delphix.com> |
---|---|
date | Wed, 05 Dec 2012 22:04:50 -0500 |
parents | |
children |
line wrap: on
line source
#!/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."