| #!/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 2017, loli10K <ezomori.nozomu@gmail.com>. All rights reserved. |
| # |
| |
| . $STF_SUITE/include/libtest.shlib |
| . $STF_SUITE/tests/functional/cli_root/zfs_set/zfs_set_common.kshlib |
| . $STF_SUITE/tests/functional/zvol/zvol_common.shlib |
| . $STF_SUITE/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib |
| |
| # |
| # DESCRIPTION: |
| # Verify that ZFS volume property "snapdev" works as intended. |
| # |
| # STRATEGY: |
| # 1. Verify "snapdev" property does not accept invalid values |
| # 2. Verify "snapdev" adds and removes device nodes when updated |
| # 3. Verify "snapdev" is inherited correctly |
| # |
| |
| verify_runnable "global" |
| |
| function cleanup |
| { |
| datasetexists $VOLFS && log_must zfs destroy -r $VOLFS |
| datasetexists $ZVOL && log_must zfs destroy -r $ZVOL |
| log_must zfs inherit snapdev $TESTPOOL |
| block_device_wait |
| udev_cleanup |
| } |
| |
| log_assert "Verify that ZFS volume property 'snapdev' works as expected." |
| log_onexit cleanup |
| |
| VOLFS="$TESTPOOL/volfs" |
| ZVOL="$TESTPOOL/vol" |
| SNAP="$ZVOL@snap" |
| SNAPDEV="${ZVOL_DEVDIR}/$SNAP" |
| SUBZVOL="$VOLFS/subvol" |
| SUBSNAP="$SUBZVOL@snap" |
| SUBSNAPDEV="${ZVOL_DEVDIR}/$SUBSNAP" |
| |
| log_must zfs create -o mountpoint=none $VOLFS |
| log_must zfs create -V $VOLSIZE -s $ZVOL |
| log_must zfs create -V $VOLSIZE -s $SUBZVOL |
| |
| # 1. Verify "snapdev" property does not accept invalid values |
| typeset badvals=("off" "on" "1" "nope" "-") |
| for badval in ${badvals[@]} |
| do |
| log_mustnot zfs set snapdev="$badval" $ZVOL |
| done |
| |
| # 2. Verify "snapdev" adds and removes device nodes when updated |
| # 2.1 First create a snapshot then change snapdev property |
| log_must zfs snapshot $SNAP |
| log_must zfs set snapdev=visible $ZVOL |
| blockdev_exists $SNAPDEV |
| log_must zfs set snapdev=hidden $ZVOL |
| blockdev_missing $SNAPDEV |
| log_must zfs destroy $SNAP |
| # 2.2 First set snapdev property then create a snapshot |
| log_must zfs set snapdev=visible $ZVOL |
| log_must zfs snapshot $SNAP |
| blockdev_exists $SNAPDEV |
| log_must zfs destroy $SNAP |
| blockdev_missing $SNAPDEV |
| # 2.3 Verify setting to the same value multiple times does not lead to issues |
| log_must zfs snapshot $SNAP |
| log_must zfs set snapdev=visible $ZVOL |
| blockdev_exists $SNAPDEV |
| log_must zfs set snapdev=visible $ZVOL |
| blockdev_exists $SNAPDEV |
| log_must zfs set snapdev=hidden $ZVOL |
| blockdev_missing $SNAPDEV |
| log_must zfs set snapdev=hidden $ZVOL |
| blockdev_missing $SNAPDEV |
| log_must zfs destroy $SNAP |
| |
| # 3. Verify "snapdev" is inherited correctly |
| # 3.1 Check snapdev=visible case |
| log_must zfs snapshot $SNAP |
| log_must zfs inherit snapdev $ZVOL |
| log_must zfs set snapdev=visible $TESTPOOL |
| verify_inherited 'snapdev' 'visible' $ZVOL $TESTPOOL |
| blockdev_exists $SNAPDEV |
| # 3.2 Check snapdev=hidden case |
| log_must zfs set snapdev=hidden $TESTPOOL |
| verify_inherited 'snapdev' 'hidden' $ZVOL $TESTPOOL |
| blockdev_missing $SNAPDEV |
| # 3.3 Check inheritance on multiple levels |
| log_must zfs snapshot $SUBSNAP |
| log_must zfs inherit snapdev $SUBZVOL |
| log_must zfs set snapdev=hidden $VOLFS |
| log_must zfs set snapdev=visible $TESTPOOL |
| verify_inherited 'snapdev' 'hidden' $SUBZVOL $VOLFS |
| blockdev_missing $SUBSNAPDEV |
| blockdev_exists $SNAPDEV |
| |
| log_pass "ZFS volume property 'snapdev' works as expected" |