Mercurial > illumos > illumos-gate
diff usr/src/test/zfs-tests/tests/functional/cli_root/zfs_set/readonly_001_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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usr/src/test/zfs-tests/tests/functional/cli_root/zfs_set/readonly_001_pos.ksh Wed Dec 05 22:04:50 2012 -0500 @@ -0,0 +1,154 @@ +#!/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 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +. $STF_SUITE/tests/functional/cli_root/zfs_set/zfs_set_common.kshlib + +# +# DESCRIPTION: +# Setting readonly on a dataset, it should keep the dataset as readonly. +# +# STRATEGY: +# 1. Create pool, then create filesystem and volume within it. +# 2. Setting readonly to each dataset. +# 3. Check the return value and make sure it is 0. +# 4. Verify the stuff under mountpoint is readonly. +# + +verify_runnable "both" + +function cleanup +{ + for dataset in $TESTPOOL/$TESTFS $TESTPOOL/$TESTVOL ; do + snapexists ${dataset}@$TESTSNAP && \ + log_must $ZFS destroy -R ${dataset}@$TESTSNAP + done +} + +function initial_dataset # $1 dataset +{ + typeset dataset=$1 + + typeset fstype=$(get_prop type $dataset) + + if [[ $fstype == "filesystem" ]] ; then + typeset mtpt=$(get_prop mountpoint $dataset) + log_must $TOUCH $mtpt/$TESTFILE0 + log_must $MKDIR -p $mtpt/$TESTDIR0 + fi +} + + +function cleanup_dataset # $1 dataset +{ + typeset dataset=$1 + + typeset fstype=$(get_prop type $dataset) + + if [[ $fstype == "filesystem" ]] ; then + typeset mtpt=$(get_prop mountpoint $dataset) + log_must $RM -f $mtpt/$TESTFILE0 + log_must $RM -rf $mtpt/$TESTDIR0 + fi +} + +function verify_readonly # $1 dataset, $2 on|off +{ + typeset dataset=$1 + typeset value=$2 + + if datasetnonexists $dataset ; then + log_note "$dataset not exist!" + return 1 + fi + + typeset fstype=$(get_prop type $dataset) + + expect="log_must" + + if [[ $2 == "on" ]] ; then + expect="log_mustnot" + fi + + case $fstype in + filesystem) + typeset mtpt=$(get_prop mountpoint $dataset) + $expect $TOUCH $mtpt/$TESTFILE1 + $expect $MKDIR -p $mtpt/$TESTDIR1 + $expect $ECHO 'y' | $RM $mtpt/$TESTFILE0 + $expect $RMDIR $mtpt/$TESTDIR0 + + if [[ $expect == "log_must" ]] ; then + log_must $ECHO 'y' | $RM $mtpt/$TESTFILE1 + log_must $RMDIR $mtpt/$TESTDIR1 + log_must $TOUCH $mtpt/$TESTFILE0 + log_must $MKDIR -p $mtpt/$TESTDIR0 + fi + ;; + volume) + $expect eval "$ECHO 'y' | $NEWFS /dev/zvol/dsk/$dataset > /dev/null 2>&1" + ;; + *) + ;; + esac + + return 0 +} + +log_onexit cleanup + +log_assert "Setting a valid readonly property on a dataset succeeds." + +typeset all_datasets + +log_must $ZFS mount -a + +log_must $ZFS snapshot $TESTPOOL/$TESTFS@$TESTSNAP +log_must $ZFS clone $TESTPOOL/$TESTFS@$TESTSNAP $TESTPOOL/$TESTCLONE + +if is_global_zone ; then + log_must $ZFS snapshot $TESTPOOL/$TESTVOL@$TESTSNAP + log_must $ZFS clone $TESTPOOL/$TESTVOL@$TESTSNAP $TESTPOOL/$TESTCLONE1 + all_datasets="$TESTPOOL $TESTPOOL/$TESTFS $TESTPOOL/$TESTVOL $TESTPOOL/$TESTCLONE $TESTPOOL/$TESTCLONE1" +else + all_datasets="$TESTPOOL $TESTPOOL/$TESTFS $TESTPOOL/$TESTCLONE" +fi + + +for dataset in $all_datasets; do + for value in on off; do + set_n_check_prop "off" "readonly" "$dataset" + initial_dataset $dataset + + set_n_check_prop "$value" "readonly" "$dataset" + verify_readonly $dataset $value + + set_n_check_prop "off" "readonly" "$dataset" + cleanup_dataset $dataset + done +done + +log_pass "Setting a valid readonly property on a dataset succeeds."