#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

#
# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
#

. $STF_SUITE/tests/functional/history/history_common.kshlib
. $STF_SUITE/include/libtest.shlib

#
# DESCRIPTION:
#	Verify the following zfs subcommands are not logged.
#	list, get, holds, mount, unmount, share, unshare, send
#
# STRATEGY:
#	1. Create a test pool.
#	2. Separately invoke zfs list|get|holds|mount|unmount|share|unshare|send
#	3. Verify they were not recorded in pool history.
#

verify_runnable "global"

function cleanup
{
	if datasetexists $fs ; then
		log_must zfs destroy -rf $fs
	fi
	log_must zfs create $fs
}

log_assert "Verify 'zfs list|get|holds|mount|unmount|share|unshare|send' " \
    "will not be logged."
log_onexit cleanup

# Create initial test environment
fs=$TESTPOOL/$TESTFS; snap1=$fs@snap1; snap2=$fs@snap2
if ! is_linux; then
	log_must zfs set sharenfs=on $fs
fi
log_must zfs snapshot $snap1
log_must zfs hold tag $snap1
log_must zfs snapshot $snap2

# Save initial TESTPOOL history
log_must eval "zpool history $TESTPOOL > $OLD_HISTORY"

log_must zfs list $fs > /dev/null
log_must zfs get mountpoint $fs > /dev/null
log_must zfs unmount $fs
log_must zfs mount $fs
if ! is_linux; then
	log_must zfs share $fs
	log_must zfs unshare $fs
fi
log_must zfs send -i $snap1 $snap2 > /dev/null
log_must zfs holds $snap1

log_must eval "zpool history $TESTPOOL > $NEW_HISTORY"
log_must diff $OLD_HISTORY $NEW_HISTORY

log_must zfs release tag $snap1

log_pass "Verify 'zfs list|get|mount|unmount|share|unshare|send' passed."
