Add a new test case to check if "--rootdir" option of mkfs.btrfs can
handle the file content, perrmission and xattr correctly.

The new test case reuses the convert facility, and looks just like
convert-tests/001-ext2-basic.

Signed-off-by: Qu Wenruo <quwenruo.bt...@gmx.com>
---
changelog:
v3.1:
    Cleanup the temporary rootdir directory.
---
 tests/mkfs-tests/010-basic-rootdir/test.sh | 79 ++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100755 tests/mkfs-tests/010-basic-rootdir/test.sh

diff --git a/tests/mkfs-tests/010-basic-rootdir/test.sh 
b/tests/mkfs-tests/010-basic-rootdir/test.sh
new file mode 100755
index 00000000..49f9b860
--- /dev/null
+++ b/tests/mkfs-tests/010-basic-rootdir/test.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+# Check basic operations for "mkfs.btrfs --rootdir", including:
+# 1)   Checksum, permission and acl
+#      Should be consistent with source directory
+# 2)   Failure condition
+# 2.1)  Non-existent file/block as destination
+# 2.2) Too small destination file
+# 2.3)  No privilege to read source directory
+#      All failure condition should fail, but without segfault/backtrace
+
+source "$TOP/tests/common"
+source "$TOP/tests/common.convert"
+
+setup_root_helper
+prepare_test_dev 512M
+check_prereq mkfs.btrfs
+check_global_prereq dd
+check_global_prereq sed
+
+# Since our test dir will be in /tmp, which is nowadays tmpfs for most
+# distributions, and tmpfs xattr doesn't support user xattr, here we
+# use a special populate_fs() which won't create user xattr.
+#
+# Don't worry, both acl and user xattr is implemented by xattr in btrfs,
+# so "acls" should cover the case.
+populate_tmpfs() {
+       _assert_path "$1"
+
+        for dataset_type in 'small' 'hardlink' 'fast_symlink' 'brokenlink' 
'perm' 'sparse' 'acls' 'fifo' 'slow_symlink'; do
+               generate_dataset "$dataset_type" "$1"
+       done
+}
+
+# Basic content checker for difference nodesize/features
+content_test() {
+       local features
+       local nodesize
+       local src_dir
+       local csum_tmp 
+       local perm_tmp 
+       local acl_tmp
+
+       features="$1"
+       nodesize="$2"
+       src_dir=$(mktemp --tmpdir --directory btrfs-progs-mkfs-rootdir.XXXXXXX)
+
+       echo "    [TEST/mkfs_rootdir]   nodesize=$nodesize" 
"${features:-defaults}"
+       echo "creating test dir at $src_dir" >> "$RESULTS"
+
+       populate_tmpfs "$src_dir"
+       csum_tmp=$(mktemp --tmpdir btrfs-progs-convert.XXXXXXXXXX)
+       perm_tmp=$(mktemp --tmpdir btrfs-progs-convert.permXXXXXX)
+       acl_tmp=$(mktemp --tmpdir btrfs-progs-convert.aclsXXXXXXX)
+       convert_test_gen_checksums "$csum_tmp" "$src_dir"
+       convert_test_perm "$perm_tmp" "$src_dir"
+       convert_test_acl "$acl_tmp" "$src_dir"
+
+       run_check "$TOP/mkfs.btrfs" ${1:+-O "$1"} ${2:+-n "$2"} \
+               "--rootdir" "$src_dir" "$TEST_DEV"
+       run_check "$TOP/btrfs" check "$TEST_DEV"
+       run_check_mount_test_dev
+       convert_test_post_check_checksums "$csum_tmp"
+       convert_test_post_check_permissions "$perm_tmp"
+       convert_test_post_check_acl "$acl_tmp"
+       run_check_umount_test_dev
+
+       rm -- "$csum_tmp"
+       rm -- "$perm_tmp"
+       rm -- "$acl_tmp"
+       run_check $SUDO_HELPER rm -rf -- "$src_dir"
+}
+
+for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do
+       content_test "$feature" 4096
+       content_test "$feature" 8192
+       content_test "$feature" 16384
+       content_test "$feature" 32768
+       content_test "$feature" 65536
+done
-- 
2.14.1

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

Reply via email to