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 && destroy_dataset $dataset -Rf 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 acltype nfsv4 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 compression gzip compression gzip-$((RANDOM%9 + 1)) 88 compression zstd compression zstd-$((RANDOM%9 + 1)) 89 compression zstd-fast copies $((RANDOM%3 + 1)) 90 compression zstd-fast-$((RANDOM%9 + 1)) xattr sa 91 xattr on xattr off 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)) acltype off 119 acltype posix acltype nfsv4 120) 121else 122# property value property value 123# 124props=( 125 quota 64M recordsize 512 126 reservation 32M reservation none 127 mountpoint /history.$$ mountpoint legacy 128 mountpoint none sharenfs on 129 sharenfs off 130 compression on compression off 131 compression lzjb aclmode discard 132 aclmode groupmask aclmode passthrough 133 atime on atime off 134 devices on devices off 135 exec on exec off 136 setuid on setuid off 137 readonly on readonly off 138 zoned on zoned off 139 snapdir hidden snapdir visible 140 aclinherit discard aclinherit noallow 141 aclinherit secure aclinherit passthrough 142 canmount off canmount on 143 xattr on xattr off 144 compression gzip compression gzip-$((RANDOM%9 + 1)) 145 copies $((RANDOM%3 + 1)) 146) 147fi 148 149run_and_verify "zfs create $fs" 150# Set all the property for filesystem 151typeset -i i=0 152while ((i < ${#props[@]})) ; do 153 run_and_verify "zfs set ${props[$i]}=${props[((i+1))]} $fs" 154 155 # quota, reservation, canmount can not be inherited. 156 # 157 if [[ ${props[$i]} != "quota" && ${props[$i]} != "reservation" && \ 158 ${props[$i]} != "canmount" ]]; 159 then 160 run_and_verify "zfs inherit ${props[$i]} $fs" 161 fi 162 163 ((i += 2)) 164done 165 166run_and_verify "zfs create -V 64M $vol" 167run_and_verify "zfs set volsize=32M $vol" 168run_and_verify "zfs snapshot $fssnap" 169run_and_verify "zfs hold tag $fssnap" 170run_and_verify "zfs release tag $fssnap" 171run_and_verify "zfs snapshot $volsnap" 172run_and_verify "zfs snapshot $fssnap2" 173run_and_verify "zfs snapshot $volsnap2" 174 175# Send isn't logged... 176log_must eval "zfs send -i $fssnap $fssnap2 > $tmpfile" 177log_must eval "zfs send -i $volsnap $volsnap2 > $tmpfile2" 178# Verify that's true 179zpool history $TESTPOOL | grep 'zfs send' >/dev/null 2>&1 && \ 180 log_fail "'zfs send' found in history of \"$TESTPOOL\"" 181 182run_and_verify "zfs destroy $fssnap2" 183run_and_verify "zfs destroy $volsnap2" 184run_and_verify "zfs receive $fs < $tmpfile" 185run_and_verify "zfs receive $vol < $tmpfile2" 186run_and_verify "zfs rollback -r $fssnap" 187run_and_verify "zfs rollback -r $volsnap" 188run_and_verify "zfs clone $fssnap $fsclone" 189run_and_verify "zfs clone $volsnap $volclone" 190run_and_verify "zfs rename $fs $newfs" 191run_and_verify "zfs rename $vol $newvol" 192run_and_verify "zfs promote $fsclone" 193run_and_verify "zfs promote $volclone" 194run_and_verify "zfs destroy $newfs" 195run_and_verify "zfs destroy $newvol" 196run_and_verify "zfs destroy -rf $fsclone" 197run_and_verify "zfs destroy -rf $volclone" 198 199log_pass "zfs sub-commands which modify state are logged passed." 200