1#!/bin/ksh -p 2# 3# CDDL HEADER START 4# 5# The contents of this file are subject to the terms of the 6# Common Development and Distribution License (the "License"). 7# You may not use this file except in compliance with the License. 8# 9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10# or http://www.opensolaris.org/os/licensing. 11# See the License for the specific language governing permissions 12# and limitations under the License. 13# 14# When distributing Covered Code, include this CDDL HEADER in each 15# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16# If applicable, add the following below this CDDL HEADER, with the 17# fields enclosed by brackets "[]" replaced with your own identifying 18# information: Portions Copyright [yyyy] [name of copyright owner] 19# 20# CDDL HEADER END 21# 22 23# 24# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 25# Use is subject to license terms. 26 27# 28# Copyright (c) 2013, 2016 by Delphix. All rights reserved. 29# 30 31. $STF_SUITE/tests/functional/history/history_common.kshlib 32 33# 34# DESCRIPTION: 35# Create a scenario to verify the following zfs subcommands are logged. 36# create, destroy, clone, rename, snapshot, rollback, set, inherit, 37# receive, promote, hold and release. 38# 39# STRATEGY: 40# 1. Verify that all the zfs commands listed (barring send) produce an 41# entry in the pool history. 42# 43 44verify_runnable "global" 45 46function cleanup 47{ 48 49 [[ -f $tmpfile ]] && rm -f $tmpfile 50 [[ -f $tmpfile2 ]] && rm -f $tmpfile2 51 for dataset in $fs $newfs $fsclone $vol $newvol $volclone; do 52 datasetexists $dataset && zfs destroy -Rf $dataset 53 done 54 rm -rf /history.$$ 55} 56 57log_assert "Verify zfs sub-commands which modify state are logged." 58log_onexit cleanup 59 60fs=$TESTPOOL/$TESTFS1; newfs=$TESTPOOL/newfs; fsclone=$TESTPOOL/clone 61vol=$TESTPOOL/$TESTVOL ; newvol=$TESTPOOL/newvol; volclone=$TESTPOOL/volclone 62fssnap=$fs@fssnap; fssnap2=$fs@fssnap2 63volsnap=$vol@volsnap; volsnap2=$vol@volsnap2 64tmpfile=$TEST_BASE_DIR/tmpfile.$$ ; tmpfile2=$TEST_BASE_DIR/tmpfile2.$$ 65 66if is_linux; then 67# property value property value 68# 69props=( 70 quota 64M recordsize 512 71 reservation 32M reservation none 72 mountpoint /history.$$ mountpoint legacy 73 mountpoint none compression lz4 74 compression on compression off 75 compression lzjb acltype off 76 acltype posix xattr sa 77 atime on atime off 78 devices on devices off 79 exec on exec off 80 setuid on setuid off 81 readonly on readonly off 82 zoned on zoned off 83 snapdir hidden snapdir visible 84 aclinherit discard aclinherit noallow 85 aclinherit secure aclinherit passthrough 86 canmount off canmount on 87 xattr on xattr off 88 compression gzip compression gzip-$((RANDOM%9 + 1)) 89 compression zstd compression zstd-$((RANDOM%9 + 1)) 90 compression zstd-fast copies $((RANDOM%3 + 1)) 91 compression zstd-fast-$((RANDOM%9 + 1)) 92) 93elif is_freebsd; then 94# property value property value 95# 96props=( 97 quota 64M recordsize 512 98 reservation 32M reservation none 99 mountpoint /history.$$ mountpoint legacy 100 mountpoint none sharenfs on 101 sharenfs off 102 compression on compression off 103 compression lzjb aclmode discard 104 aclmode groupmask aclmode passthrough 105 atime on atime off 106 devices on devices off 107 exec on exec off 108 setuid on setuid off 109 readonly on readonly off 110 jailed on jailed off 111 snapdir hidden snapdir visible 112 aclinherit discard aclinherit noallow 113 aclinherit secure aclinherit passthrough 114 canmount off canmount on 115 compression gzip compression gzip-$((RANDOM%9 + 1)) 116 compression zstd compression zstd-$((RANDOM%9 + 1)) 117 compression zstd-fast copies $((RANDOM%3 + 1)) 118 compression zstd-fast-$((RANDOM%9 + 1)) 119) 120else 121# property value property value 122# 123props=( 124 quota 64M recordsize 512 125 reservation 32M reservation none 126 mountpoint /history.$$ mountpoint legacy 127 mountpoint none sharenfs on 128 sharenfs off 129 compression on compression off 130 compression lzjb aclmode discard 131 aclmode groupmask aclmode passthrough 132 atime on atime off 133 devices on devices off 134 exec on exec off 135 setuid on setuid off 136 readonly on readonly off 137 zoned on zoned off 138 snapdir hidden snapdir visible 139 aclinherit discard aclinherit noallow 140 aclinherit secure aclinherit passthrough 141 canmount off canmount on 142 xattr on xattr off 143 compression gzip compression gzip-$((RANDOM%9 + 1)) 144 copies $((RANDOM%3 + 1)) 145) 146fi 147 148run_and_verify "zfs create $fs" 149# Set all the property for filesystem 150typeset -i i=0 151while ((i < ${#props[@]})) ; do 152 run_and_verify "zfs set ${props[$i]}=${props[((i+1))]} $fs" 153 154 # quota, reservation, canmount can not be inherited. 155 # 156 if [[ ${props[$i]} != "quota" && ${props[$i]} != "reservation" && \ 157 ${props[$i]} != "canmount" ]]; 158 then 159 run_and_verify "zfs inherit ${props[$i]} $fs" 160 fi 161 162 ((i += 2)) 163done 164 165run_and_verify "zfs create -V 64M $vol" 166run_and_verify "zfs set volsize=32M $vol" 167run_and_verify "zfs snapshot $fssnap" 168run_and_verify "zfs hold tag $fssnap" 169run_and_verify "zfs release tag $fssnap" 170run_and_verify "zfs snapshot $volsnap" 171run_and_verify "zfs snapshot $fssnap2" 172run_and_verify "zfs snapshot $volsnap2" 173 174# Send isn't logged... 175log_must eval "zfs send -i $fssnap $fssnap2 > $tmpfile" 176log_must eval "zfs send -i $volsnap $volsnap2 > $tmpfile2" 177# Verify that's true 178zpool history $TESTPOOL | grep 'zfs send' >/dev/null 2>&1 && \ 179 log_fail "'zfs send' found in history of \"$TESTPOOL\"" 180 181run_and_verify "zfs destroy $fssnap2" 182run_and_verify "zfs destroy $volsnap2" 183run_and_verify "zfs receive $fs < $tmpfile" 184run_and_verify "zfs receive $vol < $tmpfile2" 185run_and_verify "zfs rollback -r $fssnap" 186run_and_verify "zfs rollback -r $volsnap" 187run_and_verify "zfs clone $fssnap $fsclone" 188run_and_verify "zfs clone $volsnap $volclone" 189run_and_verify "zfs rename $fs $newfs" 190run_and_verify "zfs rename $vol $newvol" 191run_and_verify "zfs promote $fsclone" 192run_and_verify "zfs promote $volclone" 193run_and_verify "zfs destroy $newfs" 194run_and_verify "zfs destroy $newvol" 195run_and_verify "zfs destroy -rf $fsclone" 196run_and_verify "zfs destroy -rf $volclone" 197 198log_pass "zfs sub-commands which modify state are logged passed." 199