d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# CDDL HEADER START
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# The contents of this file are subject to the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Common Development and Distribution License (the "License").
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You may not use this file except in compliance with the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# or http://www.opensolaris.org/os/licensing.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# See the License for the specific language governing permissions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# and limitations under the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# CDDL HEADER END
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Use is subject to license terms.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy. $STF_SUITE/include/libtest.shlib
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy. $STF_SUITE/tests/functional/cli_root/zfs_rollback/zfs_rollback.cfg
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get file sum
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 full file name
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction getsum #fname
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( ${#1} == 0 )) && \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "Need give file name."
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy return $(sum $1 | awk '{print $1}')
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Define global variable checksum, get the original file sum.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyorigsum=$(getsum /etc/passwd)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Setup or recover the test environment. Firstly, copy /etc/passwd to ZFS file
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# system or volume, then make a snapshot or clone. Repeat up to three times.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 number of snapshot. Note: Currently only support three snapshots.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 indicate if it is necessary to create clone
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction setup_snap_env
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i cnt=${1:-3}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset createclone=${2:-"false"}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetnonexists $FS; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $FS
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$TESTDIR $FS
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Volume can't be created in Local Zone.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetnonexists $VOL && is_global_zone; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create -V $VOLSIZE $VOL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Make sure $VOL is volume
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset type=$(get_prop type $VOL)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetexists $VOL && \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ $type == 'volume' ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy #
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # At the first time, Make a UFS file system in volume and
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # mount it. Otherwise, only check if this ufs file system
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # was mounted.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy #
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must eval "echo "y" | \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy newfs -v /dev/zvol/dsk/$VOL > /dev/null 2>&1"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d $TESTDIR1 ]] && log_must mkdir $TESTDIR1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Make sure the ufs filesystem hasn't been mounted,
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # then mount the new ufs filesystem.
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy df -lhF ufs "/dev/zvol/dsk/$VOL" > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $? != 0 )); then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must mount \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy /dev/zvol/dsk/$TESTPOOL/$TESTVOL $TESTDIR1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Separately Create three snapshots for file system & volume
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i ind=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dtst
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for dtst in $FS $VOL; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Volume can be created in Local Zone.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $dtst == $VOL ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if ! is_global_zone; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy break
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ind=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( ind < cnt )); do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case $dtst in
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $FS)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset snap=\$FSSNAP$ind
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset clone=\$FSCLONE$ind
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset fname=\$TESTDIR/\$TESTFILE$ind
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $VOL)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset snap=\$VOLSNAP$ind
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset clone=\$VOLCLONE$ind
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset fname=\$TESTDIR1/\$TESTFILE$ind
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy esac
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetnonexists $snap; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must cp /etc/passwd $fname
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy #
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # using 'lockfs -f' to flush the writes to disk
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # before taking a snapshot.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy #
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $dtst == $VOL ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must /usr/sbin/lockfs -f $TESTDIR1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $createclone == "true" ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetnonexists $clone; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs clone $snap $clone
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( ind += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction setup_clone_env
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy setup_snap_env $1 "true"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Clean up the test environmnet
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 number of snapshot Note: Currently only support three snapshots.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction cleanup_env
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i cnt=${1:-3}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i ind=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dtst
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset snap
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy pkill ${DD##*/}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy df -lhF ufs "/dev/zvol/dsk/$VOL" > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( $? == 0 )); then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must umount -f $TESTDIR1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ -d $TESTDIR ]] && log_must rm -rf $TESTDIR/*
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ -d $TESTDIR1 ]] && log_must rm -rf $TESTDIR1/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for dtst in $FS $VOL; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for snap in $TESTSNAP $TESTSNAP1 $TESTSNAP2; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if snapexists $dtst@$snap; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -Rf $dtst@$snap
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Restore original test environment
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetnonexists $FS ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $FS
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if datasetnonexists $VOL ; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if is_global_zone ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create -V $VOLSIZE $VOL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $VOL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# check if the specified files have specified status.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 expected status
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2-n full file name
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# If it is true return 0, else return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction file_status
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( $# == 0 )) && \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "The file name is not defined."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset opt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case $1 in
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy exist) opt="-e" ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy nonexist) opt="! -e" ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *) log_fail "Unsupported file status." ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy esac
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy shift
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( $# > 0 )); do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval [[ $opt $1 ]] || return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy shift
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction files_exist
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy file_status "exist" $@
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction files_nonexist
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy file_status "nonexist" $@
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# According to snapshot check if the file system was recovered to the right
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# point.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 snapshot. fs@snap or vol@snap
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction check_files
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dtst=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $(get_prop type $dtst) != snapshot ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "Parameter must be a snapshot."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset fsvol=${dtst%%@*}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset snap=${dtst##*@}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $(get_prop type $fsvol) == "filesystem" ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ind=""
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ind="1"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset file0=\$TESTDIR$ind/\$TESTFILE0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset file1=\$TESTDIR$ind/\$TESTFILE1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset file2=\$TESTDIR$ind/\$TESTFILE2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case $snap in
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $TESTSNAP2)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must files_exist $file0 $file1 $file2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset sum0=$(getsum $file0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset sum1=$(getsum $file1)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset sum2=$(getsum $file2)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $sum0 != $origsum || \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $sum1 != $origsum || sum2 != $origsum ]]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "After rollback, file sum is changed."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $TESTSNAP1)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must files_exist $file0 $file1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must files_nonexist $file2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset sum0=$(getsum $file0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset sum1=$(getsum $file1)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $sum0 != $origsum || $sum1 != $origsum ]]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "After rollback, file sum is changed."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy $TESTSNAP)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must files_exist $file0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must files_nonexist $file1 $file2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset sum0=$(getsum $file0)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $sum0 != $origsum ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "After rollback, file sum is changed."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy esac
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# According to dataset type, write file to different directories.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 dataset
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction write_mountpoint_dir
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dtst=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dir
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $dtst == $FS ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy dir=$TESTDIR
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must ismounted $dir
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy dir=$TESTDIR1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_must ismounted $dir "ufs"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy dd if=/dev/urandom of=$dir/$TESTFILE1 &
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must sleep 3
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}