diff options
author | Dimitri John Ledkov <xnox@ubuntu.com> | 2018-05-08 14:17:29 -0700 |
---|---|---|
committer | Dimitri John Ledkov <xnox@ubuntu.com> | 2018-05-08 14:17:29 -0700 |
commit | d00c9550da1801a0eaff5cedf4312e24691b31ea (patch) | |
tree | 3881ca1764ef792259e1b70f12c884a3ac0c0715 /tests | |
parent | dab6d2181f1f194ec3a76d900cf2c6533379cbea (diff) |
New upstream release.
Diffstat (limited to 'tests')
58 files changed, 638 insertions, 317 deletions
diff --git a/tests/README.md b/tests/README.md index d4b80da1..d14d727c 100644 --- a/tests/README.md +++ b/tests/README.md @@ -189,6 +189,27 @@ $ TEST=012\* ./misc-tests.sh # from tests/ 7. A commit that fixes a bug should be applied before the test that verifies the fix. This is to keep the git history bisectable. + +### Test images + +Most tests should be able to create the test images from scratch, using regular +commands and file operation. The commands also document the testcase and use +the teste code and kernel of the environment. + +In other cases, a pre-created image may be the right way if the above does not +work (eg. comparing output, requesting an exact layout or some intermediate +state that would be hard to achieve otherwise). + +* images that don't need data and valid checksums can be created by + `btrfs-image`, the image can be compressed by the tool itself (file extension + `.img`) or compressed externally (recognized is `.img.xz`) + +* raw images that are binary dump of an existing image, created eg. from a + sparse file (`.raw` or `.raw.xz`) + +Use `xz --best` and try to get the smallest size as the file is stored in git. + + ### Crafted/fuzzed images Images that are created by fuzzing or specially crafted to trigger some error @@ -232,9 +253,10 @@ The tests assume write acesss to their directories. * quote all variables by default, any path, even the TOP could need that, and we use it everywhere + * even if the variable is safe, use quotes for consistency and to ease + reading the code * there are exceptions: * `$SUDO_HELPER` as it might be intentionally unset - * the variable is obviously set to a value that does not require it * use `#!/bin/bash` explicitly * check for all external dependencies (`check_prereq_global`) * check for internal dependencies (`check_prereq`), though the basic set is diff --git a/tests/common b/tests/common index fae30f1d..4b266c5b 100644 --- a/tests/common +++ b/tests/common @@ -54,6 +54,13 @@ _log() echo "$*" | tee -a "$RESULTS" } +# copy stdout to log and pass to stdout, eg. another stdout consumer, commands +# should redirect stderr to stdout if this is consmed by further commands +_log_stdout() +{ + tee -a "$RESULTS" +} + _not_run() { echo " [NOTRUN] $*" diff --git a/tests/convert-tests/014-reiserfs-tail-handling/test.sh b/tests/convert-tests/014-reiserfs-tail-handling/test.sh index 5714dc6c..3be2ed5b 100755 --- a/tests/convert-tests/014-reiserfs-tail-handling/test.sh +++ b/tests/convert-tests/014-reiserfs-tail-handling/test.sh @@ -18,10 +18,9 @@ prepare_test_dev check_prereq btrfs-convert check_global_prereq md5sum check_global_prereq mkreiserfs -check_global_prereq perl -perl -e "print 'a'x8192;" > input -perl -e "print 'b'x8192;" > input2 +printf "%0.sa" {1..8192} > input +printf "%0.sb" {1..8192} > input2 default_mkfs="mkreiserfs -b 4096" convert_test_preamble '' 'tail conversion test' 16k "$default_mkfs" diff --git a/tests/convert-tests/016-invalid-large-inline-extent/test.sh b/tests/convert-tests/016-invalid-large-inline-extent/test.sh new file mode 100755 index 00000000..f37c7c09 --- /dev/null +++ b/tests/convert-tests/016-invalid-large-inline-extent/test.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Check if btrfs-convert refuses to rollback the filesystem, and leave the fs +# and the convert image untouched + +source "$TEST_TOP/common" +source "$TEST_TOP/common.convert" + +setup_root_helper +prepare_test_dev +check_prereq btrfs-convert +check_global_prereq mke2fs + +convert_test_prep_fs ext4 mke2fs -t ext4 -b 4096 + +# Create a 6K file, which should not be inlined +run_check $SUDO_HELPER dd if=/dev/zero bs=2k count=3 of="$TEST_MNT/file1" + +run_check_umount_test_dev + +# convert_test_do_convert() will call btrfs check, which should expose any +# invalid inline extent with too large size +convert_test_do_convert diff --git a/tests/fsck-tests/015-tree-reloc-tree/test.sh b/tests/fsck-tests/015-tree-reloc-tree/test.sh index afad1e8d..5d9d5122 100755 --- a/tests/fsck-tests/015-tree-reloc-tree/test.sh +++ b/tests/fsck-tests/015-tree-reloc-tree/test.sh @@ -5,15 +5,12 @@ # Also due to the short life span of reloc tree, save the as dump example for # later usage. -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq btrfs check_image() { - local image - - image=$1 - run_check "$TOP/btrfs" check "$image" + run_check "$TOP/btrfs" check "$1" } check_all_images diff --git a/tests/fsck-tests/020-extent-ref-cases/extent_data_ref.img b/tests/fsck-tests/020-extent-ref-cases/extent_data_ref.img Binary files differnew file mode 100644 index 00000000..3ab2396b --- /dev/null +++ b/tests/fsck-tests/020-extent-ref-cases/extent_data_ref.img diff --git a/tests/fsck-tests/020-extent-ref-cases/test.sh b/tests/fsck-tests/020-extent-ref-cases/test.sh index 9cf99a51..a1bf75b1 100755 --- a/tests/fsck-tests/020-extent-ref-cases/test.sh +++ b/tests/fsck-tests/020-extent-ref-cases/test.sh @@ -20,10 +20,7 @@ source "$TEST_TOP/common" check_prereq btrfs check_image() { - local image - - image=$1 - run_check "$TOP/btrfs" check "$image" + run_check "$TOP/btrfs" check "$1" } check_all_images diff --git a/tests/fsck-tests/029-valid-orphan-item/orphan_inode.img.xz b/tests/fsck-tests/029-valid-orphan-item/orphan_inode.img.xz Binary files differnew file mode 100644 index 00000000..26e4cf8a --- /dev/null +++ b/tests/fsck-tests/029-valid-orphan-item/orphan_inode.img.xz diff --git a/tests/fsck-tests/029-valid-orphan-item/test.sh b/tests/fsck-tests/029-valid-orphan-item/test.sh new file mode 100755 index 00000000..d8068f63 --- /dev/null +++ b/tests/fsck-tests/029-valid-orphan-item/test.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# To check if btrfs check can handle valid orphan items. +# Orphan item is a marker for deleted inodes that were open at the time of +# deletion. # Orphan inode/root will is not referenced and will have an orphan +# item, which should not be reported as error. + +source "$TEST_TOP/common" + +check_prereq btrfs + +check_image() { + run_check "$TOP/btrfs" check "$1" +} + +check_all_images diff --git a/tests/fsck-tests/030-reflinked-prealloc-extents/reflinked-prealloc-extents.img.xz b/tests/fsck-tests/030-reflinked-prealloc-extents/reflinked-prealloc-extents.img.xz Binary files differnew file mode 100644 index 00000000..8adf0071 --- /dev/null +++ b/tests/fsck-tests/030-reflinked-prealloc-extents/reflinked-prealloc-extents.img.xz diff --git a/tests/fsck-tests/030-reflinked-prealloc-extents/test.sh b/tests/fsck-tests/030-reflinked-prealloc-extents/test.sh new file mode 100755 index 00000000..63f692bc --- /dev/null +++ b/tests/fsck-tests/030-reflinked-prealloc-extents/test.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Verify that a filesystem check operation (fsck) does not report the following +# scenario as an error: +# +# An extent is shared between two inodes, as a result of clone/reflink operation, +# and for one of the inodes, lets call it inode A, the extent is referenced +# through a file extent item as a prealloc extent, while for the other inode, +# call it inode B, the extent is referenced through a regular file extent item, +# that is, it was written to. The goal of this test is to make sure a filesystem +# check operation will not report "odd csum items" errors for the prealloc +# extent at inode A, because this scenario is valid since the extent was written +# through inode B and therefore it is expected to have checksum items in the +# filesystem's checksum btree for that shared extent. +# +# Such scenario can be created with the following steps for example: +# +# mkfs.btrfs -f /dev/sdb +# mount /dev/sdb /mnt +# +# touch /mnt/foo +# xfs_io -c "falloc 0 256K" /mnt/foo +# sync +# +# xfs_io -c "pwrite -S 0xab 0 256K" /mnt/foo +# touch /mnt/bar +# xfs_io -c "reflink /mnt/foo 0 0 256K" /mnt/bar +# xfs_io -c "fsync" /mnt/bar +# +# <power fail> +# mount /dev/sdb /mnt +# umount /mnt + +source "$TEST_TOP/common" + +check_prereq btrfs + +check_image() { + run_check "$TOP/btrfs" check "$1" +} + +check_all_images diff --git a/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh b/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh new file mode 100755 index 00000000..30b0b7a3 --- /dev/null +++ b/tests/fsck-tests/031-metadatadump-check-data-csum/test.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# To check if "btrfs check" can detect metadata dump (restored by btrfs-iamge) +# and ignore --check-data-csum option + +source "$TEST_TOP/common" + +check_prereq btrfs +check_prereq mkfs.btrfs +check_prereq btrfs-image +setup_root_helper +prepare_test_dev + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev + +run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/file" bs=4k count=16 +run_check_umount_test_dev + +run_check $SUDO_HELPER "$TOP/btrfs-image" "$TEST_DEV" "restored_image" + +# use prepare_test_dev() to wipe all existing data on $TEST_DEV +# so there is no way that restored image could have mathcing data csum +prepare_test_dev + +run_check $SUDO_HELPER "$TOP/btrfs-image" -r "restored_image" "$TEST_DEV" + +# Should not report any error +run_check "$TOP/btrfs" check --check-data-csum "$TEST_DEV" + +rm -rf -- "restored_image*" diff --git a/tests/fuzz-tests/001-simple-check-unmounted/test.sh b/tests/fuzz-tests/001-simple-check-unmounted/test.sh index 905d37b7..87a63944 100755 --- a/tests/fuzz-tests/001-simple-check-unmounted/test.sh +++ b/tests/fuzz-tests/001-simple-check-unmounted/test.sh @@ -9,12 +9,9 @@ check_prereq btrfs # redefine the one provided by common check_image() { - local image - - image=$1 - run_mayfail $TOP/btrfs check "$image" + run_mayfail "$TOP/btrfs" check "$1" } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/fuzz-tests/002-simple-image/test.sh b/tests/fuzz-tests/002-simple-image/test.sh index 034fcf46..5dddc9e1 100755 --- a/tests/fuzz-tests/002-simple-image/test.sh +++ b/tests/fuzz-tests/002-simple-image/test.sh @@ -9,15 +9,12 @@ check_prereq btrfs-image # redefine the one provided by common check_image() { - local image - - image=$1 truncate -s0 target - run_mayfail $TOP/btrfs-image "$image" target + run_mayfail "$TOP/btrfs-image" "$1" target truncate -s0 target } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" rm -- target diff --git a/tests/fuzz-tests/003-multi-check-unmounted/test.sh b/tests/fuzz-tests/003-multi-check-unmounted/test.sh index 35dfe4fc..3021c3a8 100755 --- a/tests/fuzz-tests/003-multi-check-unmounted/test.sh +++ b/tests/fuzz-tests/003-multi-check-unmounted/test.sh @@ -21,6 +21,6 @@ check_image() { run_mayfail $TOP/btrfs check --repair "$image" } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/fuzz-tests/004-simple-dump-tree/test.sh b/tests/fuzz-tests/004-simple-dump-tree/test.sh index 6c9e8c45..c09b8478 100755 --- a/tests/fuzz-tests/004-simple-dump-tree/test.sh +++ b/tests/fuzz-tests/004-simple-dump-tree/test.sh @@ -7,12 +7,9 @@ check_prereq btrfs # redefine the one provided by common check_image() { - local image - - image=$1 - run_mayfail $TOP/btrfs inspect-internal dump-tree "$image" + run_mayfail "$TOP/btrfs" inspect-internal dump-tree "$1" } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/fuzz-tests/005-simple-dump-super/test.sh b/tests/fuzz-tests/005-simple-dump-super/test.sh index 01c7b628..18f71a48 100755 --- a/tests/fuzz-tests/005-simple-dump-super/test.sh +++ b/tests/fuzz-tests/005-simple-dump-super/test.sh @@ -10,10 +10,10 @@ check_image() { local image image=$1 - run_mayfail $TOP/btrfs inspect-internal dump-super "$image" - run_mayfail $TOP/btrfs inspect-internal dump-super -Ffa "$image" + run_mayfail "$TOP/btrfs" inspect-internal dump-super "$image" + run_mayfail "$TOP/btrfs" inspect-internal dump-super -Ffa "$image" } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/fuzz-tests/006-simple-tree-stats/test.sh b/tests/fuzz-tests/006-simple-tree-stats/test.sh index dbed471a..146afa93 100755 --- a/tests/fuzz-tests/006-simple-tree-stats/test.sh +++ b/tests/fuzz-tests/006-simple-tree-stats/test.sh @@ -7,12 +7,9 @@ check_prereq btrfs # redefine the one provided by common check_image() { - local image - - image=$1 - run_mayfail $TOP/btrfs inspect-internal tree-stats "$image" + run_mayfail "$TOP/btrfs" inspect-internal tree-stats "$1" } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/fuzz-tests/008-simple-chunk-recover/test.sh b/tests/fuzz-tests/008-simple-chunk-recover/test.sh index 198f88e2..4b27de0c 100755 --- a/tests/fuzz-tests/008-simple-chunk-recover/test.sh +++ b/tests/fuzz-tests/008-simple-chunk-recover/test.sh @@ -11,10 +11,10 @@ check_image() { image=$1 run_check cp "$image" "$image".scratch - run_mayfail $TOP/btrfs rescue chunk-recover -y -v "$image".scratch + run_mayfail "$TOP/btrfs" rescue chunk-recover -y -v "$image".scratch rm -- "$image".scratch } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/fuzz-tests/009-simple-zero-log/test.sh b/tests/fuzz-tests/009-simple-zero-log/test.sh index 928c66b1..f78e5b50 100755 --- a/tests/fuzz-tests/009-simple-zero-log/test.sh +++ b/tests/fuzz-tests/009-simple-zero-log/test.sh @@ -11,10 +11,10 @@ check_image() { image=$1 run_check cp "$image" "$image".scratch - run_mayfail $TOP/btrfs rescue zero-log "$image".scratch + run_mayfail "$TOP/btrfs" rescue zero-log "$image".scratch rm -- "$image".scratch } -check_all_images $TEST_TOP/fuzz-tests/images +check_all_images "$TEST_TOP/fuzz-tests/images" exit 0 diff --git a/tests/misc-tests.sh b/tests/misc-tests.sh index 94703a3e..dad397ec 100755 --- a/tests/misc-tests.sh +++ b/tests/misc-tests.sh @@ -46,7 +46,6 @@ check_prereq btrfs-corrupt-block check_prereq btrfs-image check_prereq btrfstune check_prereq btrfs -check_prereq btrfs-zero-log check_prereq btrfs-find-root check_prereq btrfs-select-super check_kernel_support diff --git a/tests/misc-tests/001-btrfstune-features/test.sh b/tests/misc-tests/001-btrfstune-features/test.sh index 718e4b08..e3da3949 100755 --- a/tests/misc-tests/001-btrfstune-features/test.sh +++ b/tests/misc-tests/001-btrfstune-features/test.sh @@ -21,21 +21,22 @@ test_feature() local tuneopt local sbflag - mkfsfeatures=${1:+-O ^$1} + mkfsfeatures=$1 tuneopt="$2" sbflag="$3" - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $mkfsfeatures $TEST_DEV - if run_check_stdout $TOP/btrfs inspect-internal dump-super $TEST_DEV | \ + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f \ + ${mkfsfeatures:+-O ^"$mkfsfeatures"} "$TEST_DEV" + if run_check_stdout "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" | \ grep -q "$sbflag"; then _fail "FAIL: feature $sbflag must not be set on the base image" fi - run_check $TOP/btrfstune $tuneopt $TEST_DEV - if ! run_check_stdout $TOP/btrfs inspect-internal dump-super $TEST_DEV | \ + run_check "$TOP/btrfstune" "$tuneopt" "$TEST_DEV" + if ! run_check_stdout "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" | \ grep -q "$sbflag"; then _fail "FAIL: feature $sbflag not set" fi - run_check $SUDO_HELPER $TOP/btrfs check $TEST_DEV + run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" } test_feature extref -r EXTENDED_IREF diff --git a/tests/misc-tests/002-uuid-rewrite/test.sh b/tests/misc-tests/002-uuid-rewrite/test.sh index e32aff0c..0191bd5c 100755 --- a/tests/misc-tests/002-uuid-rewrite/test.sh +++ b/tests/misc-tests/002-uuid-rewrite/test.sh @@ -10,10 +10,7 @@ check_prereq btrfs prepare_test_dev get_fs_uuid() { - local image - - image="$1" - run_check_stdout $TOP/btrfs inspect-internal dump-super "$image" | \ + run_check_stdout "$TOP/btrfs" inspect-internal dump-super "$1" | \ grep '^fsid' | awk '{print $2}' } @@ -23,18 +20,18 @@ test_uuid_random() origuuid=11111111-a101-4031-b29a-379d4f8b7a2d - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \ - --uuid $origuuid \ - --rootdir $INTERNAL_BIN/Documentation \ - $TEST_DEV - run_check $TOP/btrfs inspect-internal dump-super "$TEST_DEV" - currentfsid=$(run_check_stdout $TOP/btrfstune -f -u $TEST_DEV | \ + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f \ + --uuid "$origuuid" \ + --rootdir "$INTERNAL_BIN/Documentation" \ + "$TEST_DEV" + run_check "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" + currentfsid=$(run_check_stdout "$TOP/btrfstune" -f -u "$TEST_DEV" | \ grep -i 'current fsid:' | awk '{print $3}') - if ! [ $currentfsid = $origuuid ]; then + if ! [ "$currentfsid" = "$origuuid" ]; then _fail "FAIL: current UUID mismatch" fi - run_check $TOP/btrfs inspect-internal dump-super "$TEST_DEV" - run_check $SUDO_HELPER $TOP/btrfs check $TEST_DEV + run_check "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" + run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" } test_uuid_user() @@ -45,19 +42,19 @@ test_uuid_user() origuuid=22222222-d324-4f92-80e9-7658bf3b845f newuuid=33333333-bfc9-4045-9399-a396dc6893b3 - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \ - --uuid $origuuid \ - --rootdir $INTERNAL_BIN/Documentation \ - $TEST_DEV - run_check $TOP/btrfs inspect-internal dump-super "$TEST_DEV" - run_check $TOP/btrfstune -f -U $newuuid \ - $TEST_DEV + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f \ + --uuid "$origuuid" \ + --rootdir "$INTERNAL_BIN/Documentation" \ + "$TEST_DEV" + run_check "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" + run_check "$TOP/btrfstune" -f -U "$newuuid" \ + "$TEST_DEV" # btrfs inspect-internal dump-super is called within get_fs_uuid - fsid=$(get_fs_uuid $TEST_DEV) - if ! [ $fsid = $newuuid ]; then + fsid=$(get_fs_uuid "$TEST_DEV") + if ! [ "$fsid" = "$newuuid" ]; then _fail "FAIL: UUID not rewritten" fi - run_check $SUDO_HELPER $TOP/btrfs check $TEST_DEV + run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" } test_uuid_random diff --git a/tests/misc-tests/003-zero-log/test.sh b/tests/misc-tests/003-zero-log/test.sh index 9d2940f5..c6742bf3 100755 --- a/tests/misc-tests/003-zero-log/test.sh +++ b/tests/misc-tests/003-zero-log/test.sh @@ -9,42 +9,32 @@ prepare_test_dev get_log_root() { - local image - - image="$1" - $TOP/btrfs inspect-internal dump-super "$image" | \ + "$TOP/btrfs" inspect-internal dump-super "$1" | \ grep '^log_root\>' | awk '{print $2}' } get_log_root_level() { - local image - - image="$1" - $TOP/btrfs inspect-internal dump-super "$image" | \ + "$TOP/btrfs" inspect-internal dump-super "$1" | \ grep '^log_root_level' | awk '{print $2}' } test_zero_log() { # FIXME: we need an image with existing log_root - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \ - --rootdir $INTERNAL_BIN/Documentation \ - $TEST_DEV - run_check $TOP/btrfs inspect-internal dump-super $TEST_DEV - if [ "$1" = 'standalone' ]; then - run_check $TOP/btrfs rescue zero-log $TEST_DEV - else - run_check $TOP/btrfs-zero-log $TEST_DEV - fi - log_root=$(get_log_root $TEST_DEV) - log_root_level=$(get_log_root $TEST_DEV) + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f \ + --rootdir "$INTERNAL_BIN/Documentation" \ + "$TEST_DEV" + run_check "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" + run_check "$TOP/btrfs" rescue zero-log "$TEST_DEV" + log_root=$(get_log_root "$TEST_DEV") + log_root_level=$(get_log_root "$TEST_DEV") if [ "$log_root" != 0 ]; then _fail "FAIL: log_root not reset" fi if [ "$log_root_level" != 0 ]; then _fail "FAIL: log_root_level not reset" fi - run_check $TOP/btrfs inspect-internal dump-super $TEST_DEV - run_check $SUDO_HELPER $TOP/btrfs check $TEST_DEV + run_check "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" + run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" } test_zero_log standalone diff --git a/tests/misc-tests/004-shrink-fs/test.sh b/tests/misc-tests/004-shrink-fs/test.sh index 2f08b0b0..4117f037 100755 --- a/tests/misc-tests/004-shrink-fs/test.sh +++ b/tests/misc-tests/004-shrink-fs/test.sh @@ -14,45 +14,45 @@ setup_root_helper # Optionally take id of the device to shrink shrink_test() { - min_size=$(run_check_stdout $SUDO_HELPER $TOP/btrfs inspect-internal min-dev-size ${1:+--id $1} $TEST_MNT) - min_size=$(echo $min_size | cut -d ' ' -f 1) - echo "min size = ${min_size}" >> $RESULTS + min_size=$(run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal min-dev-size ${1:+--id "$1"} "$TEST_MNT") + min_size=$(echo "$min_size" | cut -d ' ' -f 1) + echo "min size = ${min_size}" >> "$RESULTS" if [ -z "$min_size" ]; then _fail "Failed to parse minimum size" fi - run_check $SUDO_HELPER $TOP/btrfs filesystem resize $min_size $TEST_MNT + run_check $SUDO_HELPER "$TOP/btrfs" filesystem resize "$min_size" "$TEST_MNT" } -run_check truncate -s 20G $IMAGE -run_check $TOP/mkfs.btrfs -f $IMAGE -run_check $SUDO_HELPER mount $IMAGE $TEST_MNT -run_check $SUDO_HELPER chmod a+rw $TEST_MNT +run_check truncate -s 20G "$IMAGE" +run_check "$TOP/mkfs.btrfs" -f "$IMAGE" +run_check $SUDO_HELPER mount "$IMAGE" "$TEST_MNT" +run_check $SUDO_HELPER chmod a+rw "$TEST_MNT" # Create 7 data block groups, each with a size of 1Gb. for ((i = 1; i <= 7; i++)); do - run_check fallocate -l 1G $TEST_MNT/foo$i + run_check fallocate -l 1G "$TEST_MNT/foo$i" done # Make sure they are persisted (all the chunk, device and block group items # added to the chunk/dev/extent trees). -run_check $TOP/btrfs filesystem sync $TEST_MNT +run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" # Now remove 3 of those 1G files. This will result in 3 block groups becoming # unused, which will be automatically deleted by the cleaner kthread, and this # will result in 3 holes (unallocated space) in the device (each with a size # of 1Gb). -run_check rm -f $TEST_MNT/foo2 -run_check rm -f $TEST_MNT/foo4 -run_check rm -f $TEST_MNT/foo6 +run_check rm -f "$TEST_MNT/foo2" +run_check rm -f "$TEST_MNT/foo4" +run_check rm -f "$TEST_MNT/foo6" # Sync once to wake up the cleaner kthread which will delete the unused block # groups - it could have been sleeping when they became unused. Then wait a bit # to allow the cleaner kthread to delete them and then finally ensure the # transaction started by the cleaner kthread is committed. -run_check $TOP/btrfs filesystem sync $TEST_MNT +run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" sleep 3 -run_check $TOP/btrfs filesystem sync $TEST_MNT +run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" # Now attempt to get the minimum size we can resize the filesystem to and verify # the resize operation succeeds. This size closely matches the sum of the size @@ -63,10 +63,10 @@ done # Now convert metadata and system chunks to the single profile and check we are # still able to get a correct minimum size and shrink to that size. -run_check $SUDO_HELPER $TOP/btrfs balance start -mconvert=single \ - -sconvert=single -f $TEST_MNT +run_check $SUDO_HELPER "$TOP/btrfs" balance start -mconvert=single \ + -sconvert=single -f "$TEST_MNT" for ((i = 1; i <= 3; i++)); do shrink_test 1 done -run_check $SUDO_HELPER umount $TEST_MNT +run_check $SUDO_HELPER umount "$TEST_MNT" diff --git a/tests/misc-tests/005-convert-progress-thread-crash/test.sh b/tests/misc-tests/005-convert-progress-thread-crash/test.sh index b8012c9f..dcd6fd26 100755 --- a/tests/misc-tests/005-convert-progress-thread-crash/test.sh +++ b/tests/misc-tests/005-convert-progress-thread-crash/test.sh @@ -9,7 +9,7 @@ mkfs.ext4 -V &>/dev/null || _not_run "mkfs.ext4 not found" prepare_test_dev for ((i = 0; i < 20; i++)); do - echo "loop $i" >>$RESULTS - mkfs.ext4 -F "$TEST_DEV" &>>$RESULTS || _not_run "mkfs.ext4 failed" - run_check $TOP/btrfs-convert "$TEST_DEV" + echo "loop $i" >> "$RESULTS" + mkfs.ext4 -F "$TEST_DEV" &>>"$RESULTS" || _not_run "mkfs.ext4 failed" + run_check "$TOP/btrfs-convert" "$TEST_DEV" done diff --git a/tests/misc-tests/006-image-on-missing-device/test.sh b/tests/misc-tests/006-image-on-missing-device/test.sh index d8b1cef2..2b222340 100755 --- a/tests/misc-tests/006-image-on-missing-device/test.sh +++ b/tests/misc-tests/006-image-on-missing-device/test.sh @@ -14,29 +14,29 @@ setup_root_helper test_image_dump() { - run_check $SUDO_HELPER $TOP/btrfs check $dev1 + run_check $SUDO_HELPER "$TOP/btrfs" check "$dev1" # the output file will be deleted - run_mayfail $SUDO_HELPER $TOP/btrfs-image $dev1 /tmp/test-img.dump + run_mayfail $SUDO_HELPER "$TOP/btrfs-image" "$dev1" /tmp/test-img.dump } test_run() { - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f -d raid1 -m raid1 $dev1 $dev2 + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -d raid1 -m raid1 "$dev1" "$dev2" # we need extents to trigger reading from all devices - run_check $SUDO_HELPER mount $dev1 $TEST_MNT - run_check $SUDO_HELPER dd if=/dev/zero of=$TEST_MNT/a bs=1M count=10 - run_check $SUDO_HELPER dd if=/dev/zero of=$TEST_MNT/b bs=4k count=1000 conv=sync - run_check $SUDO_HELPER umount $TEST_MNT + run_check $SUDO_HELPER mount "$dev1" "$TEST_MNT" + run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/a" bs=1M count=10 + run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/b" bs=4k count=1000 conv=sync + run_check $SUDO_HELPER umount "$TEST_MNT" test_image_dump - run_check $SUDO_HELPER $TOP/btrfs filesystem show $dev1 + run_check $SUDO_HELPER "$TOP/btrfs" filesystem show "$dev1" # create a degraded raid1 filesystem, check must succeed # btrfs-image must not loop - run_mayfail wipefs -a $dev2 - run_check $SUDO_HELPER losetup -d $dev2 + run_mayfail wipefs -a "$dev2" + run_check $SUDO_HELPER losetup -d "$dev2" unset loopdevs[2] - run_check $SUDO_HELPER $TOP/btrfs filesystem show $dev1 + run_check $SUDO_HELPER "$TOP/btrfs" filesystem show "$dev1" test_image_dump } diff --git a/tests/misc-tests/007-subvolume-sync/test.sh b/tests/misc-tests/007-subvolume-sync/test.sh index ef03d16b..104b50ea 100755 --- a/tests/misc-tests/007-subvolume-sync/test.sh +++ b/tests/misc-tests/007-subvolume-sync/test.sh @@ -12,21 +12,21 @@ check_prereq btrfs setup_root_helper prepare_test_dev -run_check $SUDO_HELPER $TOP/mkfs.btrfs -f "$TEST_DEV" +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev # to check following thing in both 1 and multiple subvolume case: # 1: is subvolume sync loop indefinitely # 2: is return value right # -run_check $SUDO_HELPER $TOP/btrfs subvolume create "$TEST_MNT"/mysubvol1 -run_check $SUDO_HELPER $TOP/btrfs subvolume create "$TEST_MNT"/mysubvol2 -run_check $SUDO_HELPER $TOP/btrfs subvolume delete "$TEST_MNT"/mysubvol1 -run_check $SUDO_HELPER $TOP/btrfs subvolume delete "$TEST_MNT"/mysubvol2 -run_check $SUDO_HELPER $TOP/btrfs subvolume sync "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT"/mysubvol1 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT"/mysubvol2 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete "$TEST_MNT"/mysubvol1 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete "$TEST_MNT"/mysubvol2 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume sync "$TEST_MNT" -run_check $SUDO_HELPER $TOP/btrfs subvolume create "$TEST_MNT"/mysubvol -run_check $SUDO_HELPER $TOP/btrfs subvolume delete "$TEST_MNT"/mysubvol -run_check $SUDO_HELPER $TOP/btrfs subvolume sync "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT"/mysubvol +run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete "$TEST_MNT"/mysubvol +run_check $SUDO_HELPER "$TOP/btrfs" subvolume sync "$TEST_MNT" run_check_umount_test_dev diff --git a/tests/misc-tests/008-leaf-crossing-stripes/test.sh b/tests/misc-tests/008-leaf-crossing-stripes/test.sh index 517bd667..41825439 100755 --- a/tests/misc-tests/008-leaf-crossing-stripes/test.sh +++ b/tests/misc-tests/008-leaf-crossing-stripes/test.sh @@ -15,8 +15,8 @@ A_PRIME_NUM=17 for ((size = SIZE_FROM; size <= SIZE_END; size += A_PRIME_NUM)); do run_check truncate -s "$size"M "$IMAGE" run_check mkfs.ext4 -F "$IMAGE" - run_check $TOP/btrfs-convert "$IMAGE" - run_check_stdout $TOP/btrfs check "$IMAGE" 2>&1 | + run_check "$TOP/btrfs-convert" "$IMAGE" + run_check_stdout "$TOP/btrfs" check "$IMAGE" 2>&1 | grep -q "crossing stripe boundary" && _fail "leaf crossing stripes after btrfs-convert" done diff --git a/tests/misc-tests/009-subvolume-sync-must-wait/test.sh b/tests/misc-tests/009-subvolume-sync-must-wait/test.sh index 15de3355..62190e14 100755 --- a/tests/misc-tests/009-subvolume-sync-must-wait/test.sh +++ b/tests/misc-tests/009-subvolume-sync-must-wait/test.sh @@ -10,41 +10,41 @@ check_prereq btrfs setup_root_helper prepare_test_dev -run_check $TOP/mkfs.btrfs -f "$TEST_DEV" +run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev -run_check $SUDO_HELPER chmod a+rw $TEST_MNT +run_check $SUDO_HELPER chmod a+rw "$TEST_MNT" -cd $TEST_MNT +cd "$TEST_MNT" for i in `seq 5`; do run_check dd if=/dev/zero of=file$i bs=1M count=10 done for sn in `seq 4`;do - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot . snap$sn + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot . snap$sn for i in `seq 10`; do - run_check dd if=/dev/zero of=snap$sn/file$i bs=1M count=10 + run_check dd if=/dev/zero of="snap$sn/file$i" bs=1M count=10 done done -run_check $SUDO_HELPER $TOP/btrfs subvolume list . -run_check $SUDO_HELPER $TOP/btrfs subvolume list -d . +run_check $SUDO_HELPER "$TOP/btrfs" subvolume list . +run_check $SUDO_HELPER "$TOP/btrfs" subvolume list -d . -idtodel=`run_check_stdout $SUDO_HELPER $TOP/btrfs inspect-internal rootid snap3` +idtodel=`run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal rootid snap3` # delete, sync after some time -run_check $SUDO_HELPER $TOP/btrfs subvolume delete -c snap3 -{ sleep 5; run_check $TOP/btrfs filesystem sync $TEST_MNT; } & +run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete -c snap3 +{ sleep 5; run_check "$TOP/btrfs" filesystem sync "$TEST_MNT"; } & -run_check $SUDO_HELPER $TOP/btrfs subvolume sync . $idtodel +run_check $SUDO_HELPER "$TOP/btrfs" subvolume sync . "$idtodel" -if run_check_stdout $SUDO_HELPER $TOP/btrfs subvolume list -d . | +if run_check_stdout $SUDO_HELPER "$TOP/btrfs" subvolume list -d . | grep -q "ID $idtodel.*DELETED"; then _fail "sync did not wait for the subvolume cleanup" fi -run_check $TOP/btrfs filesystem sync $TEST_MNT -run_check $SUDO_HELPER $TOP/btrfs subvolume list -d . +run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume list -d . wait cd .. diff --git a/tests/misc-tests/010-convert-delete-ext2-subvol/test.sh b/tests/misc-tests/010-convert-delete-ext2-subvol/test.sh index 6d510fea..5f441a7f 100755 --- a/tests/misc-tests/010-convert-delete-ext2-subvol/test.sh +++ b/tests/misc-tests/010-convert-delete-ext2-subvol/test.sh @@ -13,13 +13,13 @@ prepare_test_dev run_check truncate -s 2G "$TEST_DEV" run_check mkfs.ext4 -F "$TEST_DEV" -run_check $TOP/btrfs-convert "$TEST_DEV" -run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-tree "$TEST_DEV" +run_check "$TOP/btrfs-convert" "$TEST_DEV" +run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree "$TEST_DEV" run_check_mount_test_dev -run_check $SUDO_HELPER $TOP/btrfs subvolume delete -c "$TEST_MNT/ext2_saved" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete -c "$TEST_MNT/ext2_saved" run_check_umount_test_dev -run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-tree "$TEST_DEV" -run_check_stdout $TOP/btrfs-convert --rollback "$TEST_DEV" | +run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree "$TEST_DEV" +run_check_stdout "$TOP/btrfs-convert" --rollback "$TEST_DEV" | grep -q 'is it deleted' || _fail "unexpected rollback" exit 0 diff --git a/tests/misc-tests/011-delete-missing-device/test.sh b/tests/misc-tests/011-delete-missing-device/test.sh index 469c3be9..4c976421 100755 --- a/tests/misc-tests/011-delete-missing-device/test.sh +++ b/tests/misc-tests/011-delete-missing-device/test.sh @@ -10,31 +10,31 @@ setup_root_helper test_do_mkfs() { - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $@ ${loopdevs[@]} - run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $dev1 - run_check $SUDO_HELPER $TOP/btrfs check $dev1 - run_check $SUDO_HELPER $TOP/btrfs filesystem show + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@" ${loopdevs[@]} + run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$dev1" + run_check $SUDO_HELPER "$TOP/btrfs" check "$dev1" + run_check $SUDO_HELPER "$TOP/btrfs" filesystem show } test_wipefs() { - run_check $SUDO_HELPER wipefs -a $devtodel - run_check $SUDO_HELPER losetup -d $devtodel + run_check $SUDO_HELPER wipefs -a "$devtodel" + run_check $SUDO_HELPER losetup -d "$devtodel" unset loopdevs[3] run_check $SUDO_HELPER losetup --all - run_check $TOP/btrfs filesystem show + run_check "$TOP/btrfs" filesystem show } test_delete_missing() { run_check_mount_test_dev -o degraded - run_check $SUDO_HELPER $TOP/btrfs filesystem show $TEST_MNT - run_check $SUDO_HELPER $TOP/btrfs device delete missing $TEST_MNT - run_check $SUDO_HELPER $TOP/btrfs filesystem show $TEST_MNT + run_check $SUDO_HELPER "$TOP/btrfs" filesystem show "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" device delete missing "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" filesystem show "$TEST_MNT" run_check_umount_test_dev run_check_mount_test_dev local out - out="$(run_check_stdout $SUDO_HELPER $TOP/btrfs filesystem show $TEST_MNT)" + out=$(run_check_stdout $SUDO_HELPER "$TOP/btrfs" filesystem show "$TEST_MNT") if echo "$out" | grep -q -- "$devtodel"; then _fail "device $devtodel not deleted" fi diff --git a/tests/misc-tests/012-find-root-no-result/test.sh b/tests/misc-tests/012-find-root-no-result/test.sh index f4a57e76..6dd447f3 100755 --- a/tests/misc-tests/012-find-root-no-result/test.sh +++ b/tests/misc-tests/012-find-root-no-result/test.sh @@ -8,10 +8,10 @@ source "$TEST_TOP/common" check_prereq btrfs-find-root check_prereq btrfs-image -run_check $TOP/btrfs-image -r first_meta_chunk.btrfs-image test.img || \ +run_check "$TOP/btrfs-image" -r first_meta_chunk.btrfs-image test.img || \ _fail "failed to extract first_meta_chunk.btrfs-image" -result=$(run_check_stdout $TOP/btrfs-find-root test.img | sed '/^Superblock/d') +result=$(run_check_stdout "$TOP/btrfs-find-root" test.img | sed '/^Superblock/d') if [ -z "$result" ]; then _fail "btrfs-find-root failed to find tree root" diff --git a/tests/misc-tests/013-subvolume-sync-crash/test.sh b/tests/misc-tests/013-subvolume-sync-crash/test.sh index 051b457a..c348ba5d 100755 --- a/tests/misc-tests/013-subvolume-sync-crash/test.sh +++ b/tests/misc-tests/013-subvolume-sync-crash/test.sh @@ -13,9 +13,9 @@ setup_root_helper prepare_test_dev run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev -run_check $SUDO_HELPER chmod a+rw $TEST_MNT +run_check $SUDO_HELPER chmod a+rw "$TEST_MNT" -cd $TEST_MNT +cd "$TEST_MNT" for i in `seq 5`; do run_check dd if=/dev/zero of=file$i bs=1M count=10 @@ -23,25 +23,25 @@ done # 128 is minimum for sn in `seq 130`;do - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot . snap$sn + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot . snap$sn for i in `seq 10`; do - run_check dd if=/dev/zero of=snap$sn/file$i bs=1M count=1 + run_check dd if=/dev/zero of="snap$sn/file$i" bs=1M count=1 done done -run_check $SUDO_HELPER $TOP/btrfs subvolume list . -run_check $SUDO_HELPER $TOP/btrfs subvolume list -d . +run_check $SUDO_HELPER "$TOP/btrfs" subvolume list . +run_check $SUDO_HELPER "$TOP/btrfs" subvolume list -d . -idtodel=`run_check_stdout $SUDO_HELPER $TOP/btrfs inspect-internal rootid snap3` +idtodel=`run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal rootid snap3` # delete, sync after some time -run_check $SUDO_HELPER $TOP/btrfs subvolume delete -c snap* -{ sleep 5; run_check $TOP/btrfs filesystem sync $TEST_MNT; } & +run_check $SUDO_HELPER "$TOP/btrfs" subvolume delete -c snap* +{ sleep 5; run_check "$TOP/btrfs" filesystem sync "$TEST_MNT"; } & -run_check $SUDO_HELPER $TOP/btrfs subvolume sync . +run_check $SUDO_HELPER "$TOP/btrfs" subvolume sync . -run_check $TOP/btrfs filesystem sync $TEST_MNT -run_check $SUDO_HELPER $TOP/btrfs subvolume list -d . +run_check "$TOP/btrfs" filesystem sync "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume list -d . wait cd .. diff --git a/tests/misc-tests/014-filesystem-label/test.sh b/tests/misc-tests/014-filesystem-label/test.sh index bd6773cb..4756e764 100755 --- a/tests/misc-tests/014-filesystem-label/test.sh +++ b/tests/misc-tests/014-filesystem-label/test.sh @@ -12,14 +12,14 @@ setup_root_helper prepare_test_dev run_check "$TOP/mkfs.btrfs" -L BTRFS-TEST-LABEL -f "$TEST_DEV" run_check_mount_test_dev -run_check $SUDO_HELPER chmod a+rw $TEST_MNT +run_check $SUDO_HELPER chmod a+rw "$TEST_MNT" -cd $TEST_MNT -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT +cd "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" # shortest label -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT a -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT '' +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" a +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" '' longlabel=\ 0123456789\ @@ -54,15 +54,15 @@ longlabel=\ \ 01234 -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT "$longlabel" -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" "$longlabel" +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" # 256, must fail run_mustfail "label 256 bytes long succeeded" \ - $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT "$longlabel"5 -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT + $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" "$longlabel"5 +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" run_mustfail "label 2 * 255 bytes long succeeded" \ - $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT "$longlabel$longlabel" -run_check $SUDO_HELPER $TOP/btrfs filesystem label $TEST_MNT + $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" "$longlabel$longlabel" +run_check $SUDO_HELPER "$TOP/btrfs" filesystem label "$TEST_MNT" cd .. diff --git a/tests/misc-tests/015-dump-super-garbage/test.sh b/tests/misc-tests/015-dump-super-garbage/test.sh index 10d8d5b6..b3469459 100755 --- a/tests/misc-tests/015-dump-super-garbage/test.sh +++ b/tests/misc-tests/015-dump-super-garbage/test.sh @@ -6,12 +6,12 @@ source "$TEST_TOP/common" check_prereq btrfs -run_check $TOP/btrfs inspect-internal dump-super /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -a /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -fa /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -Ffa /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -Ffa /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -Ffa /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -Ffa /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -Ffa /dev/urandom -run_check $TOP/btrfs inspect-internal dump-super -Ffa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -a /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -fa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -Ffa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -Ffa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -Ffa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -Ffa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -Ffa /dev/urandom +run_check "$TOP/btrfs" inspect-internal dump-super -Ffa /dev/urandom diff --git a/tests/misc-tests/016-send-clone-src/test.sh b/tests/misc-tests/016-send-clone-src/test.sh index e4fa16a7..c993095e 100755 --- a/tests/misc-tests/016-send-clone-src/test.sh +++ b/tests/misc-tests/016-send-clone-src/test.sh @@ -17,28 +17,28 @@ run_check_mount_test_dev here=`pwd` cd "$TEST_MNT" || _fail "cannot chdir to TEST_MNT" -run_check $SUDO_HELPER $TOP/btrfs subvolume create subv-parent1 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create subv-parent1 for i in 1 2 3; do run_check $SUDO_HELPER dd if=/dev/zero of=subv-parent1/file1_$i bs=1M count=1 - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv-parent1 subv-snap1_$i + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv-parent1 subv-snap1_$i done -run_check $SUDO_HELPER $TOP/btrfs subvolume create subv-parent2 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create subv-parent2 for i in 1 2 3; do run_check $SUDO_HELPER dd if=/dev/zero of=subv-parent2/file2_$i bs=1M count=1 - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv-parent2 subv-snap2_$i + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv-parent2 subv-snap2_$i done truncate -s0 "$here"/send-stream.img chmod a+w "$here"/send-stream.img -run_check $SUDO_HELPER $TOP/btrfs send -f "$here"/send-stream.img \ +run_check $SUDO_HELPER "$TOP/btrfs" send -f "$here"/send-stream.img \ -c subv-snap1_1 -c subv-snap2_1 subv-snap1_[23] subv-snap2_[23] image=$(extract_image "$here"/multi-clone-src-v4.8.2.stream.xz) old_stream_size=`stat --format=%s "$image"` stream_size=`stat --format=%s "$here"/send-stream.img` -if [ $old_stream_size -lt $stream_size ]; then +if [ "$old_stream_size" -lt "$stream_size" ]; then run_check ls -l "$image" "$here"/send-stream.img _fail "sending stream size is bigger than old stream" fi diff --git a/tests/misc-tests/018-recv-end-of-stream/test.sh b/tests/misc-tests/018-recv-end-of-stream/test.sh index 79e735ea..0de7d3b6 100755 --- a/tests/misc-tests/018-recv-end-of-stream/test.sh +++ b/tests/misc-tests/018-recv-end-of-stream/test.sh @@ -19,24 +19,24 @@ test_full_empty_stream() { local str str="$here/stream-full-empty.stream" - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev cd "$TEST_MNT" || _fail "cannot chdir to TEST_MNT" - run_check $SUDO_HELPER $TOP/btrfs subvolume create subv1 - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv1 subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" subvolume create subv1 + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv1 subv1-snap truncate -s0 "$str" chmod a+w "$str" - run_check $SUDO_HELPER $TOP/btrfs send -f "$str" subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" send -f "$str" subv1-snap cd "$here" || _fail "cannot chdir back to test directory" run_check_umount_test_dev - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev - run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$str" "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" receive "$@" -v -f "$str" "$TEST_MNT" run_check_umount_test_dev run_check rm -f -- "$str" @@ -46,28 +46,28 @@ test_full_simple_stream() { local str str="$here/stream-full-simple.stream" - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f $TEST_DEV run_check_mount_test_dev cd "$TEST_MNT" || _fail "cannot chdir to TEST_MNT" - run_check $SUDO_HELPER $TOP/btrfs subvolume create subv1 + run_check $SUDO_HELPER "$TOP/btrfs" subvolume create subv1 for i in 1 2 3; do run_check $SUDO_HELPER dd if=/dev/zero of=subv1/file1_$i bs=1M count=1 done - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv1 subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv1 subv1-snap truncate -s0 "$str" chmod a+w "$str" - run_check $SUDO_HELPER $TOP/btrfs send -f "$str" subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" send -f "$str" subv1-snap cd "$here" || _fail "cannot chdir back to test directory" run_check_umount_test_dev - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev - run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$str" "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" receive "$@" -v -f "$str" "$TEST_MNT" run_check_umount_test_dev run_check rm -f -- "$str" @@ -79,27 +79,27 @@ test_incr_empty_stream() { fstr="$here/stream-full-empty.stream" istr="$here/stream-incr-empty.stream" - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev cd "$TEST_MNT" || _fail "cannot chdir to TEST_MNT" - run_check $SUDO_HELPER $TOP/btrfs subvolume create subv1 - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv1 subv1-snap - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv1 subv2-snap + run_check $SUDO_HELPER "$TOP/btrfs" subvolume create subv1 + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv1 subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv1 subv2-snap truncate -s0 "$fstr" "$istr" chmod a+w "$fstr" "$istr" - run_check $SUDO_HELPER $TOP/btrfs send -f "$fstr" subv1-snap - run_check $SUDO_HELPER $TOP/btrfs send -p subv1-snap -f "$istr" subv2-snap + run_check $SUDO_HELPER "$TOP/btrfs" send -f "$fstr" subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" send -p subv1-snap -f "$istr" subv2-snap cd "$here" || _fail "cannot chdir back to test directory" run_check_umount_test_dev - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev - run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$fstr" "$TEST_MNT" - run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$istr" "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" receive "$@" -v -f "$fstr" "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" receive "$@" -v -f "$istr" "$TEST_MNT" run_check_umount_test_dev run_check rm -f -- "$fstr" "$istr" @@ -110,36 +110,36 @@ test_incr_simple_stream() { fstr="$here/stream-full-simple.stream" istr="$here/stream-incr-simple.stream" - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev cd "$TEST_MNT" || _fail "cannot chdir to TEST_MNT" - run_check $SUDO_HELPER $TOP/btrfs subvolume create subv1 + run_check $SUDO_HELPER "$TOP/btrfs" subvolume create subv1 for i in 1 2 3; do run_check $SUDO_HELPER dd if=/dev/zero of=subv1/file1_$i bs=1M count=1 done - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv1 subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv1 subv1-snap for i in 1 2 3; do run_check $SUDO_HELPER dd if=/dev/urandom of=subv1/file1_$i bs=1M count=1 done - run_check $SUDO_HELPER $TOP/btrfs subvolume snapshot -r subv1 subv2-snap + run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r subv1 subv2-snap truncate -s0 "$fstr" "$istr" chmod a+w "$fstr" "$istr" - run_check $SUDO_HELPER $TOP/btrfs send -f "$fstr" subv1-snap - run_check $SUDO_HELPER $TOP/btrfs send -p subv1-snap -f "$istr" subv2-snap + run_check $SUDO_HELPER "$TOP/btrfs" send -f "$fstr" subv1-snap + run_check $SUDO_HELPER "$TOP/btrfs" send -p subv1-snap -f "$istr" subv2-snap cd "$here" || _fail "cannot chdir back to test directory" run_check_umount_test_dev - run_check $TOP/mkfs.btrfs -f $TEST_DEV + run_check "$TOP/mkfs.btrfs" -f "$TEST_DEV" run_check_mount_test_dev - run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$fstr" "$TEST_MNT" - run_check $SUDO_HELPER $TOP/btrfs receive "$@" -v -f "$istr" "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" receive "$@" -v -f "$fstr" "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" receive "$@" -v -f "$istr" "$TEST_MNT" run_check_umount_test_dev run_check rm -f -- "$fstr" "$istr" @@ -151,7 +151,7 @@ test_incr_empty_stream test_incr_simple_stream extra_opt=-e -test_full_empty_stream $extra_opt -test_full_simple_stream $extra_opt -test_incr_empty_stream $extra_opt -test_incr_simple_stream $extra_opt +test_full_empty_stream "$extra_opt" +test_full_simple_stream "$extra_opt" +test_incr_empty_stream "$extra_opt" +test_incr_simple_stream "$extra_opt" diff --git a/tests/misc-tests/019-receive-clones-on-mounted-subvol/test.sh b/tests/misc-tests/019-receive-clones-on-mounted-subvol/test.sh index 60ec5cf9..6937163a 100755 --- a/tests/misc-tests/019-receive-clones-on-mounted-subvol/test.sh +++ b/tests/misc-tests/019-receive-clones-on-mounted-subvol/test.sh @@ -31,9 +31,9 @@ run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/baz" run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT/snap" tr '\000' 'A' < /dev/null | - run_check $SUDO_HELPER dd of=$TEST_MNT/foo/file_a bs=$BLOCK_SIZE count=32 + run_check $SUDO_HELPER dd of="$TEST_MNT/foo/file_a" bs="$BLOCK_SIZE" count=32 tr '\000' 'B' < /dev/null | - run_check $SUDO_HELPER dd of=$TEST_MNT/bar/file_b bs=$BLOCK_SIZE count=32 + run_check $SUDO_HELPER dd of="$TEST_MNT/bar/file_b" bs="$BLOCK_SIZE" count=32 run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/foo/file_a" "$TEST_MNT/baz/file_a" run_check $SUDO_HELPER cp --reflink=always "$TEST_MNT/bar/file_b" "$TEST_MNT/baz/file_b" diff --git a/tests/misc-tests/021-image-multi-devices/test.sh b/tests/misc-tests/021-image-multi-devices/test.sh index d78c44fb..5430847f 100755 --- a/tests/misc-tests/021-image-multi-devices/test.sh +++ b/tests/misc-tests/021-image-multi-devices/test.sh @@ -20,31 +20,31 @@ loop2=$(run_check_stdout $SUDO_HELPER losetup --find --show dev2) # Create the test file system. -run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f $loop1 $loop2 -run_check $SUDO_HELPER mount $loop1 "$TEST_MNT" -run_check $SUDO_HELPER dd bs=1M count=1 if=/dev/zero "of=$TEST_MNT/foobar" +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$loop1" "$loop2" +run_check $SUDO_HELPER mount "$loop1" "$TEST_MNT" +run_check $SUDO_HELPER dd bs=1M count=1 if=/dev/zero of="$TEST_MNT/foobar" orig_md5=$(run_check_stdout md5sum "$TEST_MNT/foobar" | cut -d ' ' -f 1) run_check $SUDO_HELPER umount "$TEST_MNT" # Create the image to restore later. -run_check $SUDO_HELPER "$TOP/btrfs-image" $loop1 "$IMAGE" +run_check $SUDO_HELPER "$TOP/btrfs-image" "$loop1" "$IMAGE" # Wipe out the filesystem from the devices, restore the image on a single # device, check everything works and file foobar is there and with 1Mb of # zeroes. -run_check $SUDO_HELPER wipefs -a $loop1 -run_check $SUDO_HELPER wipefs -a $loop2 +run_check $SUDO_HELPER wipefs -a "$loop1" +run_check $SUDO_HELPER wipefs -a "$loop2" -run_check $SUDO_HELPER $TOP/btrfs-image -r "$IMAGE" $loop1 +run_check $SUDO_HELPER "$TOP/btrfs-image" -r "$IMAGE" "$loop1" -run_check $SUDO_HELPER mount $loop1 "$TEST_MNT" +run_check $SUDO_HELPER mount "$loop1" "$TEST_MNT" new_md5=$(run_check_stdout md5sum "$TEST_MNT/foobar" | cut -d ' ' -f 1) run_check $SUDO_HELPER umount "$TEST_MNT" # Cleanup loop devices. -run_check $SUDO_HELPER losetup -d $loop1 -run_check $SUDO_HELPER losetup -d $loop2 +run_check $SUDO_HELPER losetup -d "$loop1" +run_check $SUDO_HELPER losetup -d "$loop2" rm -f dev1 dev2 # Compare the file digests. -[ $orig_md5 == $new_md5 ] || _fail "File digests do not match" +[ "$orig_md5" == "$new_md5" ] || _fail "File digests do not match" diff --git a/tests/misc-tests/023-device-usage-with-missing-device/test.sh b/tests/misc-tests/023-device-usage-with-missing-device/test.sh index 05894cfe..57b500c9 100755 --- a/tests/misc-tests/023-device-usage-with-missing-device/test.sh +++ b/tests/misc-tests/023-device-usage-with-missing-device/test.sh @@ -12,7 +12,7 @@ setup_root_helper test_run() { # empty filesystem, with enough redundancy so degraded mount works - run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -d raid1 -m raid1 $dev1 $dev2 + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -d raid1 -m raid1 "$dev1" "$dev2" TEST_DEV="$dev1" run_check_mount_test_dev @@ -21,8 +21,8 @@ test_run() grep -q "slack.*16\\.00EiB" && _fail run_check_umount_test_dev - run_mayfail wipefs -a $dev2 - run_check $SUDO_HELPER losetup -d $dev2 + run_mayfail wipefs -a "$dev2" + run_check $SUDO_HELPER losetup -d "$dev2" unset loopdevs[2] run_check_mount_test_dev -o degraded,ro diff --git a/tests/misc-tests/024-inspect-internal-rootid/test.sh b/tests/misc-tests/024-inspect-internal-rootid/test.sh index 71e19044..ea0c6298 100755 --- a/tests/misc-tests/024-inspect-internal-rootid/test.sh +++ b/tests/misc-tests/024-inspect-internal-rootid/test.sh @@ -36,15 +36,15 @@ id6=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid dir/file2) \ id7=$(run_check_stdout "$TOP/btrfs" inspect-internal rootid sub/file3) \ || { echo $id7; exit 1; } -if ! ([ $id1 -ne $id2 ] && [ $id1 -ne $id3 ] && [ $id2 -ne $id3 ]); then +if ! ([ "$id1" -ne "$id2" ] && [ "$id1" -ne "$id3" ] && [ "$id2" -ne "$id3" ]); then _fail "inspect-internal rootid: each subvolume must have different id" fi -if ! ([ $id1 -eq $id4 ] && [ $id1 -eq $id5 ] && [ $id1 -eq $id6 ]); then +if ! ([ "$id1" -eq "$id4" ] && [ "$id1" -eq "$id5" ] && [ "$id1" -eq "$id6" ]); then _fail "inspect-internal rootid: rootid mismatch found" fi -if ! ([ $id2 -eq $id7 ]); then +if ! ([ "$id2" -eq "$id7" ]); then _fail "inspect-internal rootid: rootid mismatch found" fi diff --git a/tests/misc-tests/028-superblock-recover/test.sh b/tests/misc-tests/028-superblock-recover/test.sh index 1175e480..ee117d0f 100755 --- a/tests/misc-tests/028-superblock-recover/test.sh +++ b/tests/misc-tests/028-superblock-recover/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # Test that any superblock is correctly detected and fixed by btrfs rescue -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq btrfs check_prereq mkfs.btrfs @@ -25,9 +25,9 @@ function check_corruption { run_check $SUDO_HELPER dd bs=1K count=1 seek=$(($sb_offset + 1)) if=/dev/zero of="$TEST_DEV" conv=notrunc # if corrupting one of the sb copies, copy it over the initial superblock - if [ ! -z $source_sb ]; then + if [ ! -z "$source_sb" ]; then local shift_val=$((16 << $source_sb * 12 )) - run_check $SUDO_HELPER dd bs=1K count=4 seek=64 skip=$shift_val if="$TEST_DEV" of="$TEST_DEV" conv=notrunc + run_check $SUDO_HELPER dd bs=1K count=4 seek=64 skip="$shift_val" if="$TEST_DEV" of="$TEST_DEV" conv=notrunc fi # we can't use our mount helper, the following works for file image and diff --git a/tests/misc-tests/029-send-p-different-mountpoints/test.sh b/tests/misc-tests/029-send-p-different-mountpoints/test.sh new file mode 100755 index 00000000..0b42b772 --- /dev/null +++ b/tests/misc-tests/029-send-p-different-mountpoints/test.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# test that send -p does not corrupt paths when send is using 2 different mount +# points + +source "$TEST_TOP/common" + +check_prereq btrfs +check_prereq mkfs.btrfs + +setup_root_helper +prepare_test_dev + +# we need two mount points, cannot nest the subvoolume under TEST_MNT +SUBVOL_MNT="$TEST_MNT/subvol" +TOPLEVEL_MNT="$TEST_MNT/toplevel" +TEST_MNT="$TOPLEVEL_MNT" +mkdir -p "$TOPLEVEL_MNT" "$SUBVOL_MNT" + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV" +run_check_mount_test_dev + +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TOPLEVEL_MNT/subv1" +run_check $SUDO_HELPER mount -t btrfs -o subvol=subv1 "$TEST_DEV" "$SUBVOL_MNT" + +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TOPLEVEL_MNT/test-subvol" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r \ + "$TOPLEVEL_MNT/test-subvol" "$SUBVOL_MNT/test-subvol-mnt-subvol" +run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot -r \ + "$TOPLEVEL_MNT/test-subvol" "$TOPLEVEL_MNT/test-subvol-mnt-root" + +run_mustfail_stdout "send -p on 2 mount points" \ + $SUDO_HELPER "$TOP/btrfs" send -f /dev/null -p \ + "$SUBVOL_MNT/test-subvol-mnt-subvol" "$TOPLEVEL_MNT/test-subvol-mnt-root" \ + | _log_stdout \ + | grep -q "not on mount point.*/toplevel" \ + || _fail "expected output not found, please check the logs" + +# without a fix, this leads to a corrupted path, with something like: +# +# ERROR: open st-subvol-mnt-subvol failed. No such file or directory +# ^^^^^^^^^^^^^^^^^^^^ +# ERROR: could not resolve rootid for .../tests/mnt/subvol/test-subvol-mnt-subvol + +# expected output: +# ERROR: not on mount point: .../tests/mnt/toplevel + +run_check_umount_test_dev "$SUBVOL_MNT" +run_check_umount_test_dev "$TOPLEVEL_MNT" + +rmdir "$SUBVOL_MNT" +rmdir "$TOPLEVEL_MNT" diff --git a/tests/misc-tests/030-missing-device-image/test.sh b/tests/misc-tests/030-missing-device-image/test.sh new file mode 100755 index 00000000..a04efe8f --- /dev/null +++ b/tests/misc-tests/030-missing-device-image/test.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Test that btrfs-image can dump image correctly for a missing device (RAID1) +# +# At least for RAID1, btrfs-image should be able to handle one missing device +# without any problem + +source "$TEST_TOP/common" + +check_prereq btrfs-image +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper +setup_loopdevs 2 +prepare_loopdevs +dev1=${loopdevs[1]} +dev2=${loopdevs[2]} + +# $1: device number to remove (either 1 or 2) +test_missing() +{ + local bad_num + local bad_dev + local good_num + local good_dev + + bad_num=$1 + bad_dev=${loopdevs[$bad_num]} + good_num=$((3 - $bad_num)) + good_dev=${loopdevs[$good_num]} + + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f -d raid1 -m raid1 "$dev1" "$dev2" + + # fill the fs with some data, we could create space cache + run_check $SUDO_HELPER mount "$dev1" "$TEST_MNT" + run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/a" bs=1M count=10 + run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/b" bs=4k count=1000 conv=sync + run_check $SUDO_HELPER umount "$TEST_MNT" + + # make sure we have space cache + if ! run_check_stdout "$TOP/btrfs" inspect dump-tree -t root "$dev1" | + grep -q "EXTENT_DATA"; then + # Normally the above operation should create the space cache. + # If not, it may mean we have migrated to v2 cache by default + _not_run "unable to create v1 space cache" + fi + + # now wipe the device + run_check wipefs -fa "$bad_dev" + + # we don't care about the image but btrfs-image must not fail + run_check "$TOP/btrfs-image" "$good_dev" /dev/null +} + +# Test with either device missing, so we're ensured to hit missing device +test_missing 1 +test_missing 2 +cleanup_loopdevs diff --git a/tests/mkfs-tests/001-basic-profiles/test.sh b/tests/mkfs-tests/001-basic-profiles/test.sh index b84016f7..6e295274 100755 --- a/tests/mkfs-tests/001-basic-profiles/test.sh +++ b/tests/mkfs-tests/001-basic-profiles/test.sh @@ -11,28 +11,27 @@ setup_root_helper test_get_info() { - run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $dev1 - run_check $SUDO_HELPER $TOP/btrfs check $dev1 - run_check $SUDO_HELPER mount $dev1 $TEST_MNT - run_check $TOP/btrfs filesystem df $TEST_MNT - run_check $SUDO_HELPER $TOP/btrfs filesystem usage $TEST_MNT - run_check $SUDO_HELPER $TOP/btrfs device usage $TEST_MNT + run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$dev1" + run_check $SUDO_HELPER "$TOP/btrfs" check "$dev1" + run_check $SUDO_HELPER mount "$dev1" "$TEST_MNT" + run_check "$TOP/btrfs" filesystem df "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" filesystem usage "$TEST_MNT" + run_check $SUDO_HELPER "$TOP/btrfs" device usage "$TEST_MNT" run_check $SUDO_HELPER umount "$TEST_MNT" } test_do_mkfs() { - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \ - $@ + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@" } test_mkfs_single() { - test_do_mkfs $@ $dev1 + test_do_mkfs "$@" "$dev1" test_get_info } test_mkfs_multi() { - test_do_mkfs $@ ${loopdevs[@]} + test_do_mkfs "$@" ${loopdevs[@]} test_get_info } diff --git a/tests/mkfs-tests/004-rootdir-keeps-size/test.sh b/tests/mkfs-tests/004-rootdir-keeps-size/test.sh index 4a84e6db..635a5137 100755 --- a/tests/mkfs-tests/004-rootdir-keeps-size/test.sh +++ b/tests/mkfs-tests/004-rootdir-keeps-size/test.sh @@ -13,12 +13,12 @@ test_mkfs_with_size() { local tmp size="$1" - run_check truncate -s$size $TEST_DEV - imgsize=$(run_check_stdout stat --format=%s $TEST_DEV) - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \ - --rootdir $INTERNAL_BIN/Documentation \ - $TEST_DEV - tmp=$(run_check_stdout stat --format=%s $TEST_DEV) + run_check truncate -s"$size" "$TEST_DEV" + imgsize=$(run_check_stdout stat --format=%s "$TEST_DEV") + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f \ + --rootdir "$INTERNAL_BIN/Documentation" \ + "$TEST_DEV" + tmp=$(run_check_stdout stat --format=%s "$TEST_DEV") if ! [ "$imgsize" = "$tmp" ]; then _fail "image size changed from $imgsize to $tmp" fi diff --git a/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh b/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh index 55ce676e..b7c76b18 100755 --- a/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh +++ b/tests/mkfs-tests/005-long-device-name-for-ssd/test.sh @@ -11,31 +11,31 @@ prepare_test_dev # prep device dmname=\ btrfs-test-with-very-long-name-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -dmdev=/dev/mapper/$dmname +dmdev="/dev/mapper/$dmname" run_check truncate -s0 img chmod a+w img run_check truncate -s2g img loopdev=`run_check_stdout $SUDO_HELPER losetup --find --show img` -run_check $SUDO_HELPER dmsetup create $dmname --table "0 1048576 linear $loopdev 0" +run_check $SUDO_HELPER dmsetup create "$dmname" --table "0 1048576 linear $loopdev 0" -dmbase=`readlink -f $dmdev` +dmbase=`readlink -f "$dmdev"` base=`basename "$dmbase"` -rot=/sys/class/block/$base/queue/rotational +rot="/sys/class/block/$base/queue/rotational" # switch rotational run_check cat $rot -echo 0 | run_check $SUDO_HELPER tee $rot -run_check cat $rot +echo 0 | run_check $SUDO_HELPER tee "$rot" +run_check cat "$rot" # test -run_check_stdout $SUDO_HELPER $TOP/mkfs.btrfs -f $@ $dmdev | +run_check_stdout $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@" "$dmdev" | grep -q 'SSD detected:.*yes' || _fail 'SSD not detected' -run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $dmdev +run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$dmdev" # cleanup -run_check $SUDO_HELPER dmsetup remove $dmname -run_mayfail $SUDO_HELPER losetup -d $loopdev +run_check $SUDO_HELPER dmsetup remove "$dmname" +run_mayfail $SUDO_HELPER losetup -d "$loopdev" run_check truncate -s0 img rm img diff --git a/tests/mkfs-tests/006-partitioned-loopdev/test.sh b/tests/mkfs-tests/006-partitioned-loopdev/test.sh index 06c254fd..5d972a78 100755 --- a/tests/mkfs-tests/006-partitioned-loopdev/test.sh +++ b/tests/mkfs-tests/006-partitioned-loopdev/test.sh @@ -18,15 +18,15 @@ cp partition-1g-1g img run_check truncate -s2g img loopdev=$(run_check_stdout $SUDO_HELPER losetup --partscan --find --show img) -base=$(basename $loopdev) +base=$(basename "$loopdev") # expect partitions named like loop0p1 etc -for looppart in $(ls /dev/$base?*); do - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f $looppart - run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $looppart +for looppart in $(ls /dev/"$base"?*); do + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$looppart" + run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$looppart" done # cleanup -run_check $SUDO_HELPER losetup -d $loopdev +run_check $SUDO_HELPER losetup -d "$loopdev" run_check truncate -s0 img rm img diff --git a/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh b/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh index f7e88c9a..31f44f33 100755 --- a/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh +++ b/tests/mkfs-tests/007-mix-nodesize-sectorsize/test.sh @@ -11,9 +11,9 @@ prepare_test_dev test_mkfs_single() { - run_check $SUDO_HELPER $TOP/mkfs.btrfs -f "$@" $TEST_DEV - run_check $SUDO_HELPER $TOP/btrfs inspect-internal dump-super $TEST_DEV - run_check $SUDO_HELPER $TOP/btrfs check $TEST_DEV + run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@" "$TEST_DEV" + run_check $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-super "$TEST_DEV" + run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" } # default @@ -22,14 +22,14 @@ test_mkfs_single # nodesize >= sectorsize for nodesize in 4096 8192 16384 32768 65536; do for sectorsize in 4096 8192 16384 32768 65536; do - [ $nodesize -lt $sectorsize ] && continue - test_mkfs_single -n $nodesize -s $sectorsize -d single -m single - test_mkfs_single -n $nodesize -s $sectorsize -d single -m dup + [ "$nodesize" -lt "$sectorsize" ] && continue + test_mkfs_single -n "$nodesize" -s "$sectorsize" -d single -m single + test_mkfs_single -n "$nodesize" -s "$sectorsize" -d single -m dup done done # nodesize, mixed mode for nodesize in 4k 8k 16k 32k 64k; do - test_mkfs_single -n $nodesize -s $nodesize -d single -m single --mixed - test_mkfs_single -n $nodesize -s $nodesize -d dup -m dup --mixed + test_mkfs_single -n "$nodesize" -s "$nodesize" -d single -m single --mixed + test_mkfs_single -n "$nodesize" -s "$nodesize" -d dup -m dup --mixed done diff --git a/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh b/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh index 9cc2f9e0..345d81de 100755 --- a/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh +++ b/tests/mkfs-tests/008-sectorsize-nodesize-combination/test.sh @@ -19,13 +19,13 @@ do_test() { sectorsize=$1 nodesize=$2 - run_mayfail $TOP/mkfs.btrfs -f -O $features -n $nodesize -s $sectorsize \ - $TEST_DEV + run_mayfail "$TOP/mkfs.btrfs" -f -O "$features" -n "$nodesize" -s "$sectorsize" \ + "$TEST_DEV" ret=$? - if [ $ret == 0 ]; then - run_check $TOP/btrfs check $TEST_DEV + if [ "$ret" == 0 ]; then + run_check "$TOP/btrfs" check "$TEST_DEV" fi - return $ret + return "$ret" } # Invalid: Unaligned sectorsize and nodesize diff --git a/tests/mkfs-tests/010-minimal-size/test.sh b/tests/mkfs-tests/010-minimal-size/test.sh index 62f8e16a..0ebe0995 100755 --- a/tests/mkfs-tests/010-minimal-size/test.sh +++ b/tests/mkfs-tests/010-minimal-size/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # test if the reported minimal size of mkfs.btrfs is valid -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq mkfs.btrfs check_prereq btrfs @@ -14,12 +14,12 @@ do_test() # the minimal device size for the given option combination prepare_test_dev 1M output=$(run_mustfail_stdout "mkfs.btrfs for small image" \ - "$TOP/mkfs.btrfs" -f $@ "$TEST_DEV") + "$TOP/mkfs.btrfs" -f "$@" "$TEST_DEV") good_size=$(echo "$output" | grep -oP "(?<=is )\d+") prepare_test_dev "$good_size" echo "Minimal device size is $good_size" >> "$RESULTS" - run_check $TOP/mkfs.btrfs -f $@ "$TEST_DEV" + run_check $TOP/mkfs.btrfs -f "$@" "$TEST_DEV" run_check_mount_test_dev run_check_umount_test_dev } diff --git a/tests/mkfs-tests/011-rootdir-create-file/test.sh b/tests/mkfs-tests/011-rootdir-create-file/test.sh index c04f711d..20f7c4ce 100755 --- a/tests/mkfs-tests/011-rootdir-create-file/test.sh +++ b/tests/mkfs-tests/011-rootdir-create-file/test.sh @@ -3,7 +3,7 @@ # Expected behavior: it should create a new file if destination doesn't exist # Regression 460e93f25754 ("btrfs-progs: mkfs: check the status of file at mkfs") -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq mkfs.btrfs diff --git a/tests/mkfs-tests/012-rootdir-no-shrink/test.sh b/tests/mkfs-tests/012-rootdir-no-shrink/test.sh index c1cb04f5..765f8cdd 100755 --- a/tests/mkfs-tests/012-rootdir-no-shrink/test.sh +++ b/tests/mkfs-tests/012-rootdir-no-shrink/test.sh @@ -1,7 +1,7 @@ #!/bin/bash # Test if mkfs.btrfs --rootdir will skip shrinking correctly -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq mkfs.btrfs @@ -11,7 +11,7 @@ fs_size=$((512 * 1024 * 1024)) bs=$((1024 * 1024)) tmp=$(mktemp -d --tmpdir btrfs-progs-mkfs.rootdirXXXXXXX) -prepare_test_dev $fs_size +prepare_test_dev "$fs_size" # No shrink case @@ -20,7 +20,7 @@ run_check_mount_test_dev # We should be able to write at least half of the fs size data since the fs is # not shrunk -run_check $SUDO_HELPER dd if=/dev/zero bs=$bs count=$(($fs_size / $bs / 2)) \ +run_check $SUDO_HELPER dd if=/dev/zero bs="$bs" count=$(($fs_size / $bs / 2)) \ of="$TEST_MNT/file" run_check_umount_test_dev @@ -31,7 +31,7 @@ run_check "$TOP/mkfs.btrfs" -f --rootdir "$tmp" --shrink "$TEST_DEV" run_check_mount_test_dev run_mustfail "mkfs.btrfs for shrink rootdir" \ - $SUDO_HELPER dd if=/dev/zero bs=$bs count=$(($fs_size / $bs / 2)) \ + $SUDO_HELPER dd if=/dev/zero bs="$bs" count=$(($fs_size / $bs / 2)) \ of="$TEST_MNT/file" run_check_umount_test_dev diff --git a/tests/mkfs-tests/013-reserved-1M-for-single/test.sh b/tests/mkfs-tests/013-reserved-1M-for-single/test.sh index 1490df2c..1944ad93 100755 --- a/tests/mkfs-tests/013-reserved-1M-for-single/test.sh +++ b/tests/mkfs-tests/013-reserved-1M-for-single/test.sh @@ -6,7 +6,7 @@ # using btrfs_alloc_chunk() which won't use the 0~1M range, so other profiles # are safe, but we test them nevertheless. -source "$TOP/tests/common" +source "$TEST_TOP/common" check_prereq mkfs.btrfs check_prereq btrfs @@ -22,14 +22,14 @@ do_one_test () dump-tree -t device "$TEST_DEV" | \ grep -oP '(?<=DEV_EXTENT )[[:digit:]]*' | head -n1) - if [ -z $first_dev_extent ]; then + if [ -z "$first_dev_extent" ]; then _fail "failed to get first device extent" fi echo "first dev extent starts at $first_dev_extent" >> "$RESULTS" echo "reserved range is [0, $(( 1024 * 1024)))" >> "$RESULTS" # First device extent should not start below 1M - if [ $first_dev_extent -lt $(( 1024 * 1024 )) ]; then + if [ "$first_dev_extent" -lt $(( 1024 * 1024 )) ]; then _fail "first device extent occupies reserved 0~1M range" fi } diff --git a/tests/mkfs-tests/014-rootdir-inline-extent/test.sh b/tests/mkfs-tests/014-rootdir-inline-extent/test.sh new file mode 100755 index 00000000..09a96004 --- /dev/null +++ b/tests/mkfs-tests/014-rootdir-inline-extent/test.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Regression test for mkfs.btrfs --rootdir with inline file extents +# For any large inline file extent, btrfs check could already report it + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs + +prepare_test_dev + +tmp=$(mktemp -d --tmpdir btrfs-progs-mkfs.rootdirXXXXXXX) + +pagesize=$(getconf PAGESIZE) +create_file() +{ + local size=$1 + # Reuse size as filename + eval printf "%0.sx" {1..$size} > "$tmp/$size" +} + +test_mkfs_rootdir() +{ + nodesize=$1 + run_check "$TOP/mkfs.btrfs" --nodesize "$nodesize" -f --rootdir "$tmp" \ + "$TEST_DEV" + run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" +} + +# Use power of 2 from 512 to 64K (maximum node size) as base file size +for i in 512 1024 2048 4096 8192 16384 32768; do + create_file $(($i - 102)) + # 101 is the overhead size for max inline extent + create_file $(($i - 101)) + create_file $(($i - 100)) + + create_file $(($i - 1)) + create_file $i + create_file $(($i + 1)) +done + +for nodesize in 4096 8192 16384 32768 65536; do + if [ "$nodesize" -ge "$pagesize" ]; then + test_mkfs_rootdir "$nodesize" + fi +done +rm -rf -- "$tmp" diff --git a/tests/mkfs-tests/015-fstree-uuid-otime/test.sh b/tests/mkfs-tests/015-fstree-uuid-otime/test.sh new file mode 100755 index 00000000..a2e04a3f --- /dev/null +++ b/tests/mkfs-tests/015-fstree-uuid-otime/test.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# verify that mkfs fills the uuid and otime for FS_TREE + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper +prepare_test_dev + +# item 3 key (FS_TREE ROOT_ITEM 0) itemoff 14949 itemsize 439 +# generation 4 root_dirid 256 bytenr 30408704 level 0 refs 1 +# lastsnap 0 byte_limit 0 bytes_used 16384 flags 0x0(none) +# uuid 322826f3-817a-4111-89ff-5481bfd516e2 +# ctime 1521656113.0 (2018-03-21 19:15:13) +# otime 1521656113.0 (2018-03-21 19:15:13) +# drop key (0 UNKNOWN.0 0) level 0 + +run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$@" "$TEST_DEV" +# match not-all-zeros in the first part +uuid=$(run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree -t root "$TEST_DEV" | \ + grep -A 3 "FS_TREE ROOT_ITEM 0" | grep 'uuid ') + +if [ $? != 0 ]; then + _fail "uuid for FS_TREE not found" +fi + +if [ "$uuid" = '00000000-0000-0000-0000-000000000000' ]; then + _fail "uuid for FS_TREE is null" +fi + +run_check_stdout $SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree -t root "$TEST_DEV" | \ + grep -A 5 "FS_TREE ROOT_ITEM 0" | grep -q 'otime ' || \ + _fail "otime for FS_TREE not found" diff --git a/tests/mkfs-tests/016-rootdir-bad-symbolic-link/test.sh b/tests/mkfs-tests/016-rootdir-bad-symbolic-link/test.sh new file mode 100755 index 00000000..39387ec7 --- /dev/null +++ b/tests/mkfs-tests/016-rootdir-bad-symbolic-link/test.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# Regression test for mkfs.btrfs --rootdir with dangling symlink (points to +# non-existing location) +# +# Since mkfs.btrfs --rootdir will just create symbolic link rather than +# follow it, we shouldn't hit any problem + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs +prepare_test_dev + +tmp=$(mktemp -d --tmpdir btrfs-progs-mkfs.rootdirXXXXXXX) + +non_existing="/no/such/file$RANDOM$RANDOM" + +if [ -f "$non_existing" ]; then + _not_run "Some one created $non_existing, which is not expect to exist" +fi + +run_check ln -sf "$non_existing" "$tmp/foobar" + +run_check "$TOP/mkfs.btrfs" -f --rootdir "$tmp" "$TEST_DEV" +run_check "$TOP/btrfs" check "$TEST_DEV" + +rm -rf -- "$tmp" |