diff options
Diffstat (limited to 'tests/zfs-tests/tests/functional/snapshot/snapshot_017_pos.ksh')
-rwxr-xr-x | tests/zfs-tests/tests/functional/snapshot/snapshot_017_pos.ksh | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/tests/zfs-tests/tests/functional/snapshot/snapshot_017_pos.ksh b/tests/zfs-tests/tests/functional/snapshot/snapshot_017_pos.ksh new file mode 100755 index 000000000000..a21f8750d697 --- /dev/null +++ b/tests/zfs-tests/tests/functional/snapshot/snapshot_017_pos.ksh @@ -0,0 +1,202 @@ +#!/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 2008 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + + +# +# Copyright (c) 2013, 2016 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/snapshot/snapshot.cfg + +# +# DESCRIPTION: +# +# Directory structure of snapshots reflects filesystem structure. +# +# STRATEGY: +# +# This test makes sure that the directory structure of snapshots is +# a proper reflection of the filesystem the snapshot was taken of. +# +# 1. Create a simple directory structure of files and directories +# 2. Take a snapshot of the filesystem +# 3. Modify original filesystem +# 4. Walk down the snapshot directory structure verifying it +# checking with both absolute and relative paths +# + +verify_runnable "both" + +function cleanup +{ + cd $SAVED_DIR + + if datasetexists $TESTPOOL/$TESTFS ; then + log_must zfs destroy -Rf $TESTPOOL/$TESTFS + fi + + log_must zfs create $TESTPOOL/$TESTFS + log_must zfs set mountpoint=$TESTDIR $TESTPOOL/$TESTFS +} + +function verify_structure { + + # check absolute paths + DIR=$PWD + verify_file $DIR/file1 + verify_file $DIR/file2 + verify_file $DIR/dir1/file3 + verify_file $DIR/dir1/file4 + verify_file $DIR/dir1/dir2/file5 + verify_file $DIR/dir1/dir2/file6 + + verify_no_file $DIR/file99 + + # check relative paths + verify_file ./file1 + verify_file ./file2 + verify_file ./dir1/file3 + verify_file ./dir1/file4 + verify_file ./dir1/dir2/file5 + verify_file ./dir1/dir2/file6 + + cd dir1 + verify_file ../file1 + verify_file ../file2 + verify_file ./file3 + verify_file ./file4 + + verify_no_file ../file99 + + cd dir2 + verify_file ./file5 + verify_file ./file6 + verify_file ../file3 + verify_file ../file4 + verify_no_file ../file99 + + verify_file ../../file1 + verify_file ../../file2 + verify_no_file ../../file99 +} + +function verify_file { + if [ ! -e $1 ] + then + log_note "Working dir is $PWD" + log_fail "File $1 does not exist!" + fi +} + +function verify_no_file { + if [ -e $1 ] + then + log_note "Working dir is $PWD" + log_fail "File $1 exists when it should not!" + fi +} + +function verify_dir { + if [ ! -d $1 ] + then + log_note "Working dir is $PWD" + log_fail "Directory $1 does not exist!" + fi +} + +log_assert "Directory structure of snapshots reflects filesystem structure." +log_onexit cleanup + +SAVED_DIR=$PWD + +# +# Create a directory structure with the following files +# +# ./file1 +# ./file2 +# ./dir1/file3 +# ./dir1/file4 +# ./dir1/dir2/file5 +# ./dir1/dir2/file6 + +cd $TESTDIR +mkfile 10m file1 +mkfile 20m file2 +mkdir dir1 +cd dir1 +mkfile 10m file3 +mkfile 20m file4 +mkdir dir2 +cd dir2 +mkfile 10m file5 +mkfile 20m file6 + +# Now walk the directory structure verifying it +cd $TESTDIR +verify_structure + +# Take snapshots +log_must zfs snapshot $TESTPOOL/$TESTFS@snap_a +log_must zfs snapshot $TESTPOOL/$TESTFS@snap_b + +# Change the filesystem structure by renaming files in the original structure +# The snapshot file structure should not change +cd $TESTDIR +log_must mv file2 file99 +cd dir1 +log_must mv file4 file99 +cd dir2 +log_must mv file6 file99 + +# verify the top level snapshot directories +verify_dir $TESTDIR/.zfs +verify_dir $TESTDIR/.zfs/snapshot +verify_dir $TESTDIR/.zfs/snapshot/snap_a +verify_dir $TESTDIR/.zfs/snapshot/snap_b + +cd $TESTDIR/.zfs/snapshot/snap_a +verify_structure + +cd $TESTDIR/.zfs/snapshot/snap_b +verify_structure + +cd $TESTDIR/.zfs +verify_dir snapshot +cd $TESTDIR/.zfs/snapshot +verify_dir snap_a +verify_dir snap_b + +cd snap_a +verify_dir ../snap_a +verify_dir ../snap_b + +cd .. +verify_dir snap_a +verify_dir snap_b + +log_pass "Directory structure of snapshots reflects filesystem structure." |