1*2fae26bdSAlan Somers#! /usr/local/bin/ksh93 -p 2*2fae26bdSAlan Somers# 3*2fae26bdSAlan Somers# CDDL HEADER START 4*2fae26bdSAlan Somers# 5*2fae26bdSAlan Somers# The contents of this file are subject to the terms of the 6*2fae26bdSAlan Somers# Common Development and Distribution License (the "License"). 7*2fae26bdSAlan Somers# You may not use this file except in compliance with the License. 8*2fae26bdSAlan Somers# 9*2fae26bdSAlan Somers# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*2fae26bdSAlan Somers# or http://www.opensolaris.org/os/licensing. 11*2fae26bdSAlan Somers# See the License for the specific language governing permissions 12*2fae26bdSAlan Somers# and limitations under the License. 13*2fae26bdSAlan Somers# 14*2fae26bdSAlan Somers# When distributing Covered Code, include this CDDL HEADER in each 15*2fae26bdSAlan Somers# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*2fae26bdSAlan Somers# If applicable, add the following below this CDDL HEADER, with the 17*2fae26bdSAlan Somers# fields enclosed by brackets "[]" replaced with your own identifying 18*2fae26bdSAlan Somers# information: Portions Copyright [yyyy] [name of copyright owner] 19*2fae26bdSAlan Somers# 20*2fae26bdSAlan Somers# CDDL HEADER END 21*2fae26bdSAlan Somers# 22*2fae26bdSAlan Somers 23*2fae26bdSAlan Somers# 24*2fae26bdSAlan Somers# Copyright 2007 Sun Microsystems, Inc. All rights reserved. 25*2fae26bdSAlan Somers# Use is subject to license terms. 26*2fae26bdSAlan Somers. $STF_SUITE/include/libtest.kshlib 27*2fae26bdSAlan Somers 28*2fae26bdSAlan Somers################################################################################ 29*2fae26bdSAlan Somers# 30*2fae26bdSAlan Somers# __stc_assertion_start 31*2fae26bdSAlan Somers# 32*2fae26bdSAlan Somers# ID: rollback_001_pos 33*2fae26bdSAlan Somers# 34*2fae26bdSAlan Somers# DESCRIPTION: 35*2fae26bdSAlan Somers# Populate a file system and take a snapshot. Add some more files to the 36*2fae26bdSAlan Somers# file system and rollback to the last snapshot. Verify no post snapshot 37*2fae26bdSAlan Somers# file exist. 38*2fae26bdSAlan Somers# 39*2fae26bdSAlan Somers# STRATEGY: 40*2fae26bdSAlan Somers# 1. Empty a file system 41*2fae26bdSAlan Somers# 2. Populate the file system 42*2fae26bdSAlan Somers# 3. Take a snapshot of the file system 43*2fae26bdSAlan Somers# 4. Add new files to the file system 44*2fae26bdSAlan Somers# 5. Perform a rollback 45*2fae26bdSAlan Somers# 6. Verify the snapshot and file system agree 46*2fae26bdSAlan Somers# 47*2fae26bdSAlan Somers# TESTABILITY: explicit 48*2fae26bdSAlan Somers# 49*2fae26bdSAlan Somers# TEST_AUTOMATION_LEVEL: automated 50*2fae26bdSAlan Somers# 51*2fae26bdSAlan Somers# CODING_STATUS: COMPLETED (2005-07-04) 52*2fae26bdSAlan Somers# 53*2fae26bdSAlan Somers# __stc_assertion_end 54*2fae26bdSAlan Somers# 55*2fae26bdSAlan Somers################################################################################ 56*2fae26bdSAlan Somers 57*2fae26bdSAlan Somersverify_runnable "both" 58*2fae26bdSAlan Somers 59*2fae26bdSAlan Somersfunction cleanup 60*2fae26bdSAlan Somers{ 61*2fae26bdSAlan Somers snapexists $SNAPFS 62*2fae26bdSAlan Somers [[ $? -eq 0 ]] && \ 63*2fae26bdSAlan Somers log_must $ZFS destroy $SNAPFS 64*2fae26bdSAlan Somers 65*2fae26bdSAlan Somers [[ -e $TESTDIR ]] && \ 66*2fae26bdSAlan Somers log_must $RM -rf $TESTDIR/* > /dev/null 2>&1 67*2fae26bdSAlan Somers} 68*2fae26bdSAlan Somers 69*2fae26bdSAlan Somerslog_assert "Verify that a rollback to a previous snapshot succeeds." 70*2fae26bdSAlan Somers 71*2fae26bdSAlan Somerslog_onexit cleanup 72*2fae26bdSAlan Somers 73*2fae26bdSAlan Somers[[ -n $TESTDIR ]] && \ 74*2fae26bdSAlan Somers log_must $RM -rf $TESTDIR/* > /dev/null 2>&1 75*2fae26bdSAlan Somers 76*2fae26bdSAlan Somerstypeset -i COUNT=10 77*2fae26bdSAlan Somers 78*2fae26bdSAlan Somerslog_note "Populate the $TESTDIR directory (prior to snapshot)" 79*2fae26bdSAlan Somerspopulate_dir $TESTDIR/before_file $COUNT $NUM_WRITES $BLOCKSZ ITER 80*2fae26bdSAlan Somerslog_must $ZFS snapshot $SNAPFS 81*2fae26bdSAlan Somers 82*2fae26bdSAlan SomersFILE_COUNT=`$LS -Al $SNAPDIR | $GREP -v "total" | wc -l` 83*2fae26bdSAlan Somersif [[ $FILE_COUNT -ne $COUNT ]]; then 84*2fae26bdSAlan Somers $LS -Al $SNAPDIR 85*2fae26bdSAlan Somers log_fail "AFTER: $SNAPFS contains $FILE_COUNT files(s)." 86*2fae26bdSAlan Somersfi 87*2fae26bdSAlan Somers 88*2fae26bdSAlan Somerslog_note "Populate the $TESTDIR directory (post snapshot)" 89*2fae26bdSAlan Somerspopulate_dir $TESTDIR/after_file $COUNT $NUM_WRITES $BLOCKSZ ITER 90*2fae26bdSAlan Somers 91*2fae26bdSAlan Somers# 92*2fae26bdSAlan Somers# Now rollback to latest snapshot 93*2fae26bdSAlan Somers# 94*2fae26bdSAlan Somerslog_must $ZFS rollback $SNAPFS 95*2fae26bdSAlan Somers 96*2fae26bdSAlan SomersFILE_COUNT=`$LS -Al $TESTDIR/after* 2> /dev/null | $GREP -v "total" | wc -l` 97*2fae26bdSAlan Somersif [[ $FILE_COUNT -ne 0 ]]; then 98*2fae26bdSAlan Somers $LS -Al $TESTDIR 99*2fae26bdSAlan Somers log_fail "$TESTDIR contains $FILE_COUNT after* files(s)." 100*2fae26bdSAlan Somersfi 101*2fae26bdSAlan Somers 102*2fae26bdSAlan SomersFILE_COUNT=`$LS -Al $TESTDIR/before* 2> /dev/null \ 103*2fae26bdSAlan Somers | $GREP -v "total" | wc -l` 104*2fae26bdSAlan Somersif [[ $FILE_COUNT -ne $COUNT ]]; then 105*2fae26bdSAlan Somers $LS -Al $TESTDIR 106*2fae26bdSAlan Somers log_fail "$TESTDIR contains $FILE_COUNT before* files(s)." 107*2fae26bdSAlan Somersfi 108*2fae26bdSAlan Somers 109*2fae26bdSAlan Somerslog_pass "The rollback operation succeeded." 110