Liu Bo
2012-Jul-19 09:24 UTC
[PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
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
Liu Bo
2012-Jul-19 10:27 UTC
[PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
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
--
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
Liu Bo
2012-Jul-19 10:32 UTC
Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
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-- 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
Dave Chinner
2012-Jul-20 00:24 UTC
Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
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 -- 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
Liu Bo
2012-Jul-20 01:36 UTC
Re: [PATCH] Xfstests/254: add more cases for testing btrfs snapshot in 254
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.-- 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