All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
@ 2012-07-19  9:24 Liu Bo
  2012-07-19 10:32 ` Liu Bo
  0 siblings, 1 reply; 8+ messages in thread
From: Liu Bo @ 2012-07-19  9:24 UTC (permalink / raw)
  To: Linux Btrfs

From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>

This patch adds more cases in 254 for testing btrfs snapshot.

Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
---
 254 |  321 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 317 insertions(+), 4 deletions(-)

diff --git a/254 b/254
index 7b74a02..9c320d0 100755
--- a/254
+++ b/254
@@ -23,13 +23,14 @@
 #
 # creator
 owner=josef@redhat.com
-
+owner=zhoub-fnst@cn.fujitsu.com
+n=0
 seq=`basename $0`
 echo "QA output created by $seq"
 
 here=`pwd`
 tmp=/tmp/$$
-status=1	# failure is the default!
+status=0	# success is the default!
 
 _cleanup()
 {
@@ -47,7 +48,7 @@ _supported_fs btrfs
 _supported_os Linux
 _require_scratch
 
-_scratch_mkfs > /dev/null 2>&1
+_scratch_mkfs_sized `expr 1024 \* 1024 \* 1024` > /dev/null 2>&1
 _scratch_mount
 
 # First test basic snapshotting
@@ -105,4 +106,316 @@ _scratch_remount
 echo "List root dir"
 ls $SCRATCH_MNT
 
-status=0 ; exit
+# The following is added in 2012/07/12, add more cases for testing snapshot 
+
+_prepare_snapshot()
+{
+	_scratch_remount > /dev/null
+	btrfs sub snap $SCRATCH_MNT $SCRATCH_MNT/basesnapshot > /dev/null 2>>$here/$seq.full
+	btrfs sub snap -r $SCRATCH_MNT $SCRATCH_MNT/readonlysnapshot > /dev/null 2>>$here/$seq.full
+	_scratch_unmount > /dev/null 2>>$here/$seq.full
+	VALID_SUBVOLUME="basesnapshot"
+	VALID_RO_SUBVOLUME="readonlysnapshot"
+	SNAPSHOTSTR="snapshot"
+	FILE1="file1-"
+	FILE2="file2-"
+	MVFILE2="newfile2-"
+	DIR1="dir1-"
+	DIR2="dir2-"
+	MVDIR2="newdir2-"
+	MVSNAPSHOT="mvsnapshot-"
+	SRCSUBVOL="srcsubvol-"
+}
+
+_parse_options()
+{
+	SOURCE_TARGET="$1"
+	case $SOURCE_TARGET in
+		"1")
+			SOURCE_SUBVOLUME="$VALID_SUBVOLUME"
+			;;
+	esac
+	SOURCE_READ="$2"
+	case $SOURCE_READ in
+		"1")
+			SOURCE_SUBVOLUME="$VALID_RO_SUBVOLUME"
+			;;
+	esac
+	DESTINATION_TARGET="$3"
+	case $DESTINATION_TARGET in
+		"1")
+			DESTINATION_SUBVOLUME=$SNAPSHOTSTR$n
+			;;
+	esac
+	DESTINATION_READ="$4"
+	case $DESTINATION_READ in
+		"1")
+			SNAPSHOTOPT_STR="-r"
+			;;
+		"2")
+			SNAPSHOTOPT_STR=""
+			;;
+	esac
+	MOUNT_OPT="$5"
+	case $MOUNT_OPT in
+		"1")
+			MOUNT_OPT_STR=""
+			;;
+		"2")
+			MOUNT_OPT_STR="-r"
+			;;
+		"3")
+			MOUNT_OPT_STR="-o nodatacow"
+			;;
+	esac
+	FILE_OPERATION_OPT="$6"
+	SNAPSHOT_ACTION_OPT="$7"
+	TEST_DIR1=$DIR1$n
+	TEST_DIR2=$DIR2$n
+	TEST_MVDIR2=$MVDIR2$n
+	TEST_FILE1=$FILE1$n
+	TEST_FILE2=$FILE2$n
+	TEST_MVFILE2=$MVFILE2$n
+	TEST_MVSNAPSHOT=$MVSNAPSHOT$n
+	SRC_SUBVOLUME=$SRCSUBVOL$n
+	n=$[n+1]
+}
+
+_create_file()
+{
+	mkdir $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_DIR2 > /dev/null
+	touch $SRC_SUBVOLUME/$TEST_FILE1 $SRC_SUBVOLUME/$TEST_FILE2 > /dev/null
+}
+
+_do_file_operation()
+{
+	btrfs filesystem balance $SCRATCH_MNT > /dev/null 2>&1 &
+	rm -rf $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_FILE1 > /dev/null
+	mv $SRC_SUBVOLUME/$TEST_DIR2 $SRC_SUBVOLUME/$TEST_MVDIR2 > /dev/null
+	mv $SRC_SUBVOLUME/$TEST_FILE2 $SRC_SUBVOLUME/$TEST_MVFILE2 > /dev/null
+}
+
+_do_snapshot_action()
+{
+	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
+		btrfs subvolume delete $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	fi
+	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
+		mv $DESTINATION_SUBVOLUME $TEST_MVSNAPSHOT > /dev/null 2>>$here/$seq.full
+	fi
+}
+
+_check_snapshot()
+{
+	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
+		if [ -d "$DESTINATION_SUBVOLUME" ];then
+			echo "case $n fails, deleting snapshot fails." >> $here/$seq.full
+			status=1
+		fi
+	fi
+	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
+		if [ ! -d "$TEST_MVSNAPSHOT" ];then
+			echo "case $n fails, renaming snapshot fails." >> $here/$seq.full
+			status=1
+		fi
+	fi
+
+}
+
+_check_file()
+{
+	cd $DESTINATION_SUBVOLUME
+	if [ "$FILE_OPERATION_OPT" == 2 ];then
+		if [ -d "$TEST_DIR1" ];then
+			echo "case $n fails, before snapshot we delete dir in src, but it exists in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ -f "$TEST_FILE1" ];then
+			echo "case $n fails, before snapshot we delete file in src, but it exists in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ -d "$TEST_DIR2" -o ! -d "$TEST_MVDIR2" ];then
+			echo "case $n fails, before snapshot we rename dir in src, but it remains in snap" >> $here/$seq.full
+			status=1
+
+		fi
+		if [ -f "$TEST_FILE2" -o ! -f "$TEST_MVFILE2" ];then
+			echo "case $n fails, before snapshot we rename file in src,but it remains in snap" >> $here/$seq.full
+			status=1
+		fi
+
+	else
+		if [ ! -d "$TEST_DIR1" ];then
+			echo "case $n fails, after snapshot we delete dir in src, but it does't exist in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ ! -f "$TEST_FILE1" ];then
+			echo "case $n fails, after snapshot we delete file in src, but it does't exist in snap" >> $here/$seq.full
+			status=1
+
+		fi
+		if [ ! -d "$TEST_DIR2" -o -d "$TEST_MVDIR2" ];then
+			echo "case $n fails, after snapshot we rename dir in src, but it also changes in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ ! -f "$TEST_FILE2" -o -f "$TEST_MVFILE2" ];then
+			echo "case $n fails, after snapshot we rename file in src, but it also changes in snap" >> $here/$seq.full
+			status=1
+		fi
+	fi
+	btrfs filesystem balance cancel $SCRATCH_MNT > /dev/null 2>&1
+	wait 
+	cd ..
+}
+
+_test_snapshot_ro()
+{
+	btrfs sub snap $SNAPSHOTOPT_STR $SOURCE_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>&1
+	if [ "$?" == 0  ];then
+		if [ "$MOUNT_OPT" != 1 ];then
+			echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
+			status=1
+		else
+			if [ "$DESTINATION_READ" == 1 ];then
+				if [ -w "$DESTINATION_SUBVOLUME" ];then
+					echo "case $n fails, snapshot should be readonly." >> $here/$seq.full
+					status=1
+				fi
+			else
+				if [ ! -w "$DESTINATION_SUBVOLUME" ];then
+					echo  "case $n fails, snapshot should be writable." >> $here/$seq.full
+					status=1
+				fi
+			fi
+		fi
+		
+	fi
+}
+
+_test_snapshot_operation()
+{	
+	btrfs sub create $SRC_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	_create_file
+	if [ "$FILE_OPERATION_OPT" == 2 ];then
+		_do_file_operation
+	fi
+	btrfs sub snap $SRC_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	if [ "$?" == 0 ];then
+		if [ "$FILE_OPERATION_OPT" == 3 ];then
+			_do_file_operation
+		fi 
+		if [ "$FILE_OPERATION_OPT" -eq "2" -o "$FILE_OPERATION_OPT" -eq "3" ];then
+			_check_file
+		fi
+		_do_snapshot_action
+		_check_snapshot
+	else
+		status=1
+		echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
+	fi
+}
+
+_test_process()
+{
+	_scratch_mount "$MOUNT_OPT_STR"
+	cd $SCRATCH_MNT
+	if [ "$FILE_OPERATION_OPT" == 0 ];then
+			_test_snapshot_ro
+	else
+			_test_snapshot_operation
+	fi
+	cd ~
+	_scratch_unmount 
+	_check_test_fs 
+	if [ "$?" != 0 ];then
+		echo "case $n fails, btrfsck fails." >> $here/$seq.full
+		status=1
+	fi
+}
+
+rm -rf $here/$seq.full
+_prepare_snapshot
+
+# Src subvol | Src readonly | Des subvol | Des readonly | Mount opt | File operation | Snap operation
+
+# case 1	
+# Valid Src | RO | Valid Des | RO | Default | Nothing | Create
+_parse_options 1 1 1 1 1 0 0
+_test_process
+
+# case 2
+# Valid Src | RO | Valid Des | Writable | Default | Nothing | Create
+_parse_options 1 1 1 2 1 0 0
+_test_process
+
+# case 3
+# Valid Src | Writable | Valid Des | RO | Default | Nothing | Create
+_parse_options 1 2 1 1 1 0 0
+_test_process
+
+# case 4
+# Valid Src | Writable | Valid Des | Writable | Default | Nothing | Create
+_parse_options 1 2 1 2 1 0 0
+_test_process
+
+# case 5
+# Valid Src | RO | Valid Des | RO | -r | Nothing | Create
+_parse_options 1 1 1 1 2 0 0
+_test_process
+
+# case 6
+# Valid Src | RO | Valid Des | Writable | -r | Nothing | Create
+_parse_options 1 1 1 2 2 0 0
+_test_process
+
+# case 7
+# Valid Src | Writable | Valid Des | RO | -r | Nothing | Create
+_parse_options 1 2 1 1 2 0 0
+_test_process
+
+# case 8
+# Valid Src | Writable | Valid Des | Writable | -r | Nothing | Create
+_parse_options 1 2 1 2 2 0 0
+_test_process
+
+# case 9
+# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Delete
+_parse_options 1 2 1 2 1 2 2
+_test_process
+
+# case 10
+# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Rename
+_parse_options 1 2 1 2 1 2 3
+_test_process
+
+# case 11
+# Valid Src | Writable | Valid Des | Writable | Default | After snap | Delete
+_parse_options 1 2 1 2 1 3 2
+_test_process
+
+# case 12
+# Valid Src | Writable | Valid Des | Writable | Default | After snap | Rename
+_parse_options 1 2 1 2 1 3 3
+_test_process
+
+# case 13
+# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Delete
+_parse_options 1 2 1 2 3 2 2
+_test_process
+
+# case 14
+# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Rename
+_parse_options 1 2 1 2 3 2 3
+_test_process
+
+# case 15
+# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Delete
+_parse_options 1 2 1 2 3 3 2
+_test_process
+
+# case 16
+# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Rename
+_parse_options 1 2 1 2 3 3 3
+_test_process
+
+exit
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
  2012-07-19  9:24 [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254 Liu Bo
@ 2012-07-19 10:32 ` Liu Bo
  0 siblings, 0 replies; 8+ messages in thread
