]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/openzfs/tests/zfs-tests/tests/functional/history/history_002_pos.ksh
MFV 2.0-rc2
[FreeBSD/FreeBSD.git] / sys / contrib / openzfs / tests / zfs-tests / tests / functional / history / history_002_pos.ksh
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
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=$TEST_BASE_DIR/tmpfile.$$ ; tmpfile2=$TEST_BASE_DIR/tmpfile2.$$
65
66 if is_linux; then
67 #       property        value           property        value
68 #
69 props=(
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 )
93 elif is_freebsd; then
94 #       property        value           property        value
95 #
96 props=(
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 )
120 else
121 #       property        value           property        value
122 #
123 props=(
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 )
146 fi
147
148 run_and_verify "zfs create $fs"
149 # Set all the property for filesystem
150 typeset -i i=0
151 while ((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))
163 done
164
165 run_and_verify "zfs create -V 64M $vol"
166 run_and_verify "zfs set volsize=32M $vol"
167 run_and_verify "zfs snapshot $fssnap"
168 run_and_verify "zfs hold tag $fssnap"
169 run_and_verify "zfs release tag $fssnap"
170 run_and_verify "zfs snapshot $volsnap"
171 run_and_verify "zfs snapshot $fssnap2"
172 run_and_verify "zfs snapshot $volsnap2"
173
174 # Send isn't logged...
175 log_must eval "zfs send -i $fssnap $fssnap2 > $tmpfile"
176 log_must eval "zfs send -i $volsnap $volsnap2 > $tmpfile2"
177 # Verify that's true
178 zpool history $TESTPOOL | grep 'zfs send' >/dev/null 2>&1 && \
179     log_fail "'zfs send' found in history of \"$TESTPOOL\""
180
181 run_and_verify "zfs destroy $fssnap2"
182 run_and_verify "zfs destroy $volsnap2"
183 run_and_verify "zfs receive $fs < $tmpfile"
184 run_and_verify "zfs receive $vol < $tmpfile2"
185 run_and_verify "zfs rollback -r $fssnap"
186 run_and_verify "zfs rollback -r $volsnap"
187 run_and_verify "zfs clone $fssnap $fsclone"
188 run_and_verify "zfs clone $volsnap $volclone"
189 run_and_verify "zfs rename $fs $newfs"
190 run_and_verify "zfs rename $vol $newvol"
191 run_and_verify "zfs promote $fsclone"
192 run_and_verify "zfs promote $volclone"
193 run_and_verify "zfs destroy $newfs"
194 run_and_verify "zfs destroy $newvol"
195 run_and_verify "zfs destroy -rf $fsclone"
196 run_and_verify "zfs destroy -rf $volclone"
197
198 log_pass "zfs sub-commands which modify state are logged passed."