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 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 44 verify_runnable "global" 45 46 function 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 57 log_assert "Verify zfs sub-commands which modify state are logged." 58 log_onexit cleanup 59 60 fs=$TESTPOOL/$TESTFS1; newfs=$TESTPOOL/newfs; fsclone=$TESTPOOL/clone 61 vol=$TESTPOOL/$TESTVOL ; newvol=$TESTPOOL/newvol; volclone=$TESTPOOL/volclone 62 fssnap=$fs@fssnap; fssnap2=$fs@fssnap2 63 volsnap=$vol@volsnap; volsnap2=$vol@volsnap2 64 tmpfile=/tmp/tmpfile.$$ ; tmpfile2=/tmp/tmpfile2.$$ 65 66 # property value property value 67 # 68 props=( 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 92 run_and_verify "$ZFS create $fs" 93 # Set all the property for filesystem 94 typeset -i i=0 95 while ((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)) 107 done 108 109 run_and_verify "$ZFS create -V 64M $vol" 110 run_and_verify "$ZFS set volsize=32M $vol" 111 run_and_verify "$ZFS snapshot $fssnap" 112 run_and_verify "$ZFS hold tag $fssnap" 113 run_and_verify "$ZFS release tag $fssnap" 114 run_and_verify "$ZFS snapshot $volsnap" 115 run_and_verify "$ZFS snapshot $fssnap2" 116 run_and_verify "$ZFS snapshot $volsnap2" 117 118 # Send isn't logged... 119 log_must $ZFS send -i $fssnap $fssnap2 > $tmpfile 120 log_must $ZFS send -i $volsnap $volsnap2 > $tmpfile2 121 # Verify that's true 122 $ZPOOL history $TESTPOOL | $GREP 'zfs send' >/dev/null 2>&1 && \ 123 log_fail "'zfs send' found in history of \"$TESTPOOL\"" 124 125 run_and_verify "$ZFS destroy $fssnap2" 126 run_and_verify "$ZFS destroy $volsnap2" 127 run_and_verify "$ZFS receive $fs < $tmpfile" 128 run_and_verify "$ZFS receive $vol < $tmpfile2" 129 run_and_verify "$ZFS rollback -r $fssnap" 130 run_and_verify "$ZFS rollback -r $volsnap" 131 run_and_verify "$ZFS clone $fssnap $fsclone" 132 run_and_verify "$ZFS clone $volsnap $volclone" 133 run_and_verify "$ZFS rename $fs $newfs" 134 run_and_verify "$ZFS rename $vol $newvol" 135 run_and_verify "$ZFS promote $fsclone" 136 run_and_verify "$ZFS promote $volclone" 137 run_and_verify "$ZFS destroy $newfs" 138 run_and_verify "$ZFS destroy $newvol" 139 run_and_verify "$ZFS destroy -rf $fsclone" 140 run_and_verify "$ZFS destroy -rf $volclone" 141 142 log_pass "zfs sub-commands which modify state are logged passed."