From: Liu Bo @ 2012-07-19 10:32 UTC (permalink / raw)
  To: Linux Btrfs

Please ignore this...I forgot to CC xfs, sorry.

thanks,
liubo

On 07/19/2012 05:24 PM, Liu Bo wrote:

> From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
> 
> This patch adds more cases in 254 for testing btrfs snapshot.
> 
> Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
> ---
>  254 |  321 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 317 insertions(+), 4 deletions(-)
> 
> diff --git a/254 b/254
> index 7b74a02..9c320d0 100755
> --- a/254
> +++ b/254
> @@ -23,13 +23,14 @@
>  #
>  # creator
>  owner=josef@redhat.com
> -
> +owner=zhoub-fnst@cn.fujitsu.com
> +n=0
>  seq=`basename $0`
>  echo "QA output created by $seq"
>  
>  here=`pwd`
>  tmp=/tmp/$$
> -status=1	# failure is the default!
> +status=0	# success is the default!
>  
>  _cleanup()
>  {
> @@ -47,7 +48,7 @@ _supported_fs btrfs
>  _supported_os Linux
>  _require_scratch
>  
> -_scratch_mkfs > /dev/null 2>&1
> +_scratch_mkfs_sized `expr 1024 \* 1024 \* 1024` > /dev/null 2>&1
>  _scratch_mount
>  
>  # First test basic snapshotting
> @@ -105,4 +106,316 @@ _scratch_remount
>  echo "List root dir"
>  ls $SCRATCH_MNT
>  
> -status=0 ; exit
> +# The following is added in 2012/07/12, add more cases for testing snapshot 
> +
> +_prepare_snapshot()
> +{
> +	_scratch_remount > /dev/null
> +	btrfs sub snap $SCRATCH_MNT $SCRATCH_MNT/basesnapshot > /dev/null 2>>$here/$seq.full
> +	btrfs sub snap -r $SCRATCH_MNT $SCRATCH_MNT/readonlysnapshot > /dev/null 2>>$here/$seq.full
> +	_scratch_unmount > /dev/null 2>>$here/$seq.full
> +	VALID_SUBVOLUME="basesnapshot"
> +	VALID_RO_SUBVOLUME="readonlysnapshot"
> +	SNAPSHOTSTR="snapshot"
> +	FILE1="file1-"
> +	FILE2="file2-"
> +	MVFILE2="newfile2-"
> +	DIR1="dir1-"
> +	DIR2="dir2-"
> +	MVDIR2="newdir2-"
> +	MVSNAPSHOT="mvsnapshot-"
> +	SRCSUBVOL="srcsubvol-"
> +}
> +
> +_parse_options()
> +{
> +	SOURCE_TARGET="$1"
> +	case $SOURCE_TARGET in
> +		"1")
> +			SOURCE_SUBVOLUME="$VALID_SUBVOLUME"
> +			;;
> +	esac
> +	SOURCE_READ="$2"
> +	case $SOURCE_READ in
> +		"1")
> +			SOURCE_SUBVOLUME="$VALID_RO_SUBVOLUME"
> +			;;
> +	esac
> +	DESTINATION_TARGET="$3"
> +	case $DESTINATION_TARGET in
> +		"1")
> +			DESTINATION_SUBVOLUME=$SNAPSHOTSTR$n
> +			;;
> +	esac
> +	DESTINATION_READ="$4"
> +	case $DESTINATION_READ in
> +		"1")
> +			SNAPSHOTOPT_STR="-r"
> +			;;
> +		"2")
> +			SNAPSHOTOPT_STR=""
> +			;;
> +	esac
> +	MOUNT_OPT="$5"
> +	case $MOUNT_OPT in
> +		"1")
> +			MOUNT_OPT_STR=""
> +			;;
> +		"2")
> +			MOUNT_OPT_STR="-r"
> +			;;
> +		"3")
> +			MOUNT_OPT_STR="-o nodatacow"
> +			;;
> +	esac
> +	FILE_OPERATION_OPT="$6"
> +	SNAPSHOT_ACTION_OPT="$7"
> +	TEST_DIR1=$DIR1$n
> +	TEST_DIR2=$DIR2$n
> +	TEST_MVDIR2=$MVDIR2$n
> +	TEST_FILE1=$FILE1$n
> +	TEST_FILE2=$FILE2$n
> +	TEST_MVFILE2=$MVFILE2$n
> +	TEST_MVSNAPSHOT=$MVSNAPSHOT$n
> +	SRC_SUBVOLUME=$SRCSUBVOL$n
> +	n=$[n+1]
> +}
> +
> +_create_file()
> +{
> +	mkdir $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_DIR2 > /dev/null
> +	touch $SRC_SUBVOLUME/$TEST_FILE1 $SRC_SUBVOLUME/$TEST_FILE2 > /dev/null
> +}
> +
> +_do_file_operation()
> +{
> +	btrfs filesystem balance $SCRATCH_MNT > /dev/null 2>&1 &
> +	rm -rf $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_FILE1 > /dev/null
> +	mv $SRC_SUBVOLUME/$TEST_DIR2 $SRC_SUBVOLUME/$TEST_MVDIR2 > /dev/null
> +	mv $SRC_SUBVOLUME/$TEST_FILE2 $SRC_SUBVOLUME/$TEST_MVFILE2 > /dev/null
> +}
> +
> +_do_snapshot_action()
> +{
> +	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
> +		btrfs subvolume delete $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
> +	fi
> +	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
> +		mv $DESTINATION_SUBVOLUME $TEST_MVSNAPSHOT > /dev/null 2>>$here/$seq.full
> +	fi
> +}
> +
> +_check_snapshot()
> +{
> +	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
> +		if [ -d "$DESTINATION_SUBVOLUME" ];then
> +			echo "case $n fails, deleting snapshot fails." >> $here/$seq.full
> +			status=1
> +		fi
> +	fi
> +	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
> +		if [ ! -d "$TEST_MVSNAPSHOT" ];then
> +			echo "case $n fails, renaming snapshot fails." >> $here/$seq.full
> +			status=1
> +		fi
> +	fi
> +
> +}
> +
> +_check_file()
> +{
> +	cd $DESTINATION_SUBVOLUME
> +	if [ "$FILE_OPERATION_OPT" == 2 ];then
> +		if [ -d "$TEST_DIR1" ];then
> +			echo "case $n fails, before snapshot we delete dir in src, but it exists in snap" >> $here/$seq.full
> +			status=1
> +		fi
> +		if [ -f "$TEST_FILE1" ];then
> +			echo "case $n fails, before snapshot we delete file in src, but it exists in snap" >> $here/$seq.full
> +			status=1
> +		fi
> +		if [ -d "$TEST_DIR2" -o ! -d "$TEST_MVDIR2" ];then
> +			echo "case $n fails, before snapshot we rename dir in src, but it remains in snap" >> $here/$seq.full
> +			status=1
> +
> +		fi
> +		if [ -f "$TEST_FILE2" -o ! -f "$TEST_MVFILE2" ];then
> +			echo "case $n fails, before snapshot we rename file in src,but it remains in snap" >> $here/$seq.full
> +			status=1
> +		fi
> +
> +	else
> +		if [ ! -d "$TEST_DIR1" ];then
> +			echo "case $n fails, after snapshot we delete dir in src, but it does't exist in snap" >> $here/$seq.full
> +			status=1
> +		fi
> +		if [ ! -f "$TEST_FILE1" ];then
> +			echo "case $n fails, after snapshot we delete file in src, but it does't exist in snap" >> $here/$seq.full
> +			status=1
> +
> +		fi
> +		if [ ! -d "$TEST_DIR2" -o -d "$TEST_MVDIR2" ];then
> +			echo "case $n fails, after snapshot we rename dir in src, but it also changes in snap" >> $here/$seq.full
> +			status=1
> +		fi
> +		if [ ! -f "$TEST_FILE2" -o -f "$TEST_MVFILE2" ];then
> +			echo "case $n fails, after snapshot we rename file in src, but it also changes in snap" >> $here/$seq.full
> +			status=1
> +		fi
> +	fi
> +	btrfs filesystem balance cancel $SCRATCH_MNT > /dev/null 2>&1
> +	wait 
> +	cd ..
> +}
> +
> +_test_snapshot_ro()
> +{
> +	btrfs sub snap $SNAPSHOTOPT_STR $SOURCE_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>&1
> +	if [ "$?" == 0  ];then
> +		if [ "$MOUNT_OPT" != 1 ];then
> +			echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
> +			status=1
> +		else
> +			if [ "$DESTINATION_READ" == 1 ];then
> +				if [ -w "$DESTINATION_SUBVOLUME" ];then
> +					echo "case $n fails, snapshot should be readonly." >> $here/$seq.full
> +					status=1
> +				fi
> +			else
> +				if [ ! -w "$DESTINATION_SUBVOLUME" ];then
> +					echo  "case $n fails, snapshot should be writable." >> $here/$seq.full
> +					status=1
> +				fi
> +			fi
> +		fi
> +		
> +	fi
> +}
> +
> +_test_snapshot_operation()
> +{	
> +	btrfs sub create $SRC_SUBVOLUME > /dev/null 2>>$here/$seq.full
> +	_create_file
> +	if [ "$FILE_OPERATION_OPT" == 2 ];then
> +		_do_file_operation
> +	fi
> +	btrfs sub snap $SRC_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
> +	if [ "$?" == 0 ];then
> +		if [ "$FILE_OPERATION_OPT" == 3 ];then
> +			_do_file_operation
> +		fi 
> +		if [ "$FILE_OPERATION_OPT" -eq "2" -o "$FILE_OPERATION_OPT" -eq "3" ];then
> +			_check_file
> +		fi
> +		_do_snapshot_action
> +		_check_snapshot
> +	else
> +		status=1
> +		echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
> +	fi
> +}
> +
> +_test_process()
> +{
> +	_scratch_mount "$MOUNT_OPT_STR"
> +	cd $SCRATCH_MNT
> +	if [ "$FILE_OPERATION_OPT" == 0 ];then
> +			_test_snapshot_ro
> +	else
> +			_test_snapshot_operation
> +	fi
> +	cd ~
> +	_scratch_unmount 
> +	_check_test_fs 
> +	if [ "$?" != 0 ];then
> +		echo "case $n fails, btrfsck fails." >> $here/$seq.full
> +		status=1
> +	fi
> +}
> +
> +rm -rf $here/$seq.full
> +_prepare_snapshot
> +
> +# Src subvol | Src readonly | Des subvol | Des readonly | Mount opt | File operation | Snap operation
> +
> +# case 1	
> +# Valid Src | RO | Valid Des | RO | Default | Nothing | Create
> +_parse_options 1 1 1 1 1 0 0
> +_test_process
> +
> +# case 2
> +# Valid Src | RO | Valid Des | Writable | Default | Nothing | Create
> +_parse_options 1 1 1 2 1 0 0
> +_test_process
> +
> +# case 3
> +# Valid Src | Writable | Valid Des | RO | Default | Nothing | Create
> +_parse_options 1 2 1 1 1 0 0
> +_test_process
> +
> +# case 4
> +# Valid Src | Writable | Valid Des | Writable | Default | Nothing | Create
> +_parse_options 1 2 1 2 1 0 0
> +_test_process
> +
> +# case 5
> +# Valid Src | RO | Valid Des | RO | -r | Nothing | Create
> +_parse_options 1 1 1 1 2 0 0
> +_test_process
> +
> +# case 6
> +# Valid Src | RO | Valid Des | Writable | -r | Nothing | Create
> +_parse_options 1 1 1 2 2 0 0
> +_test_process
> +
> +# case 7
> +# Valid Src | Writable | Valid Des | RO | -r | Nothing | Create
> +_parse_options 1 2 1 1 2 0 0
> +_test_process
> +
> +# case 8
> +# Valid Src | Writable | Valid Des | Writable | -r | Nothing | Create
> +_parse_options 1 2 1 2 2 0 0
> +_test_process
> +
> +# case 9
> +# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Delete
> +_parse_options 1 2 1 2 1 2 2
> +_test_process
> +
> +# case 10
> +# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Rename
> +_parse_options 1 2 1 2 1 2 3
> +_test_process
> +
> +# case 11
> +# Valid Src | Writable | Valid Des | Writable | Default | After snap | Delete
> +_parse_options 1 2 1 2 1 3 2
> +_test_process
> +
> +# case 12
> +# Valid Src | Writable | Valid Des | Writable | Default | After snap | Rename
> +_parse_options 1 2 1 2 1 3 3
> +_test_process
> +
> +# case 13
> +# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Delete
> +_parse_options 1 2 1 2 3 2 2
> +_test_process
> +
> +# case 14
> +# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Rename
> +_parse_options 1 2 1 2 3 2 3
> +_test_process
> +
> +# case 15
> +# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Delete
> +_parse_options 1 2 1 2 3 3 2
> +_test_process
> +
> +# case 16
> +# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Rename
> +_parse_options 1 2 1 2 3 3 3
> +_test_process
> +
> +exit



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
  2012-07-20  0:24   ` Dave Chinner
@ 2012-07-20  1:36     ` Liu Bo
  -1 siblings, 0 replies; 8+ messages in thread
From: Liu Bo @ 2012-07-20  1:36 UTC (permalink / raw)
  To: Dave Chinner; +Cc: xfs-oss, Linux Btrfs

On 07/20/2012 08:24 AM, Dave Chinner wrote:

> On Thu, Jul 19, 2012 at 06:27:07PM +0800, Liu Bo wrote:
>> From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
>>
>> This patch adds more cases in 254 for testing btrfs snapshot.
>>
>> Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
> 
> I think it is better to create a new test than modify the old one.
> That way it is easy to tell the difference between a new failure and
> regression.
> 


Sure, that makes sense.

thanks,
liubo

> Cheers,
> 
> Dave.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
@ 2012-07-20  1:36     ` Liu Bo
  0 siblings, 0 replies; 8+ messages in thread
From: Liu Bo @ 2012-07-20  1:36 UTC (permalink / raw)
  To: Dave Chinner; +Cc: Linux Btrfs, xfs-oss

On 07/20/2012 08:24 AM, Dave Chinner wrote:

> On Thu, Jul 19, 2012 at 06:27:07PM +0800, Liu Bo wrote:
>> From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
>>
>> This patch adds more cases in 254 for testing btrfs snapshot.
>>
>> Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
> 
> I think it is better to create a new test than modify the old one.
> That way it is easy to tell the difference between a new failure and
> regression.
> 


Sure, that makes sense.

thanks,
liubo

> Cheers,
> 
> Dave.


_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
  2012-07-19 10:27 ` Liu Bo
@ 2012-07-20  0:24   ` Dave Chinner
  -1 siblings, 0 replies; 8+ messages in thread
From: Dave Chinner @ 2012-07-20  0:24 UTC (permalink / raw)
  To: Liu Bo; +Cc: xfs-oss, Linux Btrfs

On Thu, Jul 19, 2012 at 06:27:07PM +0800, Liu Bo wrote:
> From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
> 
> This patch adds more cases in 254 for testing btrfs snapshot.
> 
> Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>

I think it is better to create a new test than modify the old one.
That way it is easy to tell the difference between a new failure and
regression.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
@ 2012-07-20  0:24   ` Dave Chinner
  0 siblings, 0 replies; 8+ messages in thread
From: Dave Chinner @ 2012-07-20  0:24 UTC (permalink / raw)
  To: Liu Bo; +Cc: Linux Btrfs, xfs-oss

On Thu, Jul 19, 2012 at 06:27:07PM +0800, Liu Bo wrote:
> From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
> 
> This patch adds more cases in 254 for testing btrfs snapshot.
> 
> Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>

I think it is better to create a new test than modify the old one.
That way it is easy to tell the difference between a new failure and
regression.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
@ 2012-07-19 10:27 ` Liu Bo
  0 siblings, 0 replies; 8+ messages in thread
From: Liu Bo @ 2012-07-19 10:27 UTC (permalink / raw)
  To: xfs-oss; +Cc: Linux Btrfs

From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>

This patch adds more cases in 254 for testing btrfs snapshot.

Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
---
 254 |  321 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 317 insertions(+), 4 deletions(-)

diff --git a/254 b/254
index 7b74a02..9c320d0 100755
--- a/254
+++ b/254
@@ -23,13 +23,14 @@
 #
 # creator
 owner=josef@redhat.com
-
+owner=zhoub-fnst@cn.fujitsu.com
+n=0
 seq=`basename $0`
 echo "QA output created by $seq"
 
 here=`pwd`
 tmp=/tmp/$$
-status=1	# failure is the default!
+status=0	# success is the default!
 
 _cleanup()
 {
@@ -47,7 +48,7 @@ _supported_fs btrfs
 _supported_os Linux
 _require_scratch
 
-_scratch_mkfs > /dev/null 2>&1
+_scratch_mkfs_sized `expr 1024 \* 1024 \* 1024` > /dev/null 2>&1
 _scratch_mount
 
 # First test basic snapshotting
@@ -105,4 +106,316 @@ _scratch_remount
 echo "List root dir"
 ls $SCRATCH_MNT
 
-status=0 ; exit
+# The following is added in 2012/07/12, add more cases for testing snapshot 
+
+_prepare_snapshot()
+{
+	_scratch_remount > /dev/null
+	btrfs sub snap $SCRATCH_MNT $SCRATCH_MNT/basesnapshot > /dev/null 2>>$here/$seq.full
+	btrfs sub snap -r $SCRATCH_MNT $SCRATCH_MNT/readonlysnapshot > /dev/null 2>>$here/$seq.full
+	_scratch_unmount > /dev/null 2>>$here/$seq.full
+	VALID_SUBVOLUME="basesnapshot"
+	VALID_RO_SUBVOLUME="readonlysnapshot"
+	SNAPSHOTSTR="snapshot"
+	FILE1="file1-"
+	FILE2="file2-"
+	MVFILE2="newfile2-"
+	DIR1="dir1-"
+	DIR2="dir2-"
+	MVDIR2="newdir2-"
+	MVSNAPSHOT="mvsnapshot-"
+	SRCSUBVOL="srcsubvol-"
+}
+
+_parse_options()
+{
+	SOURCE_TARGET="$1"
+	case $SOURCE_TARGET in
+		"1")
+			SOURCE_SUBVOLUME="$VALID_SUBVOLUME"
+			;;
+	esac
+	SOURCE_READ="$2"
+	case $SOURCE_READ in
+		"1")
+			SOURCE_SUBVOLUME="$VALID_RO_SUBVOLUME"
+			;;
+	esac
+	DESTINATION_TARGET="$3"
+	case $DESTINATION_TARGET in
+		"1")
+			DESTINATION_SUBVOLUME=$SNAPSHOTSTR$n
+			;;
+	esac
+	DESTINATION_READ="$4"
+	case $DESTINATION_READ in
+		"1")
+			SNAPSHOTOPT_STR="-r"
+			;;
+		"2")
+			SNAPSHOTOPT_STR=""
+			;;
+	esac
+	MOUNT_OPT="$5"
+	case $MOUNT_OPT in
+		"1")
+			MOUNT_OPT_STR=""
+			;;
+		"2")
+			MOUNT_OPT_STR="-r"
+			;;
+		"3")
+			MOUNT_OPT_STR="-o nodatacow"
+			;;
+	esac
+	FILE_OPERATION_OPT="$6"
+	SNAPSHOT_ACTION_OPT="$7"
+	TEST_DIR1=$DIR1$n
+	TEST_DIR2=$DIR2$n
+	TEST_MVDIR2=$MVDIR2$n
+	TEST_FILE1=$FILE1$n
+	TEST_FILE2=$FILE2$n
+	TEST_MVFILE2=$MVFILE2$n
+	TEST_MVSNAPSHOT=$MVSNAPSHOT$n
+	SRC_SUBVOLUME=$SRCSUBVOL$n
+	n=$[n+1]
+}
+
+_create_file()
+{
+	mkdir $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_DIR2 > /dev/null
+	touch $SRC_SUBVOLUME/$TEST_FILE1 $SRC_SUBVOLUME/$TEST_FILE2 > /dev/null
+}
+
+_do_file_operation()
+{
+	btrfs filesystem balance $SCRATCH_MNT > /dev/null 2>&1 &
+	rm -rf $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_FILE1 > /dev/null
+	mv $SRC_SUBVOLUME/$TEST_DIR2 $SRC_SUBVOLUME/$TEST_MVDIR2 > /dev/null
+	mv $SRC_SUBVOLUME/$TEST_FILE2 $SRC_SUBVOLUME/$TEST_MVFILE2 > /dev/null
+}
+
+_do_snapshot_action()
+{
+	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
+		btrfs subvolume delete $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	fi
+	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
+		mv $DESTINATION_SUBVOLUME $TEST_MVSNAPSHOT > /dev/null 2>>$here/$seq.full
+	fi
+}
+
+_check_snapshot()
+{
+	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
+		if [ -d "$DESTINATION_SUBVOLUME" ];then
+			echo "case $n fails, deleting snapshot fails." >> $here/$seq.full
+			status=1
+		fi
+	fi
+	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
+		if [ ! -d "$TEST_MVSNAPSHOT" ];then
+			echo "case $n fails, renaming snapshot fails." >> $here/$seq.full
+			status=1
+		fi
+	fi
+
+}
+
+_check_file()
+{
+	cd $DESTINATION_SUBVOLUME
+	if [ "$FILE_OPERATION_OPT" == 2 ];then
+		if [ -d "$TEST_DIR1" ];then
+			echo "case $n fails, before snapshot we delete dir in src, but it exists in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ -f "$TEST_FILE1" ];then
+			echo "case $n fails, before snapshot we delete file in src, but it exists in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ -d "$TEST_DIR2" -o ! -d "$TEST_MVDIR2" ];then
+			echo "case $n fails, before snapshot we rename dir in src, but it remains in snap" >> $here/$seq.full
+			status=1
+
+		fi
+		if [ -f "$TEST_FILE2" -o ! -f "$TEST_MVFILE2" ];then
+			echo "case $n fails, before snapshot we rename file in src,but it remains in snap" >> $here/$seq.full
+			status=1
+		fi
+
+	else
+		if [ ! -d "$TEST_DIR1" ];then
+			echo "case $n fails, after snapshot we delete dir in src, but it does't exist in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ ! -f "$TEST_FILE1" ];then
+			echo "case $n fails, after snapshot we delete file in src, but it does't exist in snap" >> $here/$seq.full
+			status=1
+
+		fi
+		if [ ! -d "$TEST_DIR2" -o -d "$TEST_MVDIR2" ];then
+			echo "case $n fails, after snapshot we rename dir in src, but it also changes in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ ! -f "$TEST_FILE2" -o -f "$TEST_MVFILE2" ];then
+			echo "case $n fails, after snapshot we rename file in src, but it also changes in snap" >> $here/$seq.full
+			status=1
+		fi
+	fi
+	btrfs filesystem balance cancel $SCRATCH_MNT > /dev/null 2>&1
+	wait 
+	cd ..
+}
+
+_test_snapshot_ro()
+{
+	btrfs sub snap $SNAPSHOTOPT_STR $SOURCE_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>&1
+	if [ "$?" == 0  ];then
+		if [ "$MOUNT_OPT" != 1 ];then
+			echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
+			status=1
+		else
+			if [ "$DESTINATION_READ" == 1 ];then
+				if [ -w "$DESTINATION_SUBVOLUME" ];then
+					echo "case $n fails, snapshot should be readonly." >> $here/$seq.full
+					status=1
+				fi
+			else
+				if [ ! -w "$DESTINATION_SUBVOLUME" ];then
+					echo  "case $n fails, snapshot should be writable." >> $here/$seq.full
+					status=1
+				fi
+			fi
+		fi
+		
+	fi
+}
+
+_test_snapshot_operation()
+{	
+	btrfs sub create $SRC_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	_create_file
+	if [ "$FILE_OPERATION_OPT" == 2 ];then
+		_do_file_operation
+	fi
+	btrfs sub snap $SRC_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	if [ "$?" == 0 ];then
+		if [ "$FILE_OPERATION_OPT" == 3 ];then
+			_do_file_operation
+		fi 
+		if [ "$FILE_OPERATION_OPT" -eq "2" -o "$FILE_OPERATION_OPT" -eq "3" ];then
+			_check_file
+		fi
+		_do_snapshot_action
+		_check_snapshot
+	else
+		status=1
+		echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
+	fi
+}
+
+_test_process()
+{
+	_scratch_mount "$MOUNT_OPT_STR"
+	cd $SCRATCH_MNT
+	if [ "$FILE_OPERATION_OPT" == 0 ];then
+			_test_snapshot_ro
+	else
+			_test_snapshot_operation
+	fi
+	cd ~
+	_scratch_unmount 
+	_check_test_fs 
+	if [ "$?" != 0 ];then
+		echo "case $n fails, btrfsck fails." >> $here/$seq.full
+		status=1
+	fi
+}
+
+rm -rf $here/$seq.full
+_prepare_snapshot
+
+# Src subvol | Src readonly | Des subvol | Des readonly | Mount opt | File operation | Snap operation
+
+# case 1	
+# Valid Src | RO | Valid Des | RO | Default | Nothing | Create
+_parse_options 1 1 1 1 1 0 0
+_test_process
+
+# case 2
+# Valid Src | RO | Valid Des | Writable | Default | Nothing | Create
+_parse_options 1 1 1 2 1 0 0
+_test_process
+
+# case 3
+# Valid Src | Writable | Valid Des | RO | Default | Nothing | Create
+_parse_options 1 2 1 1 1 0 0
+_test_process
+
+# case 4
+# Valid Src | Writable | Valid Des | Writable | Default | Nothing | Create
+_parse_options 1 2 1 2 1 0 0
+_test_process
+
+# case 5
+# Valid Src | RO | Valid Des | RO | -r | Nothing | Create
+_parse_options 1 1 1 1 2 0 0
+_test_process
+
+# case 6
+# Valid Src | RO | Valid Des | Writable | -r | Nothing | Create
+_parse_options 1 1 1 2 2 0 0
+_test_process
+
+# case 7
+# Valid Src | Writable | Valid Des | RO | -r | Nothing | Create
+_parse_options 1 2 1 1 2 0 0
+_test_process
+
+# case 8
+# Valid Src | Writable | Valid Des | Writable | -r | Nothing | Create
+_parse_options 1 2 1 2 2 0 0
+_test_process
+
+# case 9
+# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Delete
+_parse_options 1 2 1 2 1 2 2
+_test_process
+
+# case 10
+# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Rename
+_parse_options 1 2 1 2 1 2 3
+_test_process
+
+# case 11
+# Valid Src | Writable | Valid Des | Writable | Default | After snap | Delete
+_parse_options 1 2 1 2 1 3 2
+_test_process
+
+# case 12
+# Valid Src | Writable | Valid Des | Writable | Default | After snap | Rename
+_parse_options 1 2 1 2 1 3 3
+_test_process
+
+# case 13
+# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Delete
+_parse_options 1 2 1 2 3 2 2
+_test_process
+
+# case 14
+# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Rename
+_parse_options 1 2 1 2 3 2 3
+_test_process
+
+# case 15
+# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Delete
+_parse_options 1 2 1 2 3 3 2
+_test_process
+
+# case 16
+# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Rename
+_parse_options 1 2 1 2 3 3 3
+_test_process
+
+exit
-- 
1.6.0.6

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
@ 2012-07-19 10:27 ` Liu Bo
  0 siblings, 0 replies; 8+ messages in thread
From: Liu Bo @ 2012-07-19 10:27 UTC (permalink / raw)
  To: xfs-oss; +Cc: Linux Btrfs

From: Zhou Bo <zhoub-fnst@cn.fujitsu.com>

This patch adds more cases in 254 for testing btrfs snapshot.

Signed-off-by: Zhou Bo <zhoub-fnst@cn.fujitsu.com>
---
 254 |  321 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 317 insertions(+), 4 deletions(-)

diff --git a/254 b/254
index 7b74a02..9c320d0 100755
--- a/254
+++ b/254
@@ -23,13 +23,14 @@
 #
 # creator
 owner=josef@redhat.com
-
+owner=zhoub-fnst@cn.fujitsu.com
+n=0
 seq=`basename $0`
 echo "QA output created by $seq"
 
 here=`pwd`
 tmp=/tmp/$$
-status=1	# failure is the default!
+status=0	# success is the default!
 
 _cleanup()
 {
@@ -47,7 +48,7 @@ _supported_fs btrfs
 _supported_os Linux
 _require_scratch
 
-_scratch_mkfs > /dev/null 2>&1
+_scratch_mkfs_sized `expr 1024 \* 1024 \* 1024` > /dev/null 2>&1
 _scratch_mount
 
 # First test basic snapshotting
@@ -105,4 +106,316 @@ _scratch_remount
 echo "List root dir"
 ls $SCRATCH_MNT
 
-status=0 ; exit
+# The following is added in 2012/07/12, add more cases for testing snapshot 
+
+_prepare_snapshot()
+{
+	_scratch_remount > /dev/null
+	btrfs sub snap $SCRATCH_MNT $SCRATCH_MNT/basesnapshot > /dev/null 2>>$here/$seq.full
+	btrfs sub snap -r $SCRATCH_MNT $SCRATCH_MNT/readonlysnapshot > /dev/null 2>>$here/$seq.full
+	_scratch_unmount > /dev/null 2>>$here/$seq.full
+	VALID_SUBVOLUME="basesnapshot"
+	VALID_RO_SUBVOLUME="readonlysnapshot"
+	SNAPSHOTSTR="snapshot"
+	FILE1="file1-"
+	FILE2="file2-"
+	MVFILE2="newfile2-"
+	DIR1="dir1-"
+	DIR2="dir2-"
+	MVDIR2="newdir2-"
+	MVSNAPSHOT="mvsnapshot-"
+	SRCSUBVOL="srcsubvol-"
+}
+
+_parse_options()
+{
+	SOURCE_TARGET="$1"
+	case $SOURCE_TARGET in
+		"1")
+			SOURCE_SUBVOLUME="$VALID_SUBVOLUME"
+			;;
+	esac
+	SOURCE_READ="$2"
+	case $SOURCE_READ in
+		"1")
+			SOURCE_SUBVOLUME="$VALID_RO_SUBVOLUME"
+			;;
+	esac
+	DESTINATION_TARGET="$3"
+	case $DESTINATION_TARGET in
+		"1")
+			DESTINATION_SUBVOLUME=$SNAPSHOTSTR$n
+			;;
+	esac
+	DESTINATION_READ="$4"
+	case $DESTINATION_READ in
+		"1")
+			SNAPSHOTOPT_STR="-r"
+			;;
+		"2")
+			SNAPSHOTOPT_STR=""
+			;;
+	esac
+	MOUNT_OPT="$5"
+	case $MOUNT_OPT in
+		"1")
+			MOUNT_OPT_STR=""
+			;;
+		"2")
+			MOUNT_OPT_STR="-r"
+			;;
+		"3")
+			MOUNT_OPT_STR="-o nodatacow"
+			;;
+	esac
+	FILE_OPERATION_OPT="$6"
+	SNAPSHOT_ACTION_OPT="$7"
+	TEST_DIR1=$DIR1$n
+	TEST_DIR2=$DIR2$n
+	TEST_MVDIR2=$MVDIR2$n
+	TEST_FILE1=$FILE1$n
+	TEST_FILE2=$FILE2$n
+	TEST_MVFILE2=$MVFILE2$n
+	TEST_MVSNAPSHOT=$MVSNAPSHOT$n
+	SRC_SUBVOLUME=$SRCSUBVOL$n
+	n=$[n+1]
+}
+
+_create_file()
+{
+	mkdir $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_DIR2 > /dev/null
+	touch $SRC_SUBVOLUME/$TEST_FILE1 $SRC_SUBVOLUME/$TEST_FILE2 > /dev/null
+}
+
+_do_file_operation()
+{
+	btrfs filesystem balance $SCRATCH_MNT > /dev/null 2>&1 &
+	rm -rf $SRC_SUBVOLUME/$TEST_DIR1 $SRC_SUBVOLUME/$TEST_FILE1 > /dev/null
+	mv $SRC_SUBVOLUME/$TEST_DIR2 $SRC_SUBVOLUME/$TEST_MVDIR2 > /dev/null
+	mv $SRC_SUBVOLUME/$TEST_FILE2 $SRC_SUBVOLUME/$TEST_MVFILE2 > /dev/null
+}
+
+_do_snapshot_action()
+{
+	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
+		btrfs subvolume delete $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	fi
+	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
+		mv $DESTINATION_SUBVOLUME $TEST_MVSNAPSHOT > /dev/null 2>>$here/$seq.full
+	fi
+}
+
+_check_snapshot()
+{
+	if [ "$SNAPSHOT_ACTION_OPT" == 2 ];then
+		if [ -d "$DESTINATION_SUBVOLUME" ];then
+			echo "case $n fails, deleting snapshot fails." >> $here/$seq.full
+			status=1
+		fi
+	fi
+	if [ "$SNAPSHOT_ACTION_OPT" == 3 ];then
+		if [ ! -d "$TEST_MVSNAPSHOT" ];then
+			echo "case $n fails, renaming snapshot fails." >> $here/$seq.full
+			status=1
+		fi
+	fi
+
+}
+
+_check_file()
+{
+	cd $DESTINATION_SUBVOLUME
+	if [ "$FILE_OPERATION_OPT" == 2 ];then
+		if [ -d "$TEST_DIR1" ];then
+			echo "case $n fails, before snapshot we delete dir in src, but it exists in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ -f "$TEST_FILE1" ];then
+			echo "case $n fails, before snapshot we delete file in src, but it exists in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ -d "$TEST_DIR2" -o ! -d "$TEST_MVDIR2" ];then
+			echo "case $n fails, before snapshot we rename dir in src, but it remains in snap" >> $here/$seq.full
+			status=1
+
+		fi
+		if [ -f "$TEST_FILE2" -o ! -f "$TEST_MVFILE2" ];then
+			echo "case $n fails, before snapshot we rename file in src,but it remains in snap" >> $here/$seq.full
+			status=1
+		fi
+
+	else
+		if [ ! -d "$TEST_DIR1" ];then
+			echo "case $n fails, after snapshot we delete dir in src, but it does't exist in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ ! -f "$TEST_FILE1" ];then
+			echo "case $n fails, after snapshot we delete file in src, but it does't exist in snap" >> $here/$seq.full
+			status=1
+
+		fi
+		if [ ! -d "$TEST_DIR2" -o -d "$TEST_MVDIR2" ];then
+			echo "case $n fails, after snapshot we rename dir in src, but it also changes in snap" >> $here/$seq.full
+			status=1
+		fi
+		if [ ! -f "$TEST_FILE2" -o -f "$TEST_MVFILE2" ];then
+			echo "case $n fails, after snapshot we rename file in src, but it also changes in snap" >> $here/$seq.full
+			status=1
+		fi
+	fi
+	btrfs filesystem balance cancel $SCRATCH_MNT > /dev/null 2>&1
+	wait 
+	cd ..
+}
+
+_test_snapshot_ro()
+{
+	btrfs sub snap $SNAPSHOTOPT_STR $SOURCE_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>&1
+	if [ "$?" == 0  ];then
+		if [ "$MOUNT_OPT" != 1 ];then
+			echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
+			status=1
+		else
+			if [ "$DESTINATION_READ" == 1 ];then
+				if [ -w "$DESTINATION_SUBVOLUME" ];then
+					echo "case $n fails, snapshot should be readonly." >> $here/$seq.full
+					status=1
+				fi
+			else
+				if [ ! -w "$DESTINATION_SUBVOLUME" ];then
+					echo  "case $n fails, snapshot should be writable." >> $here/$seq.full
+					status=1
+				fi
+			fi
+		fi
+		
+	fi
+}
+
+_test_snapshot_operation()
+{	
+	btrfs sub create $SRC_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	_create_file
+	if [ "$FILE_OPERATION_OPT" == 2 ];then
+		_do_file_operation
+	fi
+	btrfs sub snap $SRC_SUBVOLUME $DESTINATION_SUBVOLUME > /dev/null 2>>$here/$seq.full
+	if [ "$?" == 0 ];then
+		if [ "$FILE_OPERATION_OPT" == 3 ];then
+			_do_file_operation
+		fi 
+		if [ "$FILE_OPERATION_OPT" -eq "2" -o "$FILE_OPERATION_OPT" -eq "3" ];then
+			_check_file
+		fi
+		_do_snapshot_action
+		_check_snapshot
+	else
+		status=1
+		echo "case $n fails, btrfs snapshot fails." >> $here/$seq.full
+	fi
+}
+
+_test_process()
+{
+	_scratch_mount "$MOUNT_OPT_STR"
+	cd $SCRATCH_MNT
+	if [ "$FILE_OPERATION_OPT" == 0 ];then
+			_test_snapshot_ro
+	else
+			_test_snapshot_operation
+	fi
+	cd ~
+	_scratch_unmount 
+	_check_test_fs 
+	if [ "$?" != 0 ];then
+		echo "case $n fails, btrfsck fails." >> $here/$seq.full
+		status=1
+	fi
+}
+
+rm -rf $here/$seq.full
+_prepare_snapshot
+
+# Src subvol | Src readonly | Des subvol | Des readonly | Mount opt | File operation | Snap operation
+
+# case 1	
+# Valid Src | RO | Valid Des | RO | Default | Nothing | Create
+_parse_options 1 1 1 1 1 0 0
+_test_process
+
+# case 2
+# Valid Src | RO | Valid Des | Writable | Default | Nothing | Create
+_parse_options 1 1 1 2 1 0 0
+_test_process
+
+# case 3
+# Valid Src | Writable | Valid Des | RO | Default | Nothing | Create
+_parse_options 1 2 1 1 1 0 0
+_test_process
+
+# case 4
+# Valid Src | Writable | Valid Des | Writable | Default | Nothing | Create
+_parse_options 1 2 1 2 1 0 0
+_test_process
+
+# case 5
+# Valid Src | RO | Valid Des | RO | -r | Nothing | Create
+_parse_options 1 1 1 1 2 0 0
+_test_process
+
+# case 6
+# Valid Src | RO | Valid Des | Writable | -r | Nothing | Create
+_parse_options 1 1 1 2 2 0 0
+_test_process
+
+# case 7
+# Valid Src | Writable | Valid Des | RO | -r | Nothing | Create
+_parse_options 1 2 1 1 2 0 0
+_test_process
+
+# case 8
+# Valid Src | Writable | Valid Des | Writable | -r | Nothing | Create
+_parse_options 1 2 1 2 2 0 0
+_test_process
+
+# case 9
+# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Delete
+_parse_options 1 2 1 2 1 2 2
+_test_process
+
+# case 10
+# Valid Src | Writable | Valid Des | Writable | Default | Before snap | Rename
+_parse_options 1 2 1 2 1 2 3
+_test_process
+
+# case 11
+# Valid Src | Writable | Valid Des | Writable | Default | After snap | Delete
+_parse_options 1 2 1 2 1 3 2
+_test_process
+
+# case 12
+# Valid Src | Writable | Valid Des | Writable | Default | After snap | Rename
+_parse_options 1 2 1 2 1 3 3
+_test_process
+
+# case 13
+# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Delete
+_parse_options 1 2 1 2 3 2 2
+_test_process
+
+# case 14
+# Valid Src | Writable | Valid Des | Writable | no datacow | Before snap | Rename
+_parse_options 1 2 1 2 3 2 3
+_test_process
+
+# case 15
+# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Delete
+_parse_options 1 2 1 2 3 3 2
+_test_process
+
+# case 16
+# Valid Src | Writable | Valid Des | Writable | no datacow | After snap | Rename
+_parse_options 1 2 1 2 3 3 3
+_test_process
+
+exit
-- 
1.6.0.6

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-07-20  1:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-19  9:24 [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254 Liu Bo
2012-07-19 10:32 ` Liu Bo
2012-07-19 10:27 Liu Bo
2012-07-19 10:27 ` Liu Bo
2012-07-20  0:24 ` Dave Chinner
2012-07-20  0:24   ` Dave Chinner
2012-07-20  1:36   ` Liu Bo
2012-07-20  1:36     ` Liu Bo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.