xref: /illumos-gate/usr/src/test/zfs-tests/tests/functional/history/history_002_pos.ksh (revision 3ce5372277f4657ad0e52d36c979527c4ca22de2)
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