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=/tmp/tmpfile.$$ ; tmpfile2=/tmp/tmpfile2.$$ 65 66# property value property value 67# 68props=( 69 quota 64M recordsize 512 70 reservation 32M reservation none 71 mountpoint /history.$$ mountpoint legacy 72 mountpoint none sharenfs on 73 sharenfs off 74 compression on compression off 75 compression lzjb aclmode discard 76 aclmode groupmask aclmode passthrough 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 copies $((RANDOM%3 + 1)) 90) 91 92run_and_verify "zfs create $fs" 93# Set all the property for filesystem 94typeset -i i=0 95while ((i < ${#props[@]})) ; do 96 run_and_verify "zfs set ${props[$i]}=${props[((i+1))]} $fs" 97 98 # quota, reservation, canmount can not be inherited. 99 # 100 if [[ ${props[$i]} != "quota" && ${props[$i]} != "reservation" && \ 101 ${props[$i]} != "canmount" ]]; 102 then 103 run_and_verify "zfs inherit ${props[$i]} $fs" 104 fi 105 106 ((i += 2)) 107done 108 109run_and_verify "zfs create -V 64M $vol" 110run_and_verify "zfs set volsize=32M $vol" 111run_and_verify "zfs snapshot $fssnap" 112run_and_verify "zfs hold tag $fssnap" 113run_and_verify "zfs release tag $fssnap" 114run_and_verify "zfs snapshot $volsnap" 115run_and_verify "zfs snapshot $fssnap2" 116run_and_verify "zfs snapshot $volsnap2" 117 118# Send isn't logged... 119log_must zfs send -i $fssnap $fssnap2 > $tmpfile 120log_must zfs send -i $volsnap $volsnap2 > $tmpfile2 121# Verify that's true 122zpool history $TESTPOOL | grep 'zfs send' >/dev/null 2>&1 && \ 123 log_fail "'zfs send' found in history of \"$TESTPOOL\"" 124 125run_and_verify "zfs destroy $fssnap2" 126run_and_verify "zfs destroy $volsnap2" 127run_and_verify "zfs receive $fs < $tmpfile" 128run_and_verify "zfs receive $vol < $tmpfile2" 129run_and_verify "zfs rollback -r $fssnap" 130run_and_verify "zfs rollback -r $volsnap" 131run_and_verify "zfs clone $fssnap $fsclone" 132run_and_verify "zfs clone $volsnap $volclone" 133run_and_verify "zfs rename $fs $newfs" 134run_and_verify "zfs rename $vol $newvol" 135run_and_verify "zfs promote $fsclone" 136run_and_verify "zfs promote $volclone" 137run_and_verify "zfs destroy $newfs" 138run_and_verify "zfs destroy $newvol" 139run_and_verify "zfs destroy -rf $fsclone" 140run_and_verify "zfs destroy -rf $volclone" 141 142log_pass "zfs sub-commands which modify state are logged passed." 